同时从本地文件夹并行复制到远程服务器

同时从本地文件夹并行复制到远程服务器

我有多个文件夹,每个文件夹大约有1500个文件。我有一种 for 循环遍历每个文件夹,然后根据环境将文件发送到一个或 4 个远程主机。目前我正在使用rdist.我拥有的几乎每个文件每天都会发生变化,有时它只是更改文件内的日期和时间。

我遇到过一些命令,比如pscp,prsync以及 GNU parallel。我在多个主机上进行了实验pscprdist两者都给出了相似的结果。

  1. rdistprsync在性能方面有什么区别?我的理解是prsync可以在多个主机上迁移文件,并且rdist.我从测试中得到的理解是,既不能在单个主机上并行复制多个文件;prsync也不能在单个主机上并行复制多个文件。rdist它们只能在多个主机上并行复制文件。那么从性能方面来看两者有什么区别吗?

    对于rdist,我的脚本创建一个类似的 distfile

    HOSTS( 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
    
  2. parallel使用 GNU 测试了本地副本cp并使用zip.确实非常快。这允许甚至在本地计算机上并行复制多个文件。

所以我的问题是,是否有可能将 GNU 并行与 say pscpor rdistor结合起来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生效,从而复制目录结构,而不仅仅是将所有文件复制到单个目录中。

相关内容