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