阅读 145

rsync断点续传

rsync断点续传

描述:rsync是linux系统下的数据镜像备份工具。使用快速增量备份工具Remote Sync可以远程同步,支持本地复制,或者与其他SSH、rsync主机同步。

需求:当你在本地或者远程拷贝大文件时,可能会因为服务器、路由网络等不稳定性造成连接中断,这时就需要一个可以断点续传的工具进行传输

格式

注:默认不指定端口是22。需要指定加-e选项:-e 'ssh -p 端口'

  • 本地文件以断点续传的方式拷贝到远程服务器

rsync -avP /etc/test.tar  root@192.168.1.100:/opt/

指定ssh端口:rsync -avP -e 'ssh -p 端口' /etc/test.tar  root@192.168.1.100:/opt/

  • 远程文件以断点续传的方式拷贝到本地

rsync -avP root@192.168.1.100:/opt/test.tar /etc/

指定ssh端口:rsync -avP -e 'ssh -p 端口' root@192.168.1.100:/opt/test.tar /etc/


常用参数

  • -a:以archive模式操作,复制目录、符号连接,等价于 -rlptgoD 。

  • -v:详细提示 

  • -z:压缩

  • -u:只进行更新,防止本地新文件被重写,注意两者机器的时钟的同时

  • -P:是综合了--partial --progress两个参数

             --partial

               如果在拷贝文件的过程中,传输被中断,rsync的默认操作是撤消前操作,即从目标机上删除已拷贝的部分文件。

               如果想在下次拷贝时续传文件,不需要重新拷贝所有文件的话,可以使用-partial选项阻止rsync在传输中断时删除已拷贝的部分

               大白话:保留那些因故没有完全传输的文件,以是加快随后的再次传输(即断点续传)

            --progress 在传输中显示进度条

  • -e:参数的作用是可以使用户自由选择要使用的shell程序来连接远端服务器

             -e ‘ssh -p 9222’ 指定ssh的端口为9222,默认不指定是22

  • -r:对子目录以递归模式处理

  • -t:--times: 保留修改时间

  • --bwlimit: --bwlimit=5000  限制带宽为5000k Bytes/s =5MB


实验测试

1.传输一个tar包,故意断开

[root@agent184 ~]# rsync -avP -e 'ssh -p 9222' /root/测试断点续传.tar root@192.168.1.6:/mnt/md0/public/内网服务数据备份/ConfluenceJira/test/root@192.168.1.6's password: 
sending incremental file list
测试断点续传.tar
    143,654,912  20%   11.20MB/s    0:00:48  
连接断开

2.在连接,继续执行命令,会发现断开前传输了20%,连接之后执行命令接着上次的继续传输

连接成功
Last login: Wed Mar 31 15:11:16 2021 from 192.168.1.250[root@agent184 ~]# rsync -avP -e 'ssh -p 9222' /root/测试断点续传.tar root@192.168.1.6:/mnt/md0/public/内网服务数据备份/ConfluenceJira/test/root@192.168.1.6's password: 
sending incremental file list
测试断点续传.tar
    188,806,064  27%   37.36MB/s    0:00:13  
连接断开
连接成功
Last login: Wed Mar 31 15:14:15 2021 from 192.168.1.250
[root@agent184 ~]# rsync -avP -e 'ssh -p 9222' /root/测试断点续传.tar root@192.168.1.6:/mnt/md0/public/内网服务数据备份/ConfluenceJira/test/
root@192.168.1.6's password: 
sending incremental file list
测试断点续传.tar
    697,410,482 100%   14.72MB/s    0:00:45 (xfr#1, to-chk=0/1)sent 508,458,429 bytes  received 96,404 bytes  9,874,851.13 bytes/sec
total size is 697,410,482  speedup is 1.37

3.文件也可以

[root@agent184 ~]# rsync -avP -e 'ssh -p 9222' /root/测试断点续传/ root@192.168.1.6:/mnt/md0/public/内网服务数据备份/ConfluenceJira/test/root@192.168.1.6's password: 
Permission denied, please try again.
root@192.168.1.6's password: 
sending incremental file list
./
ca.crt
          1,159 100%    0.00kB/s    0:00:00 (xfr#1, to-chk=6/9)client.o***
            320 100%  312.50kB/s    0:00:00 (xfr#2, to-chk=5/9)config.rar
          1,785 100%    1.70MB/s    0:00:00 (xfr#3, to-chk=4/9)id_rsa
          1,675 100%    1.60MB/s    0:00:00 (xfr#4, to-chk=3/9)mysql-5.7.26-linux-glibc2.12-x86_64.tar.gz
     46,418,128 100%   11.73MB/s    0:00:03 (xfr#5, to-chk=2/9)mysql-5.7.32-linux-glibc2.12-x86_64.tar.gz
    156,073,984  23%   11.20MB/s    0:00:44  
连接断开
连接成功
Last login: Wed Mar 31 15:14:41 2021 from 192.168.1.250[root@agent184 ~]# rsync -avP -e 'ssh -p 9222' /root/测试断点续传/ root@192.168.1.6:/mnt/md0/public/内网服务数据备份/ConfluenceJira/test/root@192.168.1.6's password: 
sending incremental file list
./
mysql-5.7.32-linux-glibc2.12-x86_64.tar.gz
    263,702,378  39%   11.19MB/s    0:00:34

可以把运行任务放入后台执行

ctrl+z 暂停任务

[root@agent184 ~]# rsync -avP -e 'ssh -p 9222' /root/测试断点续传.tar root@192.168.1.6:/mnt/md0/public/内网服务数据备份/ConfluenceJira/test/root@192.168.1.6's password: 
sending incremental file list
测试断点续传.tar
     72,646,656  10%   11.17MB/s    0:00:54  ^Z
[1]+  已停止               rsync -avP -e 'ssh -p 9222' /root/测试断点续传.tar root@192.168.1.6:/mnt/md0/public/内网服务数据备份/ConfluenceJira/test/

bg $1 后台运行 && fg 调回任务

[root@agent184 ~]# bg $1[1]+ rsync -avP -e 'ssh -p 9222' /root/测试断点续传.tar root@192.168.1.6:/mnt/md0/public/内网服务数据备份/ConfluenceJira/test/ &

jobs 调出后台任务

[root@agent184 ~]# jobs[1]+  运行中               rsync -avP -e 'ssh -p 9222' /root/测试断点续传.tar root@192.168.1.6:/mnt/md0/public/内网服务数据备份/ConfluenceJira/test/ &

    697,410,482 100%    6.70MB/s    0:01:39 (xfr#1, to-chk=0/1)sent 697,580,845 bytes  received 34 bytes  6,612,141.03 bytes/sec
total size is 697,410,482  speedup is 1.00[1]+  完成                  rsync -avP -e 'ssh -p 9222' /root/测试断点续传.tar root@192.168.1.6:/mnt/md0/public/内网服务数据备份/ConfluenceJira/test/

扩展

1.rsync断点续传方式拷贝本地文件或远程文件,目录下会生成一个隐藏的临时文件,ls -a 可以看到,每次终端后,下次拷贝还能续传拷贝

2.使用--partial参数可以保留在rsync中断时只传输了一部分的文件,用于在下次传输时从中断的地方接着传输(并且可以用--partial-dir=DIR指定将不完整的文件保留到某个目录,下次续传时,程序会到这个目录下寻找)。

3.其实,rsync本身就支持断点续传,加上--partial的作用是能实现单个文件内的断点续传(当文件比较大的时候,用这个参数的优势便会比较明显)。

注意

需要注意的是,-P既然是通过存储一个临时的文件来实现单个文件内的断点续传,那么它拷贝每个文件都要做这种额外的存储并删除临时文件的操作,非但如此,对于每个文件rsync还会计算该文件拷贝的百分比以及速度等信息

所以,对于单个大型文件,用-P参数的优势非常明显,但是如果在拷贝大量文件(可能有很多小文件不需要进行文件内断点续传)的时候,就要考虑时间上的问题的了。不用-P应该可以节省不少时间


©著作权归作者所有:来自51CTO博客作者小伟996的原创作品,如需转载,请注明出处,否则将追究法律责任


文章分类
后端
文章标签
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐