Архив BZIP2 (.bz2)
Открытый СтандартBzip2 (BZ2) - это классическая свободная от патентов утилита сжатия и формат файлов для Unix, созданный Джулианом Сьюардом. Он использует преобразование Берроуза - Уиллера для достижения значительно более высокой степени сжатия по сравнению с классическим Gzip.
Анализ и метаданные
Операционные системы и анализаторы файлов идентифицируют файлы BZ2 по начальной двоичной последовательности байтов:
Сигнатура заголовка на уровне байтов (Magic Bytes)
Операционные системы и анализаторы файлов идентифицируют файлы BZ2 по начальной двоичной последовательности байтов:
HEX-СИГНАТУРА (СМЕЩЕНИЕ 0):
42 5A 68ПРЕДСТАВЛЕНИЕ ASCII: BZh
Стандартизация: Открытый стандарт Bzip2 (Bzip2 Open Source Standard)
Технические спецификации
| Архитектура контейнера | Заголовок потока ('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 для всего потока |
Типичные режимы повреждения и руководство по восстановлению в HEX
Распаковка прерывается сообщением 'bzip2: Data integrity error when decompressing'.
Первопричина: Искаженный бит в сжатом блоке, из-за чего обратная матрица перестановок BWT не проходит валидацию CRC32.
Восстановление: Используйте утилиту 'bzip2recover' для извлечения неповрежденных блоков, окружающих поврежденный сектор.
Анализ безопасности и векторы атак на парсер
Реализации Bzip2 включают сложную сортировку битовых потоков и синтаксический анализ таблиц Хаффмана, в которых исторически возникали уязвимости переполнения целых чисел.
Известные векторы атак
- Переполнение целых чисел при выделении памяти под массив сортировки BWT (например, CVE-2016-3189).
- Запись за пределами выделенного буфера при формировании таблицы декодирования Хаффмана.
- Отказ в обслуживании из-за патологических входных паттернов, вызывающих худшее квадратичное время сортировки BWT.
Защитные лучшие практики: Декодируйте файлы BZ2 с использованием безопасных для памяти WASM-декодеров с жестко ограниченными границами памяти.
Исторические истоки и вехи
Ключевые преимущества и плюсы
- Стабильно превосходит классический Gzip на 10 - 20% при обработке архивов исходного кода (tarball), системных логов и текстовых баз данных.
- Независимая блочная архитектура (от 100 КБ до 900 КБ) включает 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 без запуска утилит командной строки.