1、引子
在平常的工作中,我经常需要在远程服务器和本地之间传输文件。以前我都使用scp命令,直到今天因为网络中断,scp出现了stalled。因为上传的是一个100G的文件,所以如果需要重新传非常消耗时间。好在过了一会儿scp自动断点续传了,但还是很后怕,因为我不确定scp是否能每次都成功断点续传。所以这时候rsync就非常必要了。
2、scp和rsync对比
scp节约资源,系统负荷小,但断点续传是个问题;rsync速度更快,断点续传方便,但系统负荷大,尤其是传输很多文件的时候,硬盘I/O非常高。
3、scp命令
scp [OPTION] SRC DEST
常用参数:
-r:递归拷贝目录
-q:不显示进度
-l:限制传输带宽,单位是kbits/s
例如:
scp -r -l 200 /home/user/exampledir user@192.168.XXX.XXX:/home/user/
在输入命令后,系统会要求输入user在192.168.XXX.XXX的登录密码,密码正确后就开始复制,scp默认显示复制进度。
如果我们经常在两个服务器之间拷贝文件,这时候就需要一个非常有用的技术:scp免密码拷贝文件。
4、rsync命令
rsync [OPTION] SRC DEST
常用参数:
–progress: 显示拷贝进度
–partial:保留不完整文件,实现断点续传
–partial-dir=DIR:指定不完整文件的存储目录,而不是默认存储到目的地目录。
-P:包含–progress和–partial
–rsh=ssh:使用ssh方式传输文件,注意:如果之前设置过ssh免密码登录,那么此时也就不需要密码了,非常方便
-v:显示详细信息
-a:归档模式。也就是以递归方式传输文件,并保持所有文件属性。
-r:递归方式传输文件
1)上传
# 实现通过ssh协议将myfile传输到远程服务器上。其中,--rsh='ssh -p 2200'指示采用ssh协议链接并使用端口2200。
rsync -P --rsh='ssh -p 2200' /data/myfile user@openthings.x.x.x:/data/
2)下载
rsync -P --rsh='ssh -p 2200' user@openthings.x.x.x:/data/myfile /data/
3)断点续传:
所以,只要我们使用下面的命令传输数据,在断开重连后,再输入同样的命令就可以实现断点续传了
rsync -P --rsh=ssh home.tar 192.168.205.34:/home/home.tar
5、实例
上传mysql备份数据
# 要设置好免密登录对方服务器
nohup rsync -P --rsh=ssh backupdb.tar.gz root@8.200.100.167:/home/backupdb.tar.gz > scp.log &