LoginSignup
60
54

More than 5 years have passed since last update.

SSH経由のディレクトリ転送を効率的に行う

Last updated at Posted at 2016-10-10

scp-r をつけると、ディレクトリ内のファイルを再帰的にコピーします。しかしファイル数が多い時は scp -r よりもディレクトリを一つのアーカイブに固めたほうが、効率よくファイルを転送できます。ということでベンチマークをとってみました。対象は自分の環境の /usr/include で、ファイル数は2226個でした。

追記: scp -Cr, sftp, sftp -C の結果を追加しました。

比較対象

  • scp -r: ディレクトリを再帰的にscp
scp -r /usr/include example.com:
  • tar c: ディレクトリをtarに固めて転送
tar cf - /usr/include | ssh example.com 'tar xf -'
  • tar cz: ディレクトリをtar.gzに固めて転送
tar zcf - /usr/include | ssh example.com 'tar zxf -'
  • scp -Cr: SSHの圧縮を有効にして scp -r
scp -Cr /usr/include example.com:
  • sftp: SFTPでディレクトリ転送
sftp -b <(echo put -r /usr/include) example.com
  • sftp -C: SSHの圧縮を有効にしてSFTPでディレクトリ転送
sftp -C -b <(echo put -r /usr/include) example.com

結果

転送時間
scp -r 2m29.534s
scp -Cr 2m18.356s
sftp 2m24.265s
sftp -C 2m28.265s
tar c 2.276s
tar zc 1.032s

ダントツに、scp -r よりもアーカイブ化したほうが転送速度が短くなりました。/usr/include 以下は圧縮率が良いのか、tar.gzにしたほうが更に転送時間が短くなりました。

結論

ディレクトリをSSH経由で転送するときは

tar zcf - <from_dir> | ssh <target_host> 'tar zxf -'
60
54
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
60
54