背景
rsync用来同步数据非常的好用,特别是增量同步。但是有一种情况如果不增加特定的参数就不是很好用了。比如,我公司数据同步场景:每月月初都进行同步几个100多G的压缩包数据,因限速设置,会连续好几天用来同步数据,但当同步到近100G的时候,再次启用rsync同步时,会出现以下两种问题:
1)但是发现等了好久都没有进行数据传输,倒是机器的IO一直居高不下。
2)长时间未进行数据传输,不知因网络问题,还是时间超时问题,导致数据不能正常进行增量同步

原因
rsync具体的增量同步算法不太清楚。根据它的表现来看,可能在增量同步已经存在的一个文件时,会校验已传输部分数据是否已源文件一致,校验完成才继续增量同步这个文件剩下的数据。所以如果对一个大文件以这样的算法来增量同步是非常花时间并且占用IO资源的。

方法
rsync有一个参数能快速恢复大文件的增量同步,--append。
设置–append参数会在增量同步时计算文件 大小并直接追加新的数据到文件,这样就省了费IO校验的过程。

注意:这个参数最好只在源文件和目标文件都不会更改的时候使用比较安全,比如备份的文件。

案例:
test-2019-06目录下为150G的压缩文件,因网络带宽问题,设置定时任务,每天正常情况下,只能同步10G左右数据
rsync -vzrtp -P --append --bwlimit=1024 -e "/usr/bin/ssh -p 22 -o StrictHostKeyChecking=no" [email protected]:/tmp/test-2019-06 /tmp/backup

参数详解:
-v --verbose 详细模式输出
-z, --compress 对备份的文件在传输时进行压缩处理
-t, --times 保持文件时间信息
-r, --recursive 对子目录以递归模式处理
-p, --perms 保持文件权限
-P, --partial 保留那些因故没有完全传输的文件,以是加快随后的再次传输

--bwlimit=KBPS 限制I/O带宽,KBytes per second