我有一个包含大约 150 万个文件的文件夹,我需要尽可能多地将它们复制到辅助服务器。您会推荐什么,因为显然标准 rsync 命令无法做到,因为仅发送增量文件列表(使用 rsync -Pcr 选项时)大约需要 30 分钟......而文件传输大约需要 10 秒。您将如何解决系统管理员的这个问题?
我目前使用以下命令,间隔为 30 分钟:
rsync -Pcr /var/primary/storage /var/secondary/ --log-file=/tmp/rsync.log
注意:/var/primary/storage 是通过 NFS 挂载到辅助服务器的文件夹
更新:
我现在也尝试了以下命令:
cp -aur /var/primary/storage /var/secondary/
但奇怪的是,该命令询问我是否允许覆盖与源文件具有完全相同修改日期的目标文件。如果源文件比目标文件更新(或修改),更新选项是否应该默认观看并复制?
我认为最好的选择实际上是监视或记录哪些文件已更改。尽管这可以使用 SDS 解决,但由于您使用的是 rsync,我建议您使用普通文件系统。
因此,我认为
inotifywait
作为一个守护进程运行对你来说是最好的选择:将其嵌入到 1) 读取文件、2) 推送更改和 3) 完成后清除内容的简单 bash 脚本中时,您应该得到一个非常“即时”的解决方案:
偏离路线上面的脚本需要正确完成,但你明白了。
我找到了解决方案,但是它有点复杂,需要一些思考。如果您不想阅读它,那么TLDR: No NFS, no issue and it is better to give than get
所以我尝试将文件从 FileServer-1 同步到 FileServer-2。为了减轻 FileServer-1 的压力,我想我可以在 FileServer-2 上执行 rsync 命令并从 FileServer-1 复制文件。我已经将其反转并从 FileServer-1 运行 rsync 命令以将文件夹增量文件列表复制到 FileServer-2。魔术发生了,它更快。仍然无法接受,但速度更快。
过了一会儿,我不得不从两个 FileServer 上卸载 NFS 文件夹。偶然我从 FileServer-1 运行 rsync 命令将文件从本地机器复制到 FileServer-2。现在真正的奇迹发生了,因为它在大约 2 分钟内完成。
我已经从 FileServer-2 中删除了大约 600MB 的数据并再次启动 rsync 只是为了查看 rsync 需要多少时间来复制所有文件(即大约 10.000 个文件)。不到5分钟!!!!
自从我卸载了文件夹(与我尝试 rsync 的文件无关) rsync 开始像野兽一样工作。
任何人都可以解释为什么 Rsync 和 NFS 会这样互相加热?或者这只是我系统上一个非常独特的现象?使用 CentOS 7,我忘了说。