我有多个文件夹,每个文件夹大约有1500个文件。我有一种 for 循环遍历每个文件夹,然后根据环境将文件发送到一个或 4 个远程主机。目前我正在使用rdist
.我拥有的几乎每个文件每天都会发生变化,有时它只是更改文件内的日期和时间。
我遇到过一些命令,比如pscp
,prsync
以及 GNU parallel
。我在多个主机上进行了实验pscp
,rdist
两者都给出了相似的结果。
rdist
和prsync
在性能方面有什么区别?我的理解是prsync
可以在多个主机上迁移文件,并且rdist
.我从测试中得到的理解是,既不能在单个主机上并行复制多个文件;prsync
也不能在单个主机上并行复制多个文件。rdist
它们只能在多个主机上并行复制文件。那么从性能方面来看两者有什么区别吗?对于
rdist
,我的脚本创建一个类似的 distfileHOSTS( user@server user@server2 user@server3 ) RUN:(/var/inputpath/folder) -> ${HOSTS} install (/var/outputpath/folder)
然后我
rdist
像下面一样运行rdist-f /dist-file-path -P /path/to/ssh
我
parallel
使用 GNU 测试了本地副本cp
并使用zip
.确实非常快。这允许甚至在本地计算机上并行复制多个文件。
所以我的问题是,是否有可能将 GNU 并行与 say pscp
or rdist
or结合起来prsync
?
答案1
rsync
如果更改很少,则非常适合同步 2 个目录。它甚至可以使用-z
.
不幸的是,rsync
它非常依赖于延迟,因此它通常无法填充大型连接(例如 1 Gbps)。
rsync
这可以通过并行运行多个来缓解。
从man parallel
:
示例:并行化 rsync
rsync 是一个很棒的工具,但有时它不会填满可用带宽。通过高速连接复制多个大文件时,这通常是一个问题。以下命令将为 src-dir 中的每个大文件启动一次 rsync 到服务器 fooserver 上的 dest-dir:
cd src-dir; find . -type f -size +100000 | \ parallel -v ssh fooserver mkdir -p /dest-dir/{//}\; \ rsync -s -Havessh {} fooserver:/dest-dir/{}
创建的目录最终可能具有错误的权限,并且较小的文件不会被传输。要修复这些问题,请最后一次运行 rsync:
rsync -Havessh src-dir/ fooserver:/dest-dir/
如果您的文件很小,您可以执行以下操作:
find ... |
parallel -j10 -X rsync -zR -Ha ./{} fooserver:/dest-dir/
调整-j10
直到找到最佳数字。
需要./{}
使之rsync -R
生效,从而复制目录结构,而不仅仅是将所有文件复制到单个目录中。