BZIP2書庫 (.bz2)
Bzip2 標準Bzip2 (BZ2) は、Julian Seward によって作成された、特許フリーの古典的な Unix 圧縮ユーティリティおよびファイル形式であり、Burrows-Wheeler 変換を利用して従来の Gzip よりも大幅に高密度の圧縮を実現しています。
調査とメタデータ
オペレーティングシステムやファイル解析ツールは、先頭のバイナリバイトシーケンスを検査することで BZ2 ファイルを識別します:
バイトレベルのヘッダーシグネチャ (マジックバイト)
オペレーティングシステムやファイル解析ツールは、先頭のバイナリバイトシーケンスを検査することで BZ2 ファイルを識別します:
16進数シグネチャ (オフセット 0):
42 5A 68ASCII表現: BZh
標準化: Bzip2 Open Source Standard
技術仕様
| コンテナアーキテクチャ | Stream header ('BZh' + block size digit 1-9) followed by compressed data blocks and 32-bit CRC |
| 圧縮 | Burrows-Wheeler Transform (BWT), Move-to-Front (MTF) transform, and Huffman coding |
| バイトエンディアン | Big-Endian bitstream framing |
| 色空間 | N/A (Byte Compression Stream) |
| チャンネルと構造 | Single-file compressed byte stream |
| 最大寸法 | Unbounded stream length (supports arbitrary file sizes) |
| 透過性 | 100% bit-exact lossless data preservation |
| ストリーミングとプログレッシブ | Sequential block-by-block streaming with independent per-block CRC checksums |
技術比較マトリックス: BZ2 対 競合製品
| 技術属性 | BZ2 (現在) | GZ | XZ | ZSTD |
|---|---|---|---|---|
| コアアルゴリズム | Burrows-Wheeler 変換 (BWT) | 縮小 (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)。
防御的ベストプラクティス:
歴史的背景とマイルストーン
主な利点とメリット
- ソースコードの 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ファイルを展開できます。