优雅的方式rsync在两个本地文件夹之间的数以百万计的文件

我想rsync一个文件夹从本地目录到数百万个文件,每天。 文件本身很less改变。

我想减less对正在运行的服务器的影响,例如CPU时间或I / O,所以我使用下面的命令

 nice -n19 ionice -c3 rsync -ac --delete /foo /backup/ 

但是,我发现在执行rsync命令的过程中,仍然会产生大量的CPU尖峰和高I / O消耗。

有没有更好的方法来完成我的目标?

你是否真的需要比较校验和,而不是只是date,甚至只是文件的大小呢?

当你使用-c

 -c, --checksum skip based on checksum, not mod-time & size 

这意味着您需要读取两个文件系统上的每个文件的全部内容。 如果closures此function并使用mod时间和大小,则只需要对目录进行统计。 我不认为bwlimit选项在这种情况下会有很大的帮助,因为它控制着rsync进程之间的速率,而不是文件上的I / O来确定校验和的速率。

您可以尝试使用rsync的–bwlimit来限制复制操作期间rsync使用的带宽。

例如,我做了这样的事情,从我的安全摄像机异地同步video,而不会太多地打断我的互联网连接:

 rsync -avv --bwlimit=180 --delete --exclude '*.jpg' remote.server.com:/stuff 

–Scott