scp
を使用してファイルのバッチをコピーしようとしています しかし、それは非常に遅いです。これは10個のファイルの例です:
$ time scp cap_* [email protected]:~/dir
cap_20151023T113018_704979707.png 100% 413KB 413.2KB/s 00:00
cap_20151023T113019_999990226.png 100% 413KB 412.6KB/s 00:00
cap_20151023T113020_649251955.png 100% 417KB 416.8KB/s 00:00
cap_20151023T113021_284028464.png 100% 417KB 416.8KB/s 00:00
cap_20151023T113021_927950468.png 100% 413KB 413.0KB/s 00:00
cap_20151023T113022_567641507.png 100% 413KB 413.1KB/s 00:00
cap_20151023T113023_203534753.png 100% 414KB 413.5KB/s 00:00
cap_20151023T113023_855350640.png 100% 412KB 411.7KB/s 00:00
cap_20151023T113024_496387641.png 100% 412KB 412.3KB/s 00:00
cap_20151023T113025_138012848.png 100% 414KB 413.8KB/s 00:00
cap_20151023T113025_778042791.png 100% 413KB 413.4KB/s 00:00
real 0m43.932s
user 0m0.074s
sys 0m0.030s
奇妙なことに、転送速度は約413KB /秒で、ファイルサイズは約413KBなので、実際には1秒あたり1ファイルを転送する必要がありますが、1ファイルあたり約4.3秒かかります。
このオーバーヘッドがどこから来ているのか、そしてそれをより速くする方法はありますか?
承認された回答:
@wurtelのコメントはおそらく正しいです。各接続を確立するために多くのオーバーヘッドがあります。転送が速くなることを修正できる場合(できない場合は、@roaimaのrsync
を使用してください) 回避策)。同様のサイズのファイルを転送する実験を行いました(head -c 417K /dev/urandom > foo.1
接続に時間がかかるホスト(HOST4)と非常に高速に応答するホスト(HOST1)に、そのファイルのコピーをいくつか作成しました:
$ time ssh $HOST1 echo
real 0m0.146s
user 0m0.016s
sys 0m0.008s
$ time scp * $HOST1:
foo.1 100% 417KB 417.0KB/s 00:00
foo.2 100% 417KB 417.0KB/s 00:00
foo.3 100% 417KB 417.0KB/s 00:00
foo.4 100% 417KB 417.0KB/s 00:00
foo.5 100% 417KB 417.0KB/s 00:00
real 0m0.337s
user 0m0.032s
sys 0m0.016s
$ time ssh $HOST4 echo
real 0m1.369s
user 0m0.020s
sys 0m0.016s
$ time scp * $HOST4:
foo.1 100% 417KB 417.0KB/s 00:00
foo.2 100% 417KB 417.0KB/s 00:00
foo.3 100% 417KB 417.0KB/s 00:00
foo.4 100% 417KB 417.0KB/s 00:00
foo.5 100% 417KB 417.0KB/s 00:00
real 0m6.489s
user 0m0.052s
sys 0m0.020s
$