我在 Centos 6 机器上运行了一个 rsync 备份脚本,该脚本通过千兆连接从本地 (LAN) 服务器同步约 410gb 的数据。此脚本每小时运行一次,如果没有新文件需要复制,则通常需要大约 20 分钟才能完成。
我实现了一个在 Centos 机器上运行的清除脚本,它会删除本地备份副本中超过 1 年的所有文件(经过一些检查),并将这些文件添加到排除列表中,以供 rsync 解析。一切正常,但需要大约 10 小时才能完成(没有新文件)。初始清除后,源数据现在约为 80gb,排除列表约为 90mb。
以下是脚本中的 rsync 行:
rsync -pad $wholefiles --exclude-from=${exclfile}.combined /mnt/${smbdir}/${drive}/${foldername} /backup/rob/${smbdir}/${drive} >> /var/log/rob/robso.log 2>&1
rsync(或 bash)对文件列表的大小有限制吗?你能看出我的语法中有什么会导致如此大量的处理时间吗?提前致谢。
编辑:在这种情况下,上面 rsync 行中的 $wholefiles 变量传递了 --whole-file 选项。
答案1
我会扭转这种局面。rsync
我不会排除大量文件,而是不考虑这些文件rsync
。
cd "/mnt/${smbdir}/${drive}/${foldername}" &&
find . -maxdepth 1 -mtime -366 -type f -print0 |
rsync -a0 --files-from=- . "/backup/rob/${smbdir}/${drive}" >> /var/log/rob/robso.log 2>&1
我不太确定是否通过指定rsync -d
( --dirs
) 来避免递归。如果我错了,请删除-maxdepth 1
。
该--whole-file
选项无关紧要,因为它将始终在这里使用,因为rsync
它看到它是在同一个“本地”文件系统的两个部分之间复制。(是的,这意味着它的增量算法被禁用。)
您可能希望减少所find
考虑文件集的时间跨度。这里我将其设置为仅包含过去 366 天内修改过的文件,因为您提到排除超过一年的文件。