並列ファイルアーカイバ(tarなど)はありますか?


40

ファイルの並列アーカイブに何かありますか?

Tarはすばらしいですが、テープアーカイブは使用しません。smpがあるので、アーカイブが(bzip2のような圧縮を使用して)迅速に行われることがより重要です。


7
tarは単なるテープ以上のものです。名前はもともとテープに由来していましたが、最近では、オプションの圧縮を使用してディレクトリ構造情報を維持しながら、再配布のために単一のファイルに入れたいときに主に使用されています。
ケビンM

ここでベンチマークされた並列圧縮ツールはかなりありますvbtechsupport.com/1614ただし、tarの並列バージョンはまだ見つかりません
-p4guru

ハンドル(受け入れられたものを含む)提供の回答なしディレクトリ、彼らが扱う-これまでのところ、私が言うことができるように、ファイルを。私はzipディレクトリを処理できるとのみ見ています:|
ウォーレン

1
実は、私たちが通常行うことはパッケージ化することであるディレクトリを中にtarアーカイブし、その後(のようなファイル圧縮を使用してパッケージを圧縮gzippigzなど)。2つのステップで行うことができますが、標準の入出力からのデータストリームで動作できるため、1つのステップで行うこともできます。結果はに非常に似てzipいますが、より汎用性があります。
-gerlos

回答:


36

私はあなたがpbzip2を探していると思う:

PBZIP2は、pthreadを使用し、SMPマシンでほぼ線形の高速化を実現するbzip2ブロックソートファイルコンプレッサーの並列実装です。

見ているプロジェクトのホームページまたはお好みのパッケージリポジトリを確認してください。


1
あなたも試してみてくださいpigzpxzの並列実装のためにgzipxz。のようなコマンドを使用して圧縮したり、を使用してtar c dir | pigz -c > dir.tar.gz解凍したりできpigz -cd dir.tar.gz | tar xf -ます。
ゲルロス

3
今日のコマンドはtar -cf dir.tar.gz -I pigz dirand tar -xf dir.tar.gz -I pigzです。またxz、スレッド化されます:とを使用XZ_OPT=-T0 tar -cJf dir.tar.gz dirXZ_OPT=-T0 tar -xJf dir.tar.gzます。
リッチ

21

7zipは、-mmtフラグを指定すると複数のスレッドで実行できますが、7zアーカイブに圧縮する場合に限られます。7zアーカイブは、優れた圧縮を提供しますが、一般的にアーカイブを作成するzipよりも低速です。このようなことをしてください:

7z a -mmt foo.7z /opt/myhugefile.dat

7zは優れたアーカイバであり、圧縮率とcomp / decomp時間、ランダムアクセスと優れた圧縮などのトレードオフを適切に制御できます。ただし、tarとほぼ同じ量のメタデータを保存しないため、所有者/アクセス許可が失われます。
ピーターコーデス

このオプションはデフォルトでオンになっているように見えます-少なくともパフォーマンスは向上せず、7zの出力にはどちらの場合もCPUのコアの量に関する行があります。
アンドレイスタロドゥブツェフ

14

OPは、並列圧縮ではなく、並列アーカイブについて質問しました。

ソース素材が、異なるディレクトリ/ファイルが異なるディスク上にあるファイルシステム、または圧縮ツールの入力速度を超える単一の高速ディスクである場合、複数の入力ストリームを持つことは実際に有益です圧縮層に入ります。

意味のある質問は、並列アーカイブからの出力はどのように見えるかということです。単一のファイル記述子/ stdoutではなく、スレッドごとのファイル記述子になりました。

これまでの例としては、Postgresqlのパラレルダンプモードがあります。このモードではpg_dump、ディレクトリにダンプし、スレッドがバックアップするテーブルのセットを処理します(複数のスレッドがキューを消費するワークキュー)。

メインストリームである実際の並列アーカイバについてはわかりません。ZFSで使用するSolaris Tarのハッキングがありました:http : //www.maier-komor.de/mtwrite.html

複数のスレッドを正常に実行する専用のバックアップツールがいくつかありますが、それだけではなく、ディレクトリごとに高レベルでワークロードを分割します。


11
tar --use-compress-program=pigz  ....

pigzお好みの並列圧縮プログラムに置き換えてください。使用する理由tarは、所有者、グループ、権限を保存できるためです。多くの場合、そのメタデータは便利です(たとえば、複雑なシステムでディレクトリツリーを復元する)。


4
tar -c --use-compress-program = pigz -f myDirectory.tar.gz myDirectory /
markusN

1
tarのすべてのオプションAFAIKは、オプションと一緒に通常使用でき-Iます。これはと同じ--use-compress-programです。そのため、たとえばas tar cvzf /some/dir/yournewarchive.tar.gz /directory/tobecompressed --exclude="/directo...."を使用してマルチスレッドオプションに適用できます。これが最も適切な答えです。私見です。ありがとう@uDude!:)pigztar -I pigz -cvf /some/dir/yournewarchive.tar.gz /directory/tobecompressed --exclude="/directo..."
ILMostro_7

10

pigzはgzipの並列実装ですが、実際には圧縮ではなく、圧縮ではなく複数のプロセッサのみを使用できます。


2
いくつかの実験を行いましたが、pigz実際には解凍時に複数のスレッドを使用できるようです。出力を比較してみてくださいtime tar xf dir.tar.gzとのtime pigz -cd dir.tar.gz | tar xf -(私の4コアCPUにそれは少し半分以下の時間がかかります)。
ゲルロス

4
@gerlos timeパイプラインで使用すると、最初のコマンドのタイミングのみが決まります。pigzドキュメントから:「少なくとも、そのために特別に準備されたdeflateストリームなしでは、解凍は並列化できません。その結果、pizzは解凍に単一のスレッド(メインスレッド)を使用しますが、読み取り用に他の3つのスレッドを作成します。書き込み、チェック計算を行います。これにより、状況によっては圧縮解除を高速化できます。」
augurar

1
pixzあります。
Marc.2377

8

tarは、ファイルを正確に複製し、ディレクトリツリーと元のファイル属性を保持するのに非常に優れた単純なアーカイブ形式です。TARは、すべてが保存されるため、バックアップの作成に非常に適しています。私が使用しpbzip2、私は非常に良い結果で、システムのバックアップに使用されたtarアーカイブを圧縮します。

このコマンドでうまくいくはずです。

tar -cpS "infile" | pbzip2 > "outfile"

pbzip2 別の圧縮ユーティリティに置き換えることができますが、LZMA圧縮(pxzなど)は大きなファイルの圧縮/解凍時にRAMのトンを使用します(8GBのRAMで8つのスレッドを実行しようとし、pxzがディスクへのスワップを開始しました)。



1

圧縮xzについては、バージョン5.2が-Tオプションによる並列圧縮をサポートしているためです。

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