【问题标题】:How to copy multiple files simultaneously using scp如何使用 scp 同时复制多个文件
【发布时间】:2015-03-17 11:44:18
【问题描述】:

我想同时复制多个文件以加快我目前使用跟随的过程

scp -r root@xxx.xxx.xx.xx:/var/www/example/example.example.com .

但它一次只复制一个文件。我有一根 100 Mbps 的光纤,所以我有足够的带宽可以同时复制很多东西,请帮忙。

【问题讨论】:

  • 什么是“100meg 纤维”? 100兆以太网?还是 10 GBit 以太网?
  • 编写脚本!。在每个命令的末尾添加一个& 以将其发送到后台或查看 gnu 并行
  • @AaronDigulla 对不起,我的意思是 100mbit 以太网
  • @FredrikPihl 我不确定我是否理解您的意思,请您详细说明一下吗?

标签: linux scp


【解决方案1】:

您可以使用带有等待命令的后台任务。 等待命令确保在处理下一行之前完成所有后台任务。即 echo 将在所有三个节点的 scp 完成后执行。

#!/bin/bash
scp -i anuruddha.pem myfile1.tar centos@192.168.30.79:/tmp &
scp -i anuruddha.pem myfile2.tar centos@192.168.30.80:/tmp &
scp -i anuruddha.pem myfile.tar centos@192.168.30.81:/tmp &

wait
echo "SCP completed"

【讨论】:

  • 这只会复制同一个文件多次
【解决方案2】:

SSH 能够进行所谓的“多路复用”——通过一台(到一台服务器)进行更多连接。这可能是负担得起您想要的东西的一种方式。查找诸如“ControlMaster”之类的关键字

第二种方法是使用更多的连接,然后在后台发送每个作业:

for file in file1 file2 file3 ; do 
     scp $file server:/tmp/ & 
done

但是,这是您的问题的答案 - “如何同时复制多个文件”。为了加快速度,您可以使用较弱的加密(rc4 等),并且不要忘记,瓶颈可能是您的硬盘驱动器 - 因为 SCP 不会隐式限制传输速度。

最后一件事是使用 rsync - 在某些情况下,它可能比 scp 快得多...

【讨论】:

  • S,您所说的是 100% 正确,但我不仅尝试一次访问几个大文件。我正在尝试总共下载大约 10 000 张小图片
  • 那么最好的方法是创建一个存档(tar),也许压缩它(gzip),然后传输并进行反向操作。
  • 谢谢迈克,我认为这是最好的解决方案。非常感谢!
  • 最快的方法是ssh source.machine "tar czpf - /lot/of/data" | tar xzpf - -C /tmp
  • @rogerdpack:嗨,看看stackoverflow.com/questions/22411932/…
【解决方案3】:

我不确定这是否对您有帮助,但我通常会在源文件中存档(不需要压缩。只需存档即可)文件,下载并解压缩。这将显着加快这一进程。 在存档之前,下载 1GB 需要 > 8 小时 归档后花了

【讨论】:

    【解决方案4】:

    实际上,100mbit 以太网非常慢。理论上,您可以预期 8 MiB/s。在实践中,您通常最多只能获得 4-6 MiB/s。

    也就是说,如果您并行运行多个会话,您不会看到速度提高。您可以自己尝试,只需运行两个并行的 SCP 会话,复制两个大文件。我的猜测是你不会看到明显的加速。原因如下:

    1. 两台计算机之间的网络路径上最慢的组件决定了最大。速度。
    2. 其他人可能同时访问 example.com,从而减少了它可以为您提供的带宽
    3. 100mbit 以太网要求两个连续网络数据包之间有相当大的间隙。 GBit 以太网在这方面要好得多。

    解决方案:

    1. 在通过网络发送之前压缩数据
    2. 使用rsync 之类的工具(在后台使用 SSH)复制自上次运行命令以来发生更改的文件。
    3. 创建大量小文件需要很长时间。尝试在远程端创建所有文件的存档并将其作为单个存档发送。

    最后一个建议可以这样做:

    ssh root@xxx "cd /var/www/example ; tar cf - example.example.com" > example.com.tar
    

    或压缩:

    ssh root@xxx "cd /var/www/example ; tar czf - example.example.com" > example.com.tar.gz
    

    注意:bzip2 压缩效果更好但速度较慢。这就是为什么我使用gzip (z) 来完成这样的任务。

    【讨论】:

    • 在我的场景中,它的文件并不大,大约有 10 000 张图像,每个图像在 30-60kb 之间,所以如果我是正确的,一次下载至少 10 张不会减慢我的连接速度?我没有来自服务器的大于 100kb 的图像或文件。此外,当我运行两个 SCP 会话时,下载相同的文件并相互覆盖。
    • 我知道这是一个相当古老的问题,但正如@Philip 所建议的那样,传输速度与可用带宽无关,一个简单的 tar 将使事情变得快很多很多倍,数量数据,使用的带宽将相同(ish),但传输速度会很棒。
    【解决方案5】:

    您可以使用并行 scp (AKA pscp):http://manpages.ubuntu.com/manpages/natty/man1/parallel-scp.1.html

    使用此工具,您可以将一个(或多个)文件同时复制到多个主机。

    问候,

    【讨论】:

    • 提供简短的详细信息作为答案以及链接
    【解决方案6】:

    如果您指定多个文件,scp 将按顺序下载它们:

    scp -r root@xxx.xxx.xx.xx:/var/www/example/file1 root@xxx.xxx.xx.xx:/var/www/example/file2 .
    

    或者,如果您希望并行下载文件,则使用多个 scp 调用,将每个调用置于后台。

    #! /usr/bin/env bash
    scp root@xxx.xxx.xx.xx:/var/www/example/file1 . &
    scp root@xxx.xxx.xx.xx:/var/www/example/file2 . &
    

    【讨论】:

      猜你喜欢
      • 2013-05-28
      • 1970-01-01
      • 2012-02-05
      • 2016-05-23
      • 2010-11-16
      • 2013-11-25
      • 2014-12-09
      • 1970-01-01
      • 2014-12-12
      相关资源
      最近更新 更多