`scp`で` -C`フラグは正確に何をしますか?


35

私は常に、rsyncまたはscpリモートマシンとの間でファイルをコピーするために、またはその両方を使用します。最近、scpman scp)のマニュアルでフラグを発見しました-C

 -C      Compression enable.  Passes the -C flag to
         ssh(1) to enable compression.

このフラグを発見する前に、私はzip以前に使用していたscp

を使用して-C圧縮するだけでなく、解凍するのと同じくらい効率的ですか?いつ1つまたは別のプロセスを使用すると、転送が高速になりますか?


2
私が思う最善の方法は、あなた自身によるベンチマークです。とを使用scp -rvscp -Crvてスループットを比較します。
-cuonglm

3
これは質問とはまったく関係ありませんzipが、非常に「窓」に近いファイル形式です。ネイティブのlinuxソフトウェアでlinuxマシンを操作するとき、ほとんど見たり、必要としたりすることはありません。tar一方で、パーミッションや名前などを維持しながら、一つのファイルにディレクトリをロールアップするために使用されているgzipbzip2xz、などの圧縮ファイルに使用されています。tarsは多くの場合、圧縮されてtar.gzおりtar.xz、Linuxのアーカイブの一般的な形式です。私は人々が自分のscp仕事のようにコマンドを使って転がるのを見てきましたtar cvz directory | ssh machine 'cd somewhere; tar xz'
Score_Under July

2
@Score_Under-zip形式はJavaでも.jarファイルをパッケージ化するために使用されるため、zipは多くのLinuxサーバーで引き続き広く使用されています。
ジョニー

各ファイル転送でオプションを使用する代わりCompression yesに、.ssh/configファイルに入れることができます。
バーマー

:あなたは本当にスピードが必要な場合は、SSHを避けることができるかもしれunix.stackexchange.com/questions/227951/...
rogerdpack

回答:


22

実際には大きな違いはありませんが、コピーする前にファイルを圧縮すると、zip複数のファイルをカプセル化できるようなコンテナ形式(などtar)を使用する必要がなく、zipをストリーミングできないため、少し効率が悪いはずです入力と出力(したがって、一時ファイルが必要です)。

gzip他方では、フードの下でzip何をするのかを正確に同じではなく、代わりに使用するssh -C必要がありますssh -C


わかりました、私は何であるかチェックしますgzip。あなたの答えは、scp -rCおそらく私が持っている最も効率的なソリューションであることを意味していますか?
Remi.b

1
あなたの答えは-C、対話型プロトコルストリームを圧縮することを考慮していません。データのみを考慮します。あなたの結論は間違っています。私の答えを
マーティンPrikryl

@Celada Zipは、メンバーディレクトリが最後に配置されるため、パイプラインに書き込むことができます。ただし、前述したように、解凍には複数のメンバーを抽出する必要があるため、パイプラインから読み取ることができません。
jrw32982はモニカをサポートします

20

この-Cフラグは、SSHストリームのgzip圧縮を有効にします。

Accept-Encoding: gzipHTTP と同等です。

フラグの実行方法は、転送するデータの種類によって異なります。

  • 単一の大きなファイルを転送する場合、パフォーマンスは、転送前にファイルを圧縮する場合とほぼ同じになります(zip対gzipアルゴリズムの効率を無視します)。

    ただし-C、ユーザーとして使用する方が手間がかかりません。

  • 小さなファイルを大量に転送する場合、転送前にファイルを圧縮するよりもパフォーマンスが低下します。

    その背後にある理由は、各ファイル転送の前に、SCPサーバーとクライアントの間でインタラクティブな通信が行われることです(タイムスタンプや許可などのファイルメタデータの交換のため)。そのため、両側が応答するのを少し待つ必要があります(待っている間は圧縮は役に立たない)。これは、転送された各ファイルの無駄な時間です。無駄な時間は、接続の待ち時間によって異なります。最終的に、転送は大幅に遅くなる可能性があります。

    単一のzipファイルを転送する場合、その通信は1回だけ行われます。


8

ssh(scpの下)でgzip圧縮を有効にします。

、低速接続これは、任意の合理的に高速接続(100Mビットまたは高速)の圧縮は非常に可能性が遅いものにダウンして、物事をスピードアップします。

選択したzip圧縮レベルよりもgzip(具体的にはgzip -6)の効率が高いか低いかに基づいて、zipよりも効率が高くなります。


1
私の特定のケースでは、私は比較的良い接続を持っています(私はキャンパスにいます)が、コピーしなければならないフォルダーは非常に大きいです(442 .binおよび.txtファイルで100GBまで)。だから、あなただけの使用に示唆しているscp -rと無-Cフラグとなしzipgzipではありませんかtar
Remi.b

2
@ Remi.b:おそらく両方の方法でベンチマークを行い、確認する必要があります。問題は、CPUがデータを圧縮せずにネットワーク経由で送信するよりも速い速度で圧縮できるほど高速かどうかです。したがって、答えは特定のマシンとネットワークに依存します。
ネイト・エルドリッジ

さて、ポイント+1を獲得しました。ご協力いただきありがとうございます
Remi.b

SSH自体は、私が気づくCPUをいくらか使用しているようであり、帯域幅の最大値をはるかに下回る場合があります。そこで何をすべきかわからない
...-rogerdpack

パフォーマンスもデータに依存します。基本的にすべてゼロのファイルをコピーすると、高度に圧縮されます。2つのリモートサーバー間に500Mbのリンクがあり、このリンクを介してすべてのゼロを含む50Gファイル(VMWare VMDK)を〜128-130MB / s(おそらくscp圧縮バッファーの制限)でコピーし、約6-7分しかかかりません。圧縮しないと、これには1時間45分かかります。マイレージは、データの複雑さと圧縮の程度によって異なります。
トファー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.