20 GBを転送する必要がありました [〜#〜] kvm [〜#〜] CentOS 6.5 VMのルートファイルシステムを格納するvdiskファイルをあるラボサーバーから別のラボサーバーに転送しました。ファイルサイズが大きいことと、このようなvdiskファイルを数百メガバイトに圧縮したことがあるという事実により、本能的にscp
を使用した圧縮が可能になりましたが、転送速度がやや遅いことに驚きました。それから、ssh
とcat
を組み合わせて_bzip2
_を試してみましたが、びっくりしました。ここでは、メソッドと平均スループットの概要を示します。
scp -C vm1-root.img [email protected]:/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 [email protected]:/mnt/vdisks/
_、13 MB /秒。 serverfaultの one answer で提案された_-c arcfour
_の使用。それはほとんど役に立ちませんでした。最後に、圧縮を無効にしました。scp vm1-root.img [email protected]:/mnt/vdisks/
_、23 MB /秒。圧縮はもっと速くなるべきではありませんか?
編集:質問が反対投票された理由がわかりません。ここで学ぶべきことがあると思いました。
@svenからssh(1)
の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
_は思ったとおりにうまく機能していました。たとえば、サイズが数GBのsyslog(_/var/log/messages*
_)を転送する場合などです。数百KB /秒の非圧縮転送速度は、1〜2 MB /秒に増加します。この例は、manページで指摘されているように、低速接続の場合には当てはまります。
20 GBのパーティション用に新しく作成されたvdiskイメージの圧縮サイズが200 MBしかない場合があります。転送速度が約25 MB /秒の場合、13分以上ではなく、わずか8秒でコピーを実行できます。明らかに、この場合、圧縮なしのscp
は非効率的であり、_scp -C
_はさらに悪いものです。
ここで学んだ主な教訓は、_scp -C
_は便宜上のものとして考えるべきだということです。ファイルを大幅に圧縮できる場合は、最初にソースで圧縮し、圧縮されたフォームを転送して、最後に宛先でdcompressすることをお勧めします。圧縮と解凍をすばやく行うツール(例: pbzip2 )は、さらに役立ちます。
引用man ssh
(scp
で使用されるベース):
モデム回線やその他の低速接続では圧縮が望ましいですが、高速ネットワークでは速度が遅くなるだけです。
問題は、データを圧縮すると、ネットワーク経由で送信するよりも時間がかかることです。
また、圧縮に加えて、ncも暗号化しないため、最高のレートを取得します。非可逆圧縮は、データの冗長セクションを見つけることに依存しています。ネットワークレベルで行うと、最大[バッファサイズ]バイトを確認できます。最初にファイル全体を処理すると、[ファイルサイズ]バイトになります。その範囲内で、重複するバイト文を探してクランチします。
また、ディスクイメージを移動する場合は、ntfsclone/partcloneなどのファイルシステム対応ツールを使用する必要があります。圧縮を行っても、割り当てられていないブロックをスキップするだけでは不十分なので、データを転送する必要がない場合、転送速度は無限です。また、Windowsパーティションのスワップファイルとハイバネーションファイルを破棄することを忘れないでください。そうしないと、ジャンクファイルを捨ててしまい、とにかく再作成します。