BZIP2 архив (.bz2)
Bzip2 СтандартBzip2 (BZ2) е класична помощна програма за компресиране на Unix без патенти и файлов формат, създаден от Джулиан Сюард, използващ трансформацията на Бъроуз-Уилър за постигане на значително по-плътна компресия от класическия Gzip.
Инспектиране и метаданни
Операционните системи и файловите анализатори идентифицират BZ2 файлове чрез проверка на началната двоична байтова последователност:
Байтов подпис на хедъра (Magic Bytes)
Операционните системи и файловите анализатори идентифицират BZ2 файлове чрез проверка на началната двоична байтова последователност:
HEX ПОДПИС (ОФСЕТ 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 |
| Поредност на байтовете (Endianness) | 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 |
|---|---|---|---|---|
| Основен алгоритъм | Трансформация на Бъроуз-Уилър (BWT) | Deflate (LZ77 + Huffman) | LZMA / LZMA2 | Ентропия на крайните състояния + LZ77 |
| Компресия спрямо Gzip | 10% - 20% по-малък от Gzip | Базов стандарт | 20% - 30% по-малък от Gzip | 10% - 20% по-малък от Gzip |
| Скорост на декомпресия | Бавна (~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'.
Първопричина: Обърнат бит в компресирания блок, който кара обратната матрица на пермутацията на BWT да неуспее при CRC32 валидацията.
Възстановяване: Използвайте помощната програма 'bzip2recover', за да възстановите недеформираните блокове около повредения сектор.
Анализ на сигурността и вектори на атака към парсера
Реализациите на Bzip2 включват сложно сортиране на битови потоци и анализ на таблици на Хофман, които исторически са страдали от уязвимости на целочислено препълване.
Известни вектори на атака
- Целочислено препълване при разпределението на сортиращия масив BWT (напр. CVE-2016-3189).
- Запис извън границите по време на изграждането на таблицата за декодиране по Хофман.
- Отказ от услуга (DoS) чрез патологични входни модели, водещи до най-лошия случай на квадратично време за BWT сортиране.
Защитни добри практики:
Исторически произход и етапи
Основни предимства и плюсове
- Постоянно надминава класическия Gzip с 10% до 20% при изходен код (tarballs), системни логове и текстови бази данни.
- Независимата блокова архитектура (100k до 900k) включва 32-битови CRC контролни суми за всеки блок за надеждна проверка на целостта.
- Универсална родна наличност във всички дистрибуции на командния ред за Linux, BSD и macOS.
Технически ограничения и минуси
- Значително по-бавни скорости на компресиране и декомпресиране в сравнение с модерни алгоритми като Zstandard.
- Компресиране само на един файл: изисква сдвояване с TAR (.tar.bz2) за пакетиране на множество файлове или директории.
- По-висока употреба на процесора по време на декомпресиране в сравнение с Gzip или Zstd.
Интересни технически факти
- Магическите байтове 'BZh' означават 'Burrows-Wheeler Zip Huffman', последвани от цифра (от '1' до '9'), указваща размера на блока в сто килобайта (напр. 'BZh9' = 900 KB).
- Изходният код на Linux ядрото се разпространяваше изключително във формат .tar.bz2 в продължение на повече от десетилетие, преди да мигрира към .xz.
- Трансформацията на Бъроуз-Уилър не компресира данните директно; тя пренарежда последователността от символи така, че еднаквите букви да се групират заедно, което ги прави лесни за компресиране чрез кодиране на Хофман.
Често задавани технически въпроси
Каква е разликата между .gz и .bz2?
.bz2 използва трансформационния алгоритъм на Burrows-Wheeler за постигане на по-малки файлови размери от .gz, но му отнема повече време за компресиране и декомпресиране.
Защо bzip2 има команда 'bzip2recover'?
Тъй като bzip2 компресира данните в независими блокове от 900 KB, всеки със собствен CRC код, bzip2recover може да извлече незасегнатите блокове дори ако част от файла е повредена.
Как мога да извлека .tar.bz2 файл?
Можете да разархивирате .tar.bz2 файлове директно във вашия уеб браузър с File2File.app, без да се налага да стартирате инструменти с команден ред.