起因:
今天公司有台线上数据主机双硬盘损坏,随时都会有宕机的危险,因此需要对该机器上的代码和数据进行数据备份。
准备工作
1.申请获取该主机以及备份主机的备份数据的读写权限
2.查看进程或者crontab查看线上使用的代码路径crontab -l
迁移方法
使用SCP
命令进行跨主机数据复制
SCP XXX:/home/video/a.txt ./
将目标机器文件复制到本地目录下SCP ./a.txt XXX:/home/video/
将本地文件复制到远程机器下
传输一个目录SCP -r XXX:/home/video ./
问题
使用SCP迁移耗时太慢
经过分析发现有如下两个原因:
1.需要迁移的文件数量太大du -sh ./*
ls -lR|grep "^_"|wc -l
可以看到仅仅一个目录下就有5000+文件
因此一般的操作就是先打包再上传
解决
对于问题二来说,一般都是先打包再上传,这样会比较快一点tar a.tar.gz -zcvf ./
然后再去使用SCP传输
但是对于问题一而言就需要首先找出哪些文件太大(毕竟code不可能达到G)
使用du -sh /目录
逐步发现那些文件比较大
如何迁移一个目录内去除某个子目录的所有文件代码呢?
思路一:
根据正则匹配,SCP 去递归复制除了logs的文件(考虑到logs文件的文件名相似性)
这种方式问题比较多,一个是仍然SCP复制很多文件,速度较慢,另一个是这种方法不容易保持文件间的目录结构。
思路二:
利用tar的特性
tar test.tar.gz --exclude=./test/ext ./test
打包test目录下,非ext子目录的所有文件,并且保持其目录结构
tar -zcvf wangwenfeng.tar.gz --exclude=../wangwenfeng/work/cooper-cover-baishi/logs --exclude=../wangwenfeng/work/paytofree-monitor/logs --exclude=../wangwenfeng/work/person-to-aladdin/logs --exclude=../wangwenfeng/work/topqtobaishi/logs ../wangwenfeng
然后再使用SCP传输就很快了
命令总结
1.SCP XXX:/home/video/a.txt ./
将目标机器文件复制到本地目录下
2.ls -lR|grep "^_"|wc -l
递归查找目录文件总数
3.du -sh ./*
查看文件夹内子文件总大小
4.tar test.tar.gz --exclude=./test/ext ./test
打包test目录下,非ext子目录的所有文件,并且保持其目录结构
网友评论