Tệp nén BZIP2 (.bz2)
Bzip2 Tiêu chuẩnBzip2 (BZ2) là một tiện ích nén và định dạng tệp Unix kinh điển, không vướng bằng sáng chế, được tạo ra bởi Julian Seward. Tiện ích này sử dụng phép biến đổi Burrows-Wheeler để đạt được tỷ lệ nén chặt hơn đáng kể so với Gzip cổ điển.
Kiểm tra & Siêu dữ liệu
Các hệ điều hành và trình phân tích tệp nhận dạng tệp BZ2 bằng cách kiểm tra chuỗi byte nhị phân đầu tệp:
Chữ ký tiêu đề ở cấp độ Byte (Magic Bytes)
Các hệ điều hành và trình phân tích tệp nhận dạng tệp BZ2 bằng cách kiểm tra chuỗi byte nhị phân đầu tệp:
CHỮ KÝ HEX (OFFSET 0):
42 5A 68BIỂU DIỄN ASCII: BZh
Tiêu chuẩn hóa: Bzip2 Open Source Standard
Thông số kỹ thuật
| Kiến trúc Container | Stream header ('BZh' + block size digit 1-9) followed by compressed data blocks and 32-bit CRC |
| Nén | Burrows-Wheeler Transform (BWT), Move-to-Front (MTF) transform, and Huffman coding |
| Thứ tự byte Endianness | Big-Endian bitstream framing |
| Không gian màu | N/A (Byte Compression Stream) |
| Kênh & Cấu trúc | Single-file compressed byte stream |
| Kích thước tối đa | Unbounded stream length (supports arbitrary file sizes) |
| Độ trong suốt | 100% bit-exact lossless data preservation |
| Truyền phát & Tăng dần | Sequential block-by-block streaming with independent per-block CRC checksums |
Ma trận so sánh kỹ thuật: BZ2 so với các đối thủ
| Thuộc tính kỹ thuật | BZ2 (Hiện tại) | GZ | XZ | ZSTD |
|---|---|---|---|---|
| Thuật toán cốt lõi | Phép biến đổi Burrows-Wheeler (BWT) | Xì hơi (LZ77 + Huffman) | LZMA / LZMA2 | Entropy trạng thái hữu hạn + LZ77 |
| Độ nén so với Gzip | Nhỏ hơn Gzip từ 10% - 20% | Tiêu chuẩn cơ sở | Nhỏ hơn Gzip từ 20% - 30% | Nhỏ hơn Gzip từ 10% - 20% |
| Tốc độ giải nén | Chậm (~30-50 MB/s) | Nhanh (~300 MB/s) | Trung bình (~100 MB/s) | Cực nhanh (>1.5 GB/s) |
| Tổng kiểm tra khối | CRC 32-bit trên mỗi khối | CRC32 trên một luồng đơn | CRC64 trên luồng | xxHash64 trên luồng |
Các chế độ hỏng hóc phổ biến & Hướng dẫn khôi phục Hex
Quá trình giải nén bị hủy bỏ với thông báo 'bzip2: Data integrity error when decompressing'.
Nguyên nhân gốc rễ: Bit bị lật trong khối nén khiến ma trận hoán vị nghịch đảo BWT không vượt qua được quá trình xác thực CRC32.
Khắc phục: Sử dụng tiện ích 'bzip2recover' để cứu vớt các khối không bị hỏng xung quanh khu vực bị lỗi.
Phân tích bảo mật & Các vectơ tấn công bộ phân tích cú pháp
Các triển khai Bzip2 liên quan đến việc sắp xếp luồng bit phức tạp và phân tích cú pháp bảng Huffman từng gặp các lỗi tràn số nguyên trong quá khứ.
Các Véc-tơ Tấn công Đã biết
- Tràn số nguyên trong việc cấp phát mảng sắp xếp BWT (ví dụ: CVE-2016-3189).
- Ghi vượt quá giới hạn trong quá trình lắp ráp bảng giải mã Huffman.
- Từ chối dịch vụ thông qua các mẫu đầu vào bệnh lý gây ra thời gian sắp xếp BWT bậc hai tồi tệ nhất.
Thực tiễn Tốt nhất về Phòng thủ:
Nguồn gốc lịch sử & Các cột mốc
Ưu điểm & Lợi ích chính
- Luôn vượt trội hơn Gzip cổ điển từ 10% đến 20% trên các tệp tarball mã nguồn, nhật ký hệ thống và cơ sở dữ liệu văn bản.
- Kiến trúc khối độc lập (100k đến 900k) bao gồm tổng kiểm tra CRC 32-bit trên mỗi khối để kiểm tra tính toàn vẹn mạnh mẽ.
- Có sẵn nguyên bản trên toàn bộ các bản phân phối dòng lệnh Linux, BSD và macOS.
Hạn chế & Nhược điểm kỹ thuật
- Tốc độ nén và giải nén chậm hơn đáng kể so với các thuật toán hiện đại như Zstandard.
- Chỉ nén tệp đơn: yêu cầu ghép nối với TAR (.tar.bz2) để đóng gói nhiều tệp hoặc thư mục.
- Sử dụng CPU cao hơn trong quá trình giải nén so với Gzip hoặc Zstd.
Thông tin kỹ thuật thú vị
- Các byte nhận dạng 'BZh' viết tắt của 'Burrows-Wheeler Zip Huffman', theo sau là một chữ số (từ '1' đến '9') biểu thị kích thước khối tính bằng hàng trăm kilobyte (ví dụ: 'BZh9' = 900 KB).
- Mã nguồn Nhân Linux được phân phối độc quyền ở định dạng .tar.bz2 trong hơn một thập kỷ trước khi chuyển sang .xz.
- Phép biến đổi Burrows-Wheeler không nén dữ liệu trực tiếp; nó hoán vị thứ tự các ký tự để các chữ cái giống nhau tụ lại với nhau, giúp chúng dễ dàng được nén bằng mã hóa Huffman.
Các câu hỏi kỹ thuật thường gặp
Sự khác biệt giữa .gz và .bz2 là gì?
.bz2 sử dụng thuật toán biến đổi Burrows-Wheeler để đạt kích thước tệp nhỏ hơn .gz, nhưng bù lại tốn nhiều thời gian hơn để nén và giải nén.
Tại sao bzip2 lại có lệnh 'bzip2recover'?
Bởi vì bzip2 nén dữ liệu thành các khối 900 KB độc lập, mỗi khối có mã CRC riêng, nên bzip2recover có thể trích xuất các khối không bị hỏng ngay cả khi một phần của tệp gặp sự cố.
Làm cách nào để giải nén tệp .tar.bz2?
Bạn có thể giải nén các tệp .tar.bz2 trực tiếp trong trình duyệt web của mình với File2File.app mà không cần chạy các công cụ dòng lệnh phức tạp.