同时运行多个scp线程


11

同时运行多个scp线程:

背景:

我经常发现自己经常镜像一组服务器文件,并且这些服务器文件中包含数千个小的1kb-3kb文件。所有服务器都连接到1Gbps端口,该端口通常分布在各种数据中心中。

问题:

SCP一次又一次地传输这些小文件,这需要花很多时间,我感觉自己是在浪费我拥有的美丽网络资源。

解?:

我有个主意 创建一个脚本,该脚本将文件分成相等的数量,并启动5-6个scp线程,从理论上讲,它将完成5-6倍,不是吗?但是我没有任何Linux脚本编写经验!

问题:

  • 对于上述问题是否有更好的解决方案?
  • 是否已经存在类似的东西?
  • 如果没有,是否有人会帮助我或帮助我?
  • 如果不是2或3,那么哪里是开始学习Linux脚本的好地方?像bash或其他。

Answers:


11

我会这样做:
tar -cf - /manyfiles | ssh dest.server 'tar -xf - -C /manyfiles'

根据要传输的文件,在tar命令中启用压缩可能很有意义:
tar -czf - /manyfiles | ssh dest.server 'tar -xzf - -C /manyfiles'

您还可以为ssh命令选择一个更友好的CPU密码(例如arcfour): tar -cf - /manyfiles | ssh -c arcfour dest.server 'tar -xf - -C /manyfiles'

或将两者结合使用,但这实际上取决于您的瓶颈。如果进行增量同步,
显然rsync会更快。


10

使用rsync代替scp。您可以使用rsyncssh一样容易scp,它支持“文件传输的流水线,以尽量减少等待时间成本。”

提示:如果数据是可压缩的,请启用压缩。如果不是,请禁用它。


昨晚我刚刚使用scp进行了一次传输,而使用rsync进行了另一次类似的传输- 似乎快得多。但是,它似乎一次仍在传输一个文件-任何想法如何使它执行多个线程(通过脚本包括--include'ing和--exclude'一堆目录之外;请参见:sun3.org/archives / 280
aendrew

鉴于带宽有限,无法同时传输多个文件。我相信带宽充足时您不会考虑使用此命令。当您处理许多小文件时,消除延迟成本已经很有帮助。即使您可以同时复制多个文件,有限的带宽也不会加快文件传输速度。

1

我本来建议使用GNO Parallel(您仍然需要做一些脚本工作),但是随后我发现了pscp(这是pssh的一部分)。那可能恰好满足您的需求。


1
似乎可以pssh同时在多台计算机上运行。我不认为它实现了文件级并行性。
David Schwartz

我可能应该具体一点-我的意思是pscp。
Rilindo


0

可能不相关,但是如果您想获得更实时的信息,可以尝试GlusterFS。效果很好,但是如果您想有效地读取小文件,则需要进行一些调整。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.