BZIP2 压缩包 (.bz2)

Bzip2 标准

Bzip2 (BZ2) 是一种经典的无专利 Unix 压缩实用程序和文件格式,由 Julian Seward 创建,利用 Burrows-Wheeler 变换实现了比经典 Gzip 更高的压缩率。

检查与元数据

操作系统和文件分析器通过检查开头的二进制字节序列来识别 BZ2 文件:

选择或将文件拖放到此处

100% 浏览器端私密转换 - 文件绝不会离开您的设备

或粘贴 Ctrl+V
零网络传输隐私保证: 上传至外部服务器的数据为 0 字节。所有处理均在您的浏览器沙箱中本地完成。

字节级文件头签名 (Magic Bytes)

操作系统和文件分析器通过检查开头的二进制字节序列来识别 BZ2 文件:

十六进制签名 (偏移量 0):

42 5A 68

ASCII 表示形式: 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 (当前)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 排序时间,从而造成拒绝服务。

防御性最佳实践:

历史渊源与里程碑

2019Federico Mena Quintero 在 bzip3 和现代开源计划的推动下,对 bzip2 代码库的维护进行了现代化改造。
2000发布 1.0 版本,使 bzip2 格式在各个 Linux 发行版和包管理器中趋于稳定。
1996Julian Seward 发布了 bzip2 0.15,以取代存在专利问题的早期 bzip 格式。

核心优势与特点

  • 在源代码压缩包、系统日志和文本数据库上,性能始终比经典 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 之前,曾独家以 .tar.bz2 格式分发了十多年。
  • Burrows-Wheeler 变换不直接压缩数据;它置换字符的顺序,使相同的字母聚集在一起,从而可以通过霍夫曼编码轻松进行压缩。

常见技术问题

.gz 和 .bz2 有什么区别?

.bz2 使用 Burrows-Wheeler 变换来实现比 .gz 更小的文件体积,但它需要更多的压缩和解压时间。

为什么 bzip2 包含 'bzip2recover' 命令?

因为 bzip2 将数据压缩在独立的 900 KB 块中(每个块都有自己的 CRC),所以即使文件的某一部分损坏,bzip2recover 也能提取未损坏的块。

如何提取 .tar.bz2 文件?

你可以使用 File2File.app 直接在网页浏览器中解压 .tar.bz2 文件,而无需运行命令行工具。