CentOS 6.5 VMのルートファイルシステムを格納している20 GBのKVM vdiskファイルをあるラボサーバーから別のラボサーバーに転送する必要がありました。ファイルサイズが大きいことと、このようなvdiskファイルを数百メガバイトに圧縮し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
asの使用は、serverfaultの1つの回答で提案されました。それはほとんど役に立ちませんでした。最後に、圧縮を無効にしました。scp vm1-root.img root@192.168.161.62:/mnt/vdisks/
、23 MB /秒。
圧縮はもっと速くなるべきではないのですか?
編集:質問が反対票を投じられた理由がわかりません。ここで学ぶべきことがあると思いました。
ssh(1)
@svenからmanページのヒントを受け取った後、私は圧縮を含まないファイル転送のいくつかの代替方法を試しましたが、どちらもより良い結果が得られました。
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 /秒。ポート5678
は、利用可能であった任意のポート です。
使用nc
することが最速のコピー方法であることが判明しました!
過去にscp -C
は、私が思ったときはいつでも非常にうまく機能していました。たとえば/var/log/messages*
、サイズが数GBのsyslog()を転送する場合。数百KB /秒の非圧縮転送速度は、1〜2 MB /秒に増加します。この例は、manページで指摘されているように、低速接続の場合には当てはまります。
20 GBのパーティション用に新しく作成されたvdiskイメージの圧縮サイズが200 MBしかない場合があります。転送速度が約25 MB /秒の場合、13分以上ではなく8秒でコピーを実行できます。明らかに、scp
この場合、圧縮なしでは効率が悪く、scp -C
さらに悪い結果になります。
ここで学んだ主な教訓はscp -C
、便利であると考えるべきだということです。ファイルを大幅に圧縮できる場合は、最初にソースで圧縮し、圧縮されたフォームを転送して、最後に宛先でdcompressを実行することをお勧めします。圧縮と解凍をすばやく行うツール(たとえば、pbzip2)は、さらに役立ちます。