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/sectotal 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/sectotal 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的原创作品,如需转载,请注明出处,否则将追究法律责任

你的鼓励让我更有动力

赞赏

0人进行了赞赏支持

更多相关文章

  1. 如何让Mac电脑在Finder窗口顶部显示文件路径?
  2. 常用的Linux命令片段
  3. Mysql主从复制
  4. Linux运维入门教程06-03 (硬盘分区、格式化及文件系统的管理一)
  5. Java 将XML转为Excel方法介绍
  6. 苹果Mac不能复制拷贝文件到U盘如何解决?
  7. curl使用:HTTP请求、下载文件、FTP上传下载
  8. Linux之文件元数据与链接
  9. Linux之文件目录作用

随机推荐

  1. 华为HCIA-传输介质简介
  2. 【前端词典】实现 Canvas 下雪背景引发的
  3. 【前端词典】从 returnWeekday() 谈 if()
  4. MySQL 5.7 vs 8.0,哪个性能更牛?网友吵开了
  5. 勿忘初心
  6. GMT UTC CST ISO 夏令时 时间戳,都是些什
  7. 【前端词典】4 种滚动吸顶实现方式的比较
  8. FAlinux06密码破解
  9. 【前端词典】4 (+1)种滚动吸顶实现方式的比
  10. HTML5骏马奔跑动画