ますます tar
アーカイブでは、LZMA2に基づく xz
形式を使用します従来の bzip2(bz2)
圧縮の代わりに圧縮します。実際、kernel.orgは「Good-bye bzip2」を遅くしました announcement、2013年12月27日 、これからカーネルソースがtar.gzとtar.xzの両方の形式でリリースされることを示します-/のメインページ website 直接提供されるものはtar.xz
。
これが発生している理由を説明する具体的な理由はありますか、このコンテキストでの gzip
の関連性は何ですか?
アーカイブをインターネット経由で配布する場合、一般的に次のことが優先されます。
圧縮メモリとCPUの要件はそれほど重要ではありません。大規模な高速マシンを使用でき、一度だけ実行する必要があるためです。
Bzip2と比較して、xzの圧縮率は高く、解凍時間は短くなっています。ただし、通常使用される圧縮設定では、解凍するためにより多くのメモリが必要です。[1] そして、やや広まっていません。 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
より多く必要です)。
まず、この質問はtar
とは直接関係ありません。 Tarは圧縮されていないアーカイブを作成するだけで、後で圧縮が適用されます。
LZMA2およびbzip2と比較すると、gzipは比較的高速であることがわかっています。速度が重要な場合、gzip
(特にマルチスレッドの実装 pigz
)は、圧縮速度と圧縮率の間の適切な妥協案です。速度が問題になる場合は代替手段があります(LZ4など)。
ただし、高い圧縮率が必要な場合、LZMA2はほぼすべての面でbzip2
に勝ります。多くの場合、圧縮速度は遅くなりますが、解凍ははるかに速く、メモリ使用量が高くなりますが、はるかに優れた圧縮率が得られます。
下位互換性を除いて、bzip2
を使用する理由はそれほど多くありません。さらに、LZMA2はマルチスレッディングを考慮して設計されており、多くの実装ではデフォルトでマルチコアCPUを使用しています(残念ながら、Linuxのxz
はまだこれを行いません)。クロック速度はこれ以上増加しませんが、コアの数は増加するため、これは理にかなっています。
マルチスレッドのbzip2
実装(例 pbzip
)がありますが、デフォルトではインストールされないことがよくあります。また、マルチスレッドのbzip2
は、実際には圧縮の間にのみ効果があり、LZMA2とは対照的に、ファイルがシングルスレッドのbzip2
を使用して圧縮されている場合、解凍はシングルスレッドを使用します。 。並列bzip2
バリアントは、ファイルが並列bzip2
バージョンを使用して圧縮されている場合にのみマルチコアCPUを活用できますが、これは多くの場合当てはまりません。
短い答え:xzは圧縮率の点でより効率的です。したがって、ディスク容量を節約し、ネットワーク経由の転送を最適化します。
これは、実際のテストで違いを発見するために、 Quick Benchmark で確認できます。
LZMA2はブロック圧縮システムですが、gzipはそうではありません。つまり、LZMA2はマルチスレッドに適しています。また、アーカイブで破損が発生した場合、通常、LZMA2を使用して後続のブロックからデータを回復できますが、gzipを使用してこれを行うことはできません。実際には、破損したブロックに続くgzipでアーカイブ全体が失われます。 LZMA2アーカイブでは、破損したブロックの影響を受けるファイルのみが失われます。これは、複数のファイルを含む大規模なアーカイブでは重要です。