pdp*_*pdp 15 ssh file-transfer scp
我需要将一个 20 GB 的KVM虚拟磁盘文件(存储 CentOS 6.5 VM 的根文件系统)从一台实验室服务器传输到另一台。大文件大小以及我曾经将这样的虚拟磁盘文件压缩到几百兆字节的事实使我本能地启用了压缩,scp但我惊讶地发现传输速度相当低。然后我试图bzip2结合ssh和cat与大吃一惊。以下是方法和平均吞吐量的摘要。
scp -C vm1-root.img root@192.168.161.62:/mnt/vdisks/, 11 MB/秒。 bzip2 -c vm1-root.img | ssh -l root 192.168.161.62 "bzip2 -d -c > /mnt/vdisks/vm1-root.img", 5 MB/秒。这个更低的结果促使在网上搜索。scp -c arcfour -C vm1-root.img root@192.168.161.62:/mnt/vdisks/, 13 MB/秒。-c arcfour在有关 serverfault 的一个答案中建议使用as 。它几乎没有帮助。最后,我禁用了压缩。scp vm1-root.img root@192.168.161.62:/mnt/vdisks/, 23 MB/秒。 压缩不应该更快吗?
编辑:我不知道为什么这个问题被否决了。我想在这里可以学到一些东西。
ssh(1)从@sven收到手册页提示后,我尝试了几种不涉及压缩的文件传输替代方法,两者都取得了更好的结果。
cat vm1-root.img | ssh -l root 192.168.161.62 "cat > /mnt/vdisks/vm1-root.img", 26 MB/秒。
nc -l 5678 > /mnt/vdisks/vm1-root.img在接收器和nc 192.168.161.62 5678 < vm1-root.img发射器上,40 MB/s。该端口5678是可用的任意端口 。
使用nc竟然是最快的复制方法!
在过去,scp -C每当我认为会时,效果都很好。例如,传输/var/log/messages*几 GB 大小的系统日志 ( ) 时。几百 KB/s 的未压缩传输速率将增加到 1-2 MB/s。正如手册页中所指出的那样,此示例确实适用于慢速连接的情况。
我有一个案例,新创建的 20 GB 分区的虚拟磁盘映像的压缩大小仅为 200 MB。以大约 25 MB/s 的传输速率,我们可以在 8 秒内完成复制,而不是超过 13 分钟!显然,scp在这种情况下,没有压缩是低效的,scp -C甚至更糟。
我想,这里学到的主要教训是,scp -C应该被认为只是一种方便。如果一个文件可以被显着压缩,那么最好先在源上压缩它,然后传输压缩形式,最后在目标上进行 dcompress。快速进行压缩和解压缩的工具(例如pbzip2)将有更大的帮助。
Sve*_*ven 12
引用man ssh(这是 使用的基础scp):
压缩在调制解调器线路和其他慢速连接上是可取的,但只会在快速网络上减慢速度。
问题是压缩数据比通过网络发送需要更多的时间。