リモートマシンとの間でファイルをコピーするには、常にrsync
またはscp
を使用します。最近、scp
(man scp
)のマニュアルでフラグ-C
を発見しました
-C Compression enable. Passes the -C flag to
ssh(1) to enable compression.
このフラグを発見する前は、以前にZip
を使用し、その後scp
を使用していました。
-C
を使用する方が、圧縮して解凍するよりも効率的ですか? 1つまたは別のプロセスを使用すると、転送が速くなりますか?
実際には大きな違いはありませんが、複数のファイル(Zip
など)をカプセル化できるtar
などのコンテナー形式を使用する必要がなく、 Zip入力と出力をストリームします(そのため、一時ファイルが必要です)。
一方、gzip
の代わりにZip
を使用すると、ssh -C
は内部で実行します...自分自身のgzip圧縮はssh -C
。
-C
フラグは、SSHストリームのgzip圧縮を有効にします。
HTTPのAccept-Encoding: gzip
に相当します。
フラグの機能は、転送するデータの種類によって異なります。
単一の大きなファイルを転送する場合、パフォーマンスは転送前のファイルの圧縮とほぼ同じになります(Zipアルゴリズムとgzipアルゴリズムの効率を無視)。
ただし、-C
を使用する方が、ユーザーとしての労力が少なくて済みます。
多数の小さなファイルを転送する場合、転送前にファイルを圧縮するよりもパフォーマンスが低下します。
その背後にある理由は、各ファイル転送の前に、SCPサーバーとクライアントの間にインタラクティブな通信が存在することです(タイムスタンプや権限などのファイルメタデータを交換するため)。そのため、両方の側がもう一方の側が応答するまで少し待つ必要があります(待機中に圧縮は役に立ちません)。これは、転送されたファイルごとに無駄な時間です。どれだけの時間が無駄になるかは、接続の待ち時間によって異なります。最終的には、転送が大幅に遅くなる可能性があります。
1つのzipファイルを転送する場合、その通信は1回だけ行われます。
Ssh(scpの下)でgzip圧縮を有効にします。
slow接続では、これにより速度が向上します。合理的に高速な接続(100Mビット以上)では、圧縮により速度が低下する可能性が非常に高くなります。
選択したZip圧縮レベルよりもgzip(具体的にはgzip -6)の効率が高いか低いかに基づいて、Zipよりも効率が高くなります。