Архів BZIP2 (.bz2)
Відкритий СтандартBzip2 (BZ2) - це класична вільна від патентів утиліта стиснення та формат файлів для Unix, створений Джуліаном Сьюардом (Julian Seward). Формат використовує перетворення Берроуза-Вілера для досягнення значно вищого ступеня стиснення, ніж класичний Gzip.
Аналіз та метадані
Операційні системи та аналізатори файлів ідентифікують файли BZ2, перевіряючи початкову послідовність бінарних байтів:
Сигнатура заголовка на байтовому рівні (Magic Bytes)
Операційні системи та аналізатори файлів ідентифікують файли BZ2, перевіряючи початкову послідовність бінарних байтів:
ШІСТНАДЦЯТКОВА СИГНАТУРА (ЗСУВ 0):
42 5A 68ASCII-УЯВЛЕННЯ: BZh
Стандартизація: Відкритий стандарт Bzip2
Технічні характеристики
| Архітектура контейнера | Заголовок потоку ('BZh' + цифра розміру блоку 1-9), за яким слідують стиснені блоки даних та 32-розрядний контрольний код CRC |
| Стиснення | Перетворення Берроуза-Вілера (BWT), перетворення «переміщення на початок» (MTF) та кодування Хаффмана |
| Порядок байтів (Endianness) | Форматування бітового потоку з прямим порядком байтів (Big-Endian) |
| Колірні простори | Не застосовується (потік байтового стиснення) |
| Канали та структура | Потік стиснених байтів одного файлу |
| Максимальні розміри | Необмежена довжина потоку (підтримуються довільні розміри файлів) |
| Прозорість | 100% точне збереження даних без втрат |
| Потокове та прогресивне завантаження | Послідовне потокове передавання поблочно з незалежними контрольними сумами CRC для кожного блоку |
Технічна матриця порівняння: BZ2 проти конкурентів
| Технічний атрибут | BZ2 (Поточний) | GZ | XZ | ZSTD |
|---|---|---|---|---|
| Основний алгоритм | Перетворення Берроуза-Вілера (BWT) | Deflate (LZ77 + Хаффман) | LZMA / LZMA2 | Ентропія скінченних автоматів + LZ77 |
| Стиснення порівняно з Gzip | На 10% - 20% менше, ніж Gzip | Базовий стандарт | На 20% - 30% менше, ніж Gzip | На 10% - 20% менше, ніж Gzip |
| Швидкість розпакування | Повільна (~30-50 МБ/с) | Швидка (~300 МБ/с) | Помірна (~100 МБ/с) | Вкрай висока (>1.5 ГБ/с) |
| Контрольні суми блоків | 32-розрядний CRC для кожного блоку | CRC32 для всього потоку | CRC64 потоку | xxHash64 потоку |
Типові режими пошкодження та посібник з відновлення в шістнадцятковому форматі
Витягнення переривається помилкою 'bzip2: Data integrity error when decompressing'.
Першопричина: Змінений біт у стисненому блоці, через що обернена матриця перестановки BWT не проходить перевірку CRC32.
Відновлення: Використовуйте утиліту 'bzip2recover' для відновлення неушкоджених блоків навколо пошкодженого сектору.
Аналіз безпеки та векторів атак на парсери
Реалізації Bzip2 включають складне сортування бітових потоків та синтаксичний аналіз таблиць Хаффмана, які історично мали вразливості цілочисельного переповнення.
Відомі вектори атак
- Цілочисельне переповнення під час виділення масиву сортування BWT (наприклад, CVE-2016-3189).
- Запис за межі буфера під час побудови таблиці декодування Хаффмана.
- Відмова в обслуговуванні через паталогічні вхідні патерни, що спричиняють найгірший квадратичний час сортування BWT.
Захисні найкращі практики: Декодуйте файли BZ2 за допомогою безпечних для пам'яті декодерів WASM із примусовим обмеженням меж пам'яті.
Історичне походження та віхи
Головні переваги та плюси
- Постійно перевершує класичний Gzip на 10% - 20% при стисненні архівів вихідного коду, системних журналів та текстових баз даних.
- Незалежна блочна архітектура (від 100k до 900k) включає 32-бітні контрольні суми CRC для кожного блоку для надійного перевірення цілісності.
- Універсальна нативна доступність у всіх командних оболонках дистрибутивів Linux, BSD та macOS.
Технічні обмеження та мінуси
- Значно нижча швидкість стиснення та розпакування порівняно з сучасними алгоритмами, такими як Zstandard.
- Стиснення лише одного файлу: вимагає поєднання з TAR (.tar.bz2) для пакування кількох файлів або каталогів.
- Вище споживання процесора під час розпакування порівняно з Gzip або Zstd.
Цікаві технічні факти
- Магічні байти 'BZh' означають 'Burrows-Wheeler Zip Huffman' (архів Бурроуза-Вілера на Хаффмані), за якими слідує цифра (від '1' до '9'), що позначає розмір блоку в сотнях кілобайтів (наприклад, 'BZh9' = 900 КБ).
- Вихідний код ядра Linux поширювався виключно у форматі .tar.bz2 понад десять років, перш ніж перейти на .xz.
- Перетворення Берроуза-Вілера не стискає дані безпосередньо; воно переставляє порядок символів так, щоб однакові букви згруповувалися разом, що робить їх легкими для стиснення за допомогою кодування Хаффмана.
Поширені технічні запитання
Яка різниця між .gz та .bz2?
.bz2 використовує перетворення Берроуза-Вілера для досягнення меншого розміру файлів порівняно з .gz, але його стиснення та розпакування займає більше часу.
Чому bzip2 має команду 'bzip2recover'?
Оскільки bzip2 стискає дані незалежними блоками по 900 КБ, кожен із власним CRC, bzip2recover може витягувати неушкоджені блоки, навіть якщо частина файлу пошкоджена.
Як розпакувати файл .tar.bz2?
Ви можете розпакувати файли .tar.bz2 безпосередньо у своєму веббраузері за допомогою File2File.app без запуску інструментів командного рядка.