BZIP2 壓縮檔 (.bz2)

Bzip2 標準

Bzip2(BZ2)是由 Julian Seward 所建立的經典免專利 Unix 壓縮公用程式與檔案格式,採用 Burrows-Wheeler 轉換以達到比經典 Gzip 更高的壓縮率。

檢查與中繼資料

作業系統與檔案分析工具透過檢查開頭的二進位位元組序列來識別 BZ2 檔案:

在這裡選擇或拖放檔案

私密 - 檔案絕不會離開您的裝置

或貼上 Ctrl+V
零網路傳輸隱私保證: 0 位元組上傳至外部伺服器。所有處理皆在本機瀏覽器沙箱中進行。

位元組層級標頭簽章(檔案簽章)

作業系統與檔案分析工具透過檢查開頭的二進位位元組序列來識別 BZ2 檔案:

十六進位簽章(偏移量 0):

42 5A 68

ASCII 表示法: BZh

標準化: Bzip2 開源標準

技術規格

容器架構資料流標頭(「BZh」加區塊大小數字 1-9)後接壓縮資料區塊與 32 位元 CRC
壓縮Burrows-Wheeler 轉換(BWT)、Move-to-Front(MTF)轉換與霍夫曼編碼
位元組序大端序位元串流分框
色彩空間不適用(位元組壓縮資料流)
色版與結構單一檔案壓縮位元組資料流
最大尺寸無限制資料流長度(支援任意檔案大小)
透明度100% 位元精確無損資料保留
串流與漸進式循序區塊串流,具備獨立的各區塊 CRC 檢查碼

技術比較矩陣:BZ2 對比競爭格式

技術屬性BZ2 (目前)GZXZZSTD
核心演算法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

常見損壞模式與十六進位修復指南

解壓縮時會中止,並顯示「bzip2: Data integrity error when decompressing」(bzip2:解壓縮時發生資料完整性錯誤)。

根本原因: 壓縮區塊中的位元翻轉,導致 BWT 反向置換矩陣無法通過 CRC32 驗證。

修復: 使用「bzip2recover」公用程式來搶救損毀磁區周圍未受損的區塊。

安全性分析與解析器攻擊向量

Bzip2 實作涉及複雜的位元串流排序與霍夫曼表格解析,歷史上曾遭遇整數溢位瑕疵。

已知攻擊向量

  • BWT 排序陣列配置中的整數溢位(例如 CVE-2016-3189)。
  • 霍夫曼解碼表格組合期間的陣列外寫入。
  • 透過會導致最糟情況二次方 BWT 排序時間的異常輸入模式進行阻斷服務攻擊。

防禦最佳實務: 使用強制記憶體邊界的記憶體安全 WASM 解碼器來解碼 BZ2 檔案。

歷史起源與里程碑

2019Federico Mena Quintero 在 bzip3 與現代開源計畫下推動 bzip2 程式碼庫維護的現代化。
2000發布 1.0 版本,使 bzip2 格式在各大 Linux 發行版與套件管理程式中趨於穩定。
1996Julian Seward 發布 bzip2 0.15 以取代先前具有專利疑慮的 bzip 格式。

主要優勢與優點

  • 在原始碼 tarball、系統記錄檔與文字資料庫上,效能持續優於經典 Gzip 約 10% 至 20%。
  • 獨立的區塊架構(100k 至 900k)包含各區塊 32 位元 CRC 檢查碼,以提供強固的完整性檢查。
  • 原生可用於許多 Linux、BSD 與 macOS 命令列發行版,不過實際內含情況各異。

技術限制與缺點

  • 相較於 Zstandard 等現代演算法,壓縮與解壓縮速度顯著較慢。
  • 僅支援單一檔案壓縮:需要搭配 TAR(.tar.bz2)來封裝多個檔案或目錄。
  • 解壓縮時的 CPU 使用率高於 Gzip 或 Zstd。

有趣的技術冷知識

  • 「BZh」檔案簽章(magic bytes)代表「Burrows-Wheeler Zip Huffman」,後面接著一個數字(「1」到「9」),表示以 100 KB 為單位的區塊大小(例如「BZh9」= 900 KB)。
  • Linux 核心原始碼在遷移至 .xz 之前,曾連續十多年僅以 .tar.bz2 格式散布。
  • Burrows-Wheeler 轉換會重新排列資料,使重複的字元聚集,進而讓後續的霍夫曼編碼更有效率。

常見技術問題

.gz 與 .bz2 有什麼區別?

.bz2 使用 Burrows-Wheeler 轉換來達到比 .gz 更小的檔案大小,但壓縮與解壓縮需要花費較長時間。

為什麼 bzip2 會有「bzip2recover」指令?

因為 bzip2 會將資料壓縮成獨立的 900 KB 區塊,且每個區塊都有自己的 CRC,所以即使檔案的一部分損毀,bzip2recover 也能擷取未受損的區塊。

如何解壓縮 .tar.bz2 檔案?

您可以使用 File2File.app 直接在網頁瀏覽器中解開 .tar.bz2 檔案,無須執行命令列工具。