服务器经常需要备份,但是长时间的下载,难免会出现下载中断的情况。
一直使用scp
下载备份好的文件,以前数据量少的时候,直接重新下载就可以了。随着网站上数据越来越多,下载的时间越来越长,完全重新开始变得不现实了。有时候下载到90%
以上的时候,失败了,完全重传是没有必要的。
我们只需要下载缺失的部分就好了,幸运的是rsync
支持这种需求。
具体的做法是将如下的选项组合传递给rsync
,-checksum
(文件分块计算校验和,只传输校验和不一致的部分),-in-place
(将文件原地替换,因为rsync
通常会写一个临时文件,然后移动)和-no-whole-file
(告诉rsync
不要复制整个文件,而是使用deltas
(部分传输))。
例如:
1 |
$ rsync -Pa --checksum --inplace --no-whole-file --progress remote.server:file local.file |
下面是一个真实的例子:
1 2 3 4 5 |
$ 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
命令来进行断点续传。命令如下:
1 |
$ rsync -P --rsh=ssh xxx.zip 192.168.0.1:~/ |
为了使用方便可以设置alias
:
1 |
$ alias rscp="rsync -P --rsh=ssh" |