利用rsync断点续传scp中断的文件传输

服务器经常需要备份,但是长时间的下载,难免会出现下载中断的情况。

一直使用scp下载备份好的文件,以前数据量少的时候,直接重新下载就可以了。随着网站上数据越来越多,下载的时间越来越长,完全重新开始变得不现实了。有时候下载到90%以上的时候,失败了,完全重传是没有必要的。

我们只需要下载缺失的部分就好了,幸运的是rsync支持这种需求。

具体的做法是将如下的选项组合传递给rsync-checksum(文件分块计算校验和,只传输校验和不一致的部分),-in-place(将文件原地替换,因为rsync通常会写一个临时文件,然后移动)和-no-whole-file(告诉rsync不要复制整个文件,而是使用deltas(部分传输))。

例如:

$ rsync -Pa --checksum --inplace --no-whole-file --progress remote.server:file local.file

下面是一个真实的例子:

$ rsync -Pa --checksum --inplace --no-whole-file --progress -e 'ssh -p 22' user@www.mobibrw.com:~/backup/wordpress.20181203.tar.gz wordpress.20181203.tar.gz

receiving incremental file list
sent 19 bytes  received 76 bytes  0.22 bytes/sec
total size is 8379088896  speedup is 88200935.75

整个过程非常的快,比完全重传快多了。

scp命令拷贝文件非常好用,但在拷贝大文件时存在一个问题就是连接经常会断开,此时再使用scp进行拷贝会重新拷贝文件,为了解决这个问题。我们可以使用rsync命令来进行断点续传。命令如下:

$ rsync -P --rsh=ssh xxx.zip 192.168.0.1:~/

为了使用方便可以设置alias:

$ alias rscp="rsync -P --rsh=ssh"

参考链接


发布者

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注