大きなファイルの場合、最初に圧縮してから転送またはrsync -zを実行しますか?どちらが最速ですか?


14

多数の相対データファイルがありますが、それらは約50 GBを占有し、別のマシンに転送する必要があります。これを行う最も効率的な方法を考えていました。

私が考えていたのは、すべてをgzipしてからrsyncして解凍し、圧縮のためにrsync -zに依存し、gzipしてからrsync -zを使用することでした。rsync -zがどのように正確に実装されているかわからないため、どれが最も効率的かはわかりません。どのオプションが最速かというアイデアはありますか?

回答:


11

gzipは1つのファイルのみを圧縮するため、「すべてをgzipする」ことはできません。tarファイルを作成してgzipを「すべてをgzipする」ことができますが、変更されたファイルのみをコピーするrsync機能を失います。

質問は次のとおりです。gzipでrsyncする必要があるファイルを保存するか、rsyncの-zオプションに依存する方が良いでしょうか。
答えはおそらく、サーバー上でファイルを解凍したくないということでしょうか?はい、そうだと思いますので、rsyncを行う前にgzipファイルをどうやって管理できるかわかりません。

変更されたファイルのみをコピーするrsync機能は必要ないでしょうか?この場合、あなたのものを含むtar.gzファイルのscpを実行する代わりにrsyncを使用するのはなぜですか?

とにかく質問に答えるために、rsync gzipはgzipでファイルをgzipするよりも少し効率が悪くなります。どうして ?rsyncはチャンクごとにデータをgzip圧縮するので、圧縮を行うためにgzipが使用するテーブルを作成するために使用されるデータセットは小さくなり、データの大きなセット(gzipはファイル全体を一度に使用します)はより良い圧縮テーブルを提供します。しかし、ほとんどの場合、その差は非常に小さくなりますが、非常にまれなケースでは、差がより重要になることがあります(非常に長いparternがファイル上で多くの時間を繰り返すが互いに離れている非常に大きなファイルがある場合)(これは非常に単純化された例)


1
私が彼の質問をどのように読んだかから、彼はそれを圧縮してワイヤーを介して取得し、反対側を解凍します。50GBの圧縮と解凍にはかなりの時間がかかる可能性があるため、gzipではなくrsyncネイティブ圧縮を使用します。繰り返しになりますが、ファイルの大部分がテキストの場合、うまく圧縮されます。3番目のオプション:ファイルをUSBドライブにコピーします。

3
@Randolphポッター:彼は圧縮前に行うことができません(のみ変更ファイルをコピー)のrsync自体を利用したい場合は50ギガバイトを圧縮するために失われたそう時間はローカルで、その後rsyncをとにかく、使ってrsync -zよりも高くなるであろう
半径

非常に良い点。+1 :-)

また、gzipはストリームコンプレッサーであることも思い出してください。
ファルコンモモット

6

データを一度コピーするだけであれば、rsyncはそれだけで大きな勝利にはなりません。gzip(または多くのファイルがあるのでtar + gzip)が好きなら、次のようなものを試してみてください:

tar -cz /home/me/source/directory | ssh target tar -xz --directory /home/you/target/directory

これは、探している圧縮を取得し、rsyncを使用せずに直接コピーします。


私はおそらくgzipの代わりに--lzopを使用します...はるかに高速でCPUオーバーヘッドが低く、テキストの圧縮率はまだ良いです
アンダーラン

5

@radiusは、どのようにgzip機能するかを選択するための小さな方法です- gzipブロックベースの圧縮アルゴリズムであり、その点ではかなり単純なアルゴリズムです。ファイル全体は圧縮テーブルとは見なされず、各ブロックのみが考慮されます。他のアルゴリズムはファイルのコンテンツ全体を使用する場合があり、複数のブロックまたは可変サイズのブロックのコンテンツを使用するものがいくつかあります。興味深い例の1つはlrzip、同じ著者によるものrsyncです!

スキニーオンgzipのアルゴリズム

したがって、要約すると、使用rsync -zすると、最初にing と同じ圧縮が得られる可能性が高くなりgzipます-差分転送を行う場合は、の差分rsyncアルゴリズムにより優れています。

そうは言っても、非差分転送では通常のscpビートrsyncが便利だと思います- rsyncアルゴリズムのオーバーヘッド(scpとにかく内部を使用します!)

ネットワークボトルネックになっている場合は、回線上で圧縮を使用する必要があります。

あなたの場合はディスクがボトルネックにあり、圧縮されたファイルにストリーミングするだときには最高でしょう。(たとえば、netcatあるマシンから次のマシンへ、にストリーミングgzip -c

通常、速度が重要な場合、既存のファイルを事前に圧縮することは無駄です。

TIMTOWTDI、YMMV、IANALなど


2

この男によると使用する方が速いかもしれませんがrsync -z、転送する前に各ファイルを最初に圧縮するのとほぼ同じくらい効率的だと思います。他の人が示唆するように、tarストリームを圧縮するよりも高速でなければなりません。

manページから:

          Note  that  this  option  typically  achieves better compression
          ratios than can be achieved by using a compressing remote  shell
          or  a  compressing  transport  because it takes advantage of the
          implicit information in the matching data blocks  that  are  not
          explicitly sent over the connection.

1
高速ネットワークがある場合は、rsync -zで--compress-level = 1を使用することをお勧めします。合計転送時間を最小化するために、ネットワークをCPUまたはディスクIOではなくボトルネックにする必要があります。ネットワークが遅い場合、デフォルトの-z(これはgzip -6に相当すると思います)を使用すると、プロセスネットワークがバインドされる可能性があります。
rmalayter

1

圧縮ファイルのscpとrsyncの転送時間は非常に似ているため、「これを行う最も効率的な方法」は、圧縮転送ではなくオンザフライ圧縮です。

「堅牢性」に加えて、次の考慮事項が含まれます。

すべてのファイルが転送されない場合、rsyncは簡単に再起動できます。

rsyncを使用して、リモートマシン上のファイルを管理できます。

ローカルtarまたはgzipにはローカルスペースが必要です。

ターゲットマシンとファイアウォールの両方のポート使用に関する考慮事項:1)scpは、許容できないポート22(デフォルト)を使用します。2)rsyncユーザーポート873(デフォルト)

なぜ元のポスターが解凍されたファイルを保存することを望まないのか、私は確信していません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.