rsync断点续传
描述:rsync是linux系统下的数据镜像备份工具。使用快速增量备份工具Remote Sync可以远程同步,支持本地复制,或者与其他SSH、rsync主机同步。
需求:当你在本地或者远程拷贝大文件时,可能会因为服务器、路由网络等不稳定性造成连接中断,这时就需要一个可以断点续传的工具进行传输
格式
注:默认不指定端口是22。需要指定加-e选项:-e 'ssh -p 端口'
本地文件以断点续传的方式拷贝到远程服务器
rsync -avP /etc/test.tar [email protected]:/opt/
指定ssh端口:rsync -avP -e 'ssh -p 端口' /etc/test.tar [email protected]:/opt/
远程文件以断点续传的方式拷贝到本地
rsync -avP [email protected]:/opt/test.tar /etc/
指定ssh端口:rsync -avP -e 'ssh -p 端口' [email protected]:/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 [email protected]:/mnt/md0/public/内网服务数据备份/ConfluenceJira/test/ [email protected]'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 [email protected]:/mnt/md0/public/内网服务数据备份/ConfluenceJira/test/ [email protected]'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 [email protected]:/mnt/md0/public/内网服务数据备份/ConfluenceJira/test/ [email protected]'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/测试断点续传/ [email protected]:/mnt/md0/public/内网服务数据备份/ConfluenceJira/test/ [email protected]'s password: Permission denied, please try again. [email protected]'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/测试断点续传/ [email protected]:/mnt/md0/public/内网服务数据备份/ConfluenceJira/test/ [email protected]'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 [email protected]:/mnt/md0/public/内网服务数据备份/ConfluenceJira/test/ [email protected]'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 [email protected]:/mnt/md0/public/内网服务数据备份/ConfluenceJira/test/
bg $1 后台运行 && fg 调回任务
[root@agent184 ~]# bg $1 [1]+ rsync -avP -e 'ssh -p 9222' /root/测试断点续传.tar [email protected]:/mnt/md0/public/内网服务数据备份/ConfluenceJira/test/ &
jobs 调出后台任务
[root@agent184 ~]# jobs [1]+ 运行中 rsync -avP -e 'ssh -p 9222' /root/测试断点续传.tar [email protected]:/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 [email protected]:/mnt/md0/public/内网服务数据备份/ConfluenceJira/test/
扩展
1.rsync断点续传方式拷贝本地文件或远程文件,目录下会生成一个隐藏的临时文件,ls -a 可以看到,每次终端后,下次拷贝还能续传拷贝
2.使用--partial参数可以保留在rsync中断时只传输了一部分的文件,用于在下次传输时从中断的地方接着传输(并且可以用--partial-dir=DIR指定将不完整的文件保留到某个目录,下次续传时,程序会到这个目录下寻找)。
3.其实,rsync本身就支持断点续传,加上--partial的作用是能实现单个文件内的断点续传(当文件比较大的时候,用这个参数的优势便会比较明显)。
注意
需要注意的是,-P既然是通过存储一个临时的文件来实现单个文件内的断点续传,那么它拷贝每个文件都要做这种额外的存储并删除临时文件的操作,非但如此,对于每个文件rsync还会计算该文件拷贝的百分比以及速度等信息
所以,对于单个大型文件,用-P参数的优势非常明显,但是如果在拷贝大量文件(可能有很多小文件不需要进行文件内断点续传)的时候,就要考虑时间上的问题的了。不用-P应该可以节省不少时间