web-dev-qa-db-ja.com

tarアーカイブフォーマットがbzip2を置き換えるためにxz圧縮に切り替わるのはなぜですか?またgzipはどうですか?

ますます tar アーカイブでは、LZMA2に基づく xz 形式を使用します従来の bzip2(bz2) 圧縮の代わりに圧縮します。実際、kernel.orgは「Good-bye bzip2」を遅くしました announcement、2013年12月27日 、これからカーネルソースがtar.gzとtar.xzの両方の形式でリリースされることを示します-/のメインページ website 直接提供されるものはtar.xz

これが発生している理由を説明する具体的な理由はありますか、このコンテキストでの gzip の関連性は何ですか?

213
user44370

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

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

圧縮メモリとCPUの要件はそれほど重要ではありません。大規模な高速マシンを使用でき、一度だけ実行する必要があるためです。

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

したがって、gzip形式とxz形式の両方のアーカイブが投稿され、次のいずれかを選択できます。

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

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

ブログ投稿 で圧縮比較を調べました。私は結果を複製しようとはしませんでした、そしていくつかの結果は変わったと思います(ほとんどの場合、xzは最新のものとして改善されていると思います)。

(xzよりもbzip2の実装が望ましい特定のシナリオがいくつかあります。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

206
derobert

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

LZMA2およびbzip2と比較すると、gzipは比較的高速であることがわかっています。速度が重要な場合、gzip(特にマルチスレッドの実装 pigz )は、圧縮速度と圧縮率の間の適切な妥協案です。速度が問題になる場合は代替手段があります(LZ4など)。

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

下位互換性を除いて、bzip2を使用する理由はそれほど多くありません。さらに、LZMA2はマルチスレッディングを考慮して設計されており、多くの実装ではデフォルトでマルチコアCPUを使用しています(残念ながら、Linuxのxzはまだこれを行いません)。クロック速度はこれ以上増加しませんが、コアの数は増加するため、これは理にかなっています。

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

47
Marco

短い答え:xzは圧縮率の点でより効率的です。したがって、ディスク容量を節約し、ネットワーク経由の転送を最適化します。
これは、実際のテストで違いを発見するために、 Quick Benchmark で確認できます。

20
Slyx

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

19
Mark Warburton