BZIP2書庫 (.bz2)
Bzip2オープンソース標準 標準Bzip2 (BZ2) は、Julian Seward によって作成された、特許フリーの古典的な Unix 圧縮ユーティリティおよびファイル形式であり、Burrows-Wheeler 変換を利用して従来の Gzip よりも大幅に高い圧縮率を実現しています。
調査とメタデータ
オペレーティングシステムやファイル解析ツールは、先頭のバイナリ列を検査してBZ2ファイルを識別します:
バイトレベルのヘッダーシグネチャ (マジックバイト)
オペレーティングシステムやファイル解析ツールは、先頭のバイナリ列を検査してBZ2ファイルを識別します:
16進数シグネチャ(オフセット0):
42 5A 68ASCII表現: BZh
標準化: Bzip2オープンソース標準
技術仕様
| コンテナアーキテクチャ | ストリームヘッダー('BZh'とブロックサイズの数字1~9)に続き、圧縮データブロックと32ビットCRCを格納 |
| 圧縮 | Burrows-Wheeler変換(BWT)、Move-to-Front変換(MTF)、Huffman符号化 |
| バイトエンディアン | ビッグエンディアンのビットストリーム形式 |
| 色空間 | 該当なし(バイト圧縮ストリーム) |
| チャンネルと構造 | 単一ファイルの圧縮バイトストリーム |
| 最大寸法 | ストリーム長に上限なし(任意のファイルサイズに対応) |
| 透過性 | データをビット単位で完全に保持する可逆圧縮 |
| ストリーミングとプログレッシブ | ブロックごとに順次ストリーミングし、各ブロックを個別のCRCチェックサムで検証 |
技術比較表:BZ2と競合製品
| 技術属性 | BZ2 (現在) | GZ | XZ | ZSTD |
|---|---|---|---|---|
| コアアルゴリズム | Burrows-Wheeler 変換 (BWT) | Deflate (LZ77 + ハフマン) | LZMA / LZMA2 | 有限状態エントロピー + LZ77 |
| Gzip との圧縮率比較 | Gzip より 10% 〜 20% 小さい | ベースライン標準 | Gzip より 20% 〜 30% 小さい | Gzip より 10% 〜 20% 小さい |
| 解凍速度 | 遅い(約 30〜50 MB/s) | 速い(約 300 MB/s) | 中程度(約 100 MB/s) | 非常に高速(>1.5 GB/s) |
| ブロックチェックサム | ブロックごとの 32 ビット CRC | 単一ストリーム CRC32 | ストリーム CRC64 | ストリーム xxHash64 |
一般的な破損モードと16進数リカバリガイド
抽出が「bzip2: Data integrity error when decompressing」で中断される。
根本原因: 圧縮ブロック内のビット反転により、BWT 逆置換行列が CRC32 検証に失敗する。
復旧: 「bzip2recover」ユーティリティを使用して、破損したセクターの周囲の損傷していないブロックを救出します。
セキュリティ分析とパーサー攻撃ベクトル
Bzip2 の実装には、複雑なビットストリームのソートと Huffman テーブルの解析が含まれており、歴史的に整数オーバーフローの欠陥を経験しています。
既知の攻撃ベクター
- BWT ソート配列割り当てにおける整数オーバーフロー(例:CVE-2016-3189)。
- Huffman デコードテーブルの構築中の範囲外書き込み。
- 最悪の場合の二次的な BWT ソート時間を引き起こす、異常な入力パターンによるサービス拒否 (DoS)。
防御的ベストプラクティス: 強制的なメモリ境界を持つメモリ安全なWASMデコーダーを使用してBZ2ファイルをデコードします。
歴史的背景とマイルストーン
主なメリット
- ソースコードの tarball、システムログ、テキストデータベースにおいて、従来の Gzip を一貫して 10% から 20% 上回る圧縮率を誇ります。
- 独立したブロックアーキテクチャ(100k 〜 900k)には、ブロックごとの 32 ビット CRC チェックサムが含まれており、堅牢な整合性チェックが可能です。
- 多くのLinux、BSD、macOSのコマンドラインディストリビューションに標準搭載されていますが、搭載状況は異なります。
技術的な制限とデメリット
- Zstandard などの現代のアルゴリズムと比較して、圧縮および解凍の速度が大幅に遅いです。
- 単一ファイルの圧縮のみ:複数のファイルやディレクトリをパッケージ化するには、TAR(.tar.bz2)との組み合わせが必要です。
- Gzip や Zstd と比較して、解凍時の CPU 使用率が高くなります。
興味深い技術トリビア
- 「BZh」というマジックバイトは「Burrows-Wheeler Zip Huffman」の略であり、それに続く数字('1' から '9')は数百キロバイト単位のブロックサイズを表しています(例:「BZh9」 = 900 KB)。
- Linux カーネルのソースコードは、.xz に移行する前の10年以上にわたり、.tar.bz2 形式でのみ配布されていました。
- Burrows-Wheeler 変換はデータを直接圧縮するのではなく、文字の順序を並べ替えて同一の文字をまとめ、Huffman 符号化によって簡単に圧縮できるようにします。
よくある技術的な質問
.gzと.bz2の違いは何ですか?
.bz2はバローズ・ホイーラー変換を使用して.gzよりも小さなファイルサイズを実現しますが、圧縮と解凍に時間がかかります。
bzip2に「bzip2recover」というコマンドがあるのはなぜですか?
bzip2はデータをそれぞれ独自のCRCを持つ独立した900 KBのブロックに分割して圧縮するため、ファイルの一部が破損していてもbzip2recoverを使用すれば無傷のブロックを抽出できるからです。
.tar.bz2ファイルを展開するにはどうすればよいですか?
コマンドラインツールを実行することなく、File2File.appを使ってウェブブラウザ上で直接.tar.bz2ファイルを展開できます。