tarアーカイブ形式がbzip2を置き換えるためにxz圧縮に切り替わるのはなぜですか。gzipはどうですか?


202

従来の圧縮ではなく、LZMA2に基づく形式をtar使用しxzて圧縮するアーカイブが増えていますbzip2(bz2)。実際、kernel.org2013年12月27日にGood-bye bzip2」という最新の発表を行い、この時点からカーネルソースがtar.gzとtar.xzの両方の形式で、およびWebサイトのメインページでリリースされることを示しました直接提供されるのはですtar.xz

これがなぜ起こっているのかgzip、この文脈での関連性を説明する特定の理由はありますか?

history  gzip  bzip2  xz 

回答:


198

インターネット経由でアーカイブを配布する場合、一般的に次のことが優先されます。

  1. 圧縮率(つまり、コンプレッサーがデータをどの程度小さくするか)。
  2. 解凍時間(CPU要件);
  3. 解凍メモリ要件。そして
  4. 互換性(解凍プログラムの普及度)

圧縮メモリとCPUの要件はそれほど重要ではありません。そのために大型の高速マシンを使用でき、一度だけ実行すればよいからです。

bzip2と比較して、xzはより良い圧縮率とより短い(より良い)解凍時間を持っています。ただし、通常使用される圧縮設定では、解凍するためにより多くのメモリが必要です[1]。Gzipはどちらよりも少ないメモリを使用します。

そのため、gzip形式とxz形式の両方のアーカイブが投稿され、以下を選択できます。

  • メモリが非常に限られている(<32 MB)マシンで解凍する必要がある:gzip。与えられた、カーネルソースについて話すときはあまりありません。
  • 利用可能な最小限のツールを解凍する必要があります:gzip
  • ダウンロード時間や帯域幅を節約したい:xz

実際には、bzip2を選択する要因の現実的な組み合わせはありません。そのため、段階的に廃止されます。

ブログ投稿で圧縮の比較を見ました。結果を再現しようとはしませんでしたが、その一部が変更されたのではないかと疑っています(主にxz、最新のものとして改善されたと思います)。

(適切なbzip2実装がxzよりも望ましい特定のシナリオがいくつかあります:bzip2は、多くのゼロとゲノムDNAシーケンスを含むファイルをxzよりも圧縮できます。xzの新しいバージョンには、データ回復を可能にする(オプション)ブロックモードがあります破損および並列圧縮と[理論上]解凍のポイントの後。以前は、bzip2のみがこれらを提供していました。[2]ただし、これらのいずれもカーネルの配布に関連しません)


1:アーカイブサイズxz -3は約bzip -9です。次に、xzは解凍するメモリを少なくします。しかしxz -9(たとえば、Linuxカーネルのtarballに使用されるように)は、をはるかに超えて使用しbzip -9ます。(そして、さらにxz -0必要ですgzip -9)。

2:F21システム全体の変更:デフォルトのbzip2実装としてのlbzip2


フォールトトレランスのトピックに関するコメントはありますか、それとも圧縮アルゴリズムの外側で常に完全に実装されているものですか?

1
@illuminÉの復元力は、圧縮率を犠牲にせずには提供できません。これは直交する問題であり、Parchiveのようなツールが存在しますが、カーネルTCPのエラー処理を配布するための仕事も同様に行います。
東武14年

2
@illuminÉフォールトトレランス(par2に似たものを意味すると仮定)は、通常、インターネット経由でアーカイブを配布することには関係ありません。ダウンロードは十分に信頼できると想定されます(破損している場合は再ダウンロードできます)。暗号化ハッシュと署名がよく使用され、破損と改ざんを検出します。圧縮率は犠牲になりますが、耐障害性を高めるコンプレッサーがあります。HTTPまたはFTPのダウンロードに見合うだけのトレードオフを見つける人はいないようです。
デロバート14年

xzは、LESSメモリを使用して解凍します。
-MichalH

@Mikeこれを書いてから変わった?特に、脚注1ではメモリ使用量について説明しています。
デロベルト

45

まず、この質問はに直接関係していませんtar。Tarは非圧縮アーカイブを作成するだけで、その後圧縮が適用されます。

Gzipは、LZMA2およびbzip2と比較すると、比較的高速であることが知られています。速度が重要な場合gzip(特にマルチスレッド実装pigz)は、多くの場合、圧縮速度と圧縮率の適切な妥協点です。ただし、速度が問題になる場合には代替手段があります(例:LZ4)。

ただし、高い圧縮率が必要な場合は、LZMA2 bzip2がほぼすべての面で勝ちます。多くの場合、圧縮速度は遅くなりますが、解凍速度ははるかに速く、メモリ使用量が多くなりますが、圧縮率は大幅に向上します。

bzip2後方互換性を除いて、これ以上使用する理由はあまりありません。さらに、LZMA2はマルチスレッドを念頭に置いて設計されており、多くの実装はデフォルトでマルチコアCPUを使用します(残念ながらxzLinuxではこれを行いません)。クロック速度はこれ以上増加しませんが、コアの数は増加するため、これは理にかなっています。

マルチスレッドbzip2実装(例pbzip)がありますが、多くの場合、デフォルトではインストールされません。また、LZMA2とは対照的に、ファイルがシングルスレッドを使用bzip2して圧縮された場合、解凍はシングルスレッドを使用するのに対し、マルチスレッドは圧縮中にのみbzip2成果を上げることに注意してください。並列bzip2バリアントは、ファイルが並列bzip2バージョンを使用して圧縮されている場合にのみマルチコアCPUを活用できますが、これは多くの場合そうではありません。


4
まあ、いくつかのタールはzオプションをgrしました。
tchrist 14年

「速度」は混乱した答えになります。圧縮速度または圧縮解除速度を参照する必要があります。pixz、pbzip2、またはpigzはデフォルトではインストールされません(または、-Iフラグなしでtarで使用されます)が、pixzとpbzip2は圧縮と解凍を高速化し、pizzは圧縮のみを目的としています。
東武14年

@Tobu xzはデフォルトでマルチスレッド化されるためpixz、今後インストールする必要はありません。一部のプラットフォームでは、xzスレッド化がすでにサポートされています。一方bzip2、フォーマットはマルチスレッドを念頭に置いて設計されていないため、マルチスレッドになることはほとんどありません。さらに、pbzip2ファイルが使用されて圧縮されている場合にのみ解凍を高速化しますが、pbzip2これは多くの場合そうではありません。
マルコ14年

1
@Marco lbzip2では、ファイルが非並列実装で圧縮されている場合でも(例えば、bzip2のように)並列解凍が可能だと思います。それが、pbzip2ではなくlbzip2を使用する理由です。(コメントから進化した可能性があります。)
RaveTheTadpole

19

短い答え:xzは圧縮率の点でより効率的です。したがって、ディスクスペースを節約し、ネットワーク経由の転送を最適化します。
このクイックベンチマークを見て、実際のテストで違いを発見できます。


リンクが壊れています。
flarn2006

18

LZMA2はブロック圧縮システムですが、gzipはそうではありません。これは、LZMA2がマルチスレッドに適していることを意味します。また、アーカイブで破損が発生した場合、通常、LZMA2を使用して後続のブロックからデータを回復できますが、gzipでこれを行うことはできません。実際には、破損したブロックの後にgzipを使用してアーカイブ全体を失います。LZMA2アーカイブを使用すると、破損したブロックの影響を受けるファイルのみが失われます。これは、複数のファイルを持つ大規模なアーカイブで重要になる場合があります。


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