TAR.BZ2をオンラインでTAR.XZに変換
BZIP2からXZに切り替えると、アーカイブが小さくなるうえ展開も速くなります。当社のテストでは、TAR.XZはTAR.BZ2より混在セットで5%、プログラムのバイナリで18%小さくなり、ある計測ではXZがBZIP2より約3.8倍速く展開しました。XZは現在のほとんどのLinuxディストリビューションが使う形式です。
TAR.XZ形式は、ソースコード、Linuxカーネルのリリース、ソフトウェアパッケージの配布における標準となっています。TAR.BZ2からTAR.XZに変換すれば、ストレージの必要容量を削減しつつ、アーカイブをダウンロード・展開するエンドユーザーの展開性能も向上します。
なぜTAR.XZにアップグレードするのか?
- 最高の圧縮率 — 当社のテストでは、XZが最も小さいTARアーカイブを作り、中身に応じてBZIP2より5〜18%小さくなりました
- 高速な展開 — XZは高い圧縮率を持ちながらBZIP2より速く展開できます
- 最新の標準 — Linuxカーネル、GNUツール、ほとんどのディストリビューションが今ではTAR.XZを採用しています
- 並列処理対応 — XZはpixzやpxzを使えば複数のCPUコアを圧縮に活用できます
- 優れたツール群 — xz-utilsは整合性チェックや復旧に優れたオプションを備えています
変換の仕組み
TAR.BZ2からTAR.XZへの変換では、まずBZIP2層を展開して元のTARアーカイブを取り出し、その後XZアルゴリズムで再圧縮します。TAR層に保存されているファイルの中身、パーミッション、タイムスタンプ、所有者情報、シンボリックリンクはすべてそのまま維持されます。
この変換処理では、再エンコードがすべて自動的に行われます。TAR.BZ2ファイルをアップロードすれば、配布や保存にそのまま使える最適化済みのTAR.XZアーカイブが得られます。ファイルは暗号化されたHTTPS接続で当社のサーバーに送られます。アップロードしたファイルの扱いはプライバシーポリシーに記載しています。
技術比較: BZIP2とXZ
BZIP2はBurrows-Wheeler変換とハフマン符号化を組み合わせて使用し、XZはLZMA2(Lempel-Ziv-Markov連鎖アルゴリズム)を使用します。LZMA2はより大きな辞書とより高度なマッチングにより高い圧縮率を実現します。その代わりXZの圧縮にはより多くのメモリとCPU時間が必要になりますが、展開速度はBZIP2より実際には速くなります。
XZはBZIP2の最大900KBに対し、最大1.5GBの辞書サイズを使用します。これによりXZはより広範囲のデータからパターンを見つけ出せるため、ソースコードリポジトリやデータベースダンプのように繰り返しの多い大きなファイルで高い圧縮率を発揮します。
最新のLinuxディストリビューションでは、Linuxカーネル自体を含め、パッケージ配布にXZが標準となっています。BZIP2からXZに変換すれば、アーカイブを現在推奨される形式にし、可能な限り高い圧縮率を得られます。
メモリ要件
デフォルト設定のXZ圧縮は約100~200MBのメモリを使用します。最大圧縮(-9e)では数ギガバイトが必要になることもあり、メモリに制約のあるシステムでは現実的ではありません。展開時に必要なメモリは、作成時の圧縮レベルに関わらず通常20~50MB程度です。
BZIP2は圧縮に約8MB、展開に約4MBのメモリを使用します。このメモリ使用量の少なさから、BZIP2は組み込みシステムや旧式ハードウェアで広く使われてきました。メモリに制約のある環境をサポートする必要がある場合、XZの方が圧縮率に優れていても、TAR.BZ2の方が適した選択肢になることがあります。
実際の圧縮例
当社のテストでは、13MBのPythonソースコードがTAR.BZ2で2.29MB、TAR.XZで2.08MBになり、XZの方が9%小さくなりました。38MBのプログラムのバイナリではXZが18%小さくなりました。JPEG画像のようにすでに圧縮されている内容は、どちらの形式でもほとんど小さくならず、元のサイズに近いままです。