在两个本地文件夹之间同步数百万个文件的优雅方式

在两个本地文件夹之间同步数百万个文件的优雅方式

我想rsync每天将包含数百万个文件的文件夹从一个本地目录移动到另一个目录。文件本身很少更改。

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

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

但是我发现它在执行命令期间仍然会导致大量 CPU 峰值和高 I/O 消耗rsync

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

答案1

您是否真的需要比较校验和,而不仅仅是 m 日期或者甚至只是文件的大小?

当您使用 -c 时

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

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

答案2

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

例如,我会做类似这样的事情来同步场外安全摄像头的视频,而不会对我的互联网连接造成太大的影响:

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

--斯科特

相关内容