我使用 rsync 3.1.1 来保持两张光盘的同步,其中一张位于网络上并作为 samba 共享安装在/mnt/ROUTER_WD_2TB/
.这是源,由于网络限制,速度最大为 30-40MB/s。另一个是目标,本地安装(峰值 110MB/s),并且是/mnt/BACKUP_HITACHI_2TB/
.
我使用以下 rsync 命令:
rsync -haAXi --quiet --append-verify --delete /mnt/ROUTER_WD_2TB/* /mnt/BACKUP_HITACHI_2TB/.
磁盘包含许多文件,大多数都很小。
问题是rsync需要相当长的时间(10-20m)前开始移动任何文件,我猜是因为它必须计算大量小文件的文件列表。在此期间,网络利用率低至200-500KB/s,而传输文件时的速度约为40MB/s。
通常情况下,rsync 需要大约 15m 才能最终找到它必须复制的内容,然后花费 5 秒来复制它,然后继续检查其他一些文件以再复制 5 分钟。总而言之,5 秒的文件复制最终持续了 20 分钟!
除了排除文件夹之外,是否可以采取任何措施来避免在复制文件之前花费这么长的时间?我可以实现任何类型的“缓存”,以便 rsync 不必从头开始重建所有文件列表?
答案1
就您而言,rsync
您正在两个本地文件树之间进行复制,因此它禁用了大部分优化(包括其著名的增量算法)。如果您可以在远程服务器上运行rsync
(这样您就可以在网络上获得真正的客户端-服务器场景),您将获得巨大的吸引力。
尽管如此,这里还有其他可供考虑的选择
复制时无需担心删除旧文件。这可以让您更频繁地执行更快的传输,并将较慢的清理降级为每天一次:
cp -au /mnt/ROUTER_WD_2TB/. /mnt/BACKUP_HITACHI_2TB/
使用 的默认删除算法的变体
rsync
以避免在传输之前构建完整的文件列表:rsync -haAXi --quiet --delete --delete-during /mnt/ROUTER_WD_2TB/ /mnt/BACKUP_HITACHI_2TB/
将顶级目录拆分为单独的任务并并行运行它们。您可能会发现,如果您受磁盘 IO 限制,那么这不会真正有帮助,并且对于旋转盘片来说,它几乎肯定会让事情变得更糟。
for d in /mnt/ROUTER_WD_2TB/* do rsync -haAXi --quiet --delete --delete-during "$d" /mnt/BACKUP_HITACHI_2TB/ >"/tmp/rsync.${d/*\/}.log" 2>&1 & done wait cat /tmp/rsync.*.log rm -f /tmp/rsync.*.log
如果这些建议都没有帮助,那么值得添加另一个建议--verbose
来rsync
看看它在做什么。我怀疑它会破坏所有未更改的文件,如果您有足够的文件,这将需要很长时间。