Последнее обновление: 20 авг., 2026

GZIP vs BZIP2 vs XZ: Which Linux Compression Format Is Best?

GZIP vs BZIP2 vs XZ: Какой формат сжатия Linux лучший?

Независимо от того, упаковываете ли вы ежедневные дампы баз данных, ротацию многогигабайтных журналов веб‑серверов или распределяете скомпилированные бинарные файлы на тысячи узлов, сжатие является повседневной реальностью в администрировании Linux.

При вызове tar или обработке потоковых данных через стандартный ввод вы обычно сталкиваетесь с тремя стандартными утилитами: GZIP (.gz), BZIP2 (.bz2) и XZ (.xz).

Хотя все три инструмента стремятся упаковать необработанные байты в компактные архивы, они делают принципиально разные инженерные компромиссы между коэффициентом сжатия, нагрузкой на процессор и потреблением памяти. Выбор неправильного формата может незаметно стать узким местом ваших автоматических развертываний, задержать запланированные окна резервного копирования или со временем расходовать ценное дисковое пространство.

В этом руководстве разбирается, как каждый формат работает «под капотом», как они показывают себя в реальных нагрузках и как выбрать подходящий для вашей инфраструктуры.

1. Краткие технические профили: Три претендента

GZIP (GNU Zip)

  • Алгоритм: DEFLATE (комбинация LZ77 и кодирования Хаффмана)
  • Расширение по умолчанию: .tar.gz, .tgz, .gz
  • Год выпуска: 1992 (создано Жан-Лу Гейли и Марком Адлером как альтернатива compress без патентов)
  • Основное преимущество: Непревзойденная скорость выполнения и почти универсальная поддержка экосистемы.
  • Основной недостаток: Низкое коэффициент сжатия по сравнению с современными статистическими и словарными кодировщиками.

GZIP служит основной утилитой Unix‑окружений более трех десятилетий. Поскольку его алгоритм DEFLATE работает с небольшими скользящими окнами (32 KB), GZIP требует пренебрежимо небольших затрат памяти как при сжатии, так и при распаковке.

BZIP2

  • Алгоритм: Преобразование Бурроуза-Уилера (BWT) в сочетании с преобразованием Move-to-Front (MTF) и кодированием Хаффмана
  • Расширение по умолчанию: .tar.bz2, .tbz2, .bz2
  • Эра выпуска: 1996 (создано Джулианом Сьюардом)
  • Основное преимущество: Лучшие коэффициенты сжатия повторяющихся ASCII и структурированных файлов журналов по сравнению с GZIP.
  • Основной недостаток: Медленнее во всех аспектах, особенно при декомпрессии, и в значительной степени устарел из‑за более новых алгоритмов.

BZIP2 обрабатывает данные в отдельных блоках (обычно 900 КБ), используя обратимые перестановки, которые группируют похожие символы перед кодированием. Хотя он был широко отмечен в конце 1990‑х и начале 2000‑х годов за уменьшение размеров файлов по сравнению с GZIP, его вычислительные затраты относительно высоки.

XZ (LZMA2)

  • Базовый алгоритм: LZMA2 (Алгоритм цепочки Лемпеля‑Зива‑Маркова, улучшенный)
  • Расширение по умолчанию: .tar.xz, .txz, .xz
  • Эра выпуска: 2009 (введено как преемник старого формата lzma)
  • Основное преимущество: Исключительно высокие коэффициенты сжатия и быстрая, легковесная декомпрессия.
  • Основной недостаток: Большое потребление ОЗУ и длительное время работы процессора во время начального сжатия.

XZ использует переменные размеры словаря (часто до 32 МБ или 64 МБ по умолчанию), чтобы находить дублирующиеся байтовые шаблоны в гораздо более широких окнах данных, чем GZIP. Это делает его чрезвычайно эффективным при сжатии больших избыточных файлов, таких как установочные носители ОС, деревья исходного кода ядра и образы прошивок.

2. Матрица сравнения производительности

Таблица ниже суммирует практические динамики производительности каждой утилиты при запуске с настройками по умолчанию на стандартном серверном оборудовании:

Метрика / ПоказательGZIP (-6)BZIP2 (-9)XZ (-6)
Коэффициент сжатияУмеренное (~65‑75% сокращение)Хорошо (~75-80% сокращения)Отлично (~80-88% сокращения)
Скорость сжатияОчень быстроМедленноОчень медленно
Скорость декомпрессииЧрезвычайно быстроОт медленного до умеренногоБыстро
Использование ОЗУ при сжатииНезначительно (~1–2 МБ)Низкий (~8–10 МБ)Высокий (~100–700 МБ+)
Использование ОЗУ при распаковкеНезначительно (< 1 МБ)Низкий (~4 МБ)Умеренно (~10–65 МБ)
Основная оптимальная точкаЖурналы, конвейеры CI/CD, потоки в реальном времениСовместимость со старыми архивамиРепозитории пакетов, ISO‑образы ОС, холодное хранилище

3. Практические результаты бенчмарков

Чтобы понять, как эти инструменты работают при реальной нагрузке, возьмите типичный необработанный журнал доступа сервера объёмом 1 ГБ и несжатый каталог исходного кода программного обеспечения размером 500 МБ.

Сценарий A: Сжатие больших файлов журналов (текст 1 ГБ)

  • GZIP: Завершается менее чем за 12 секунд, создавая архив примерно 180 МБ.
  • BZIP2: Завершается примерно за 45–50 секунд, уменьшая файл до около 130 МБ.
  • XZ: Занимает 80–90 секунд при настройках по умолчанию, получая архив около 95 МБ.

Сценарий B: Нагрузки на распаковку

Критически важный показатель, часто упускаемый из виду, — асимметрия.

  • GZIP распаковывается за 2–3 секунды с микроскопическим использованием памяти.
  • XZ распаковывается за 4–6 секунд. Хотя начальное сжатие было медленным, извлечение .xz почти так же быстро, как извлечение .gz.
  • BZIP2 требует примерно 25–30 секунд только на распаковку, потому что обратное преобразование Бурроуза-Уилера вычислительно симметрично его кодированию.

4. Почему BZIP2 теряет популярность

В современной инфраструктуре BZIP2 оказывается в неловком промежуточном положении:

  1. Отстаёт по скорости от GZIP: Если важны задержка обработки или низкое использование ЦП, GZIP значительно быстрее.
  2. Отстаёт по плотности от XZ: Если важны экономия пропускной способности и эффективность хранения, XZ создает значительно более маленькие архивы.
  3. Отстаёт по скорости распаковки от обоих: В системах доставки программного обеспечения клиенты несут измеримый штраф по использованию ЦП при извлечении файлов .tar.bz2 по сравнению с .tar.gz или .tar.xz.

В результате основные дистрибутивы Linux (включая Debian, Arch и Fedora) перенесли официальные пакеты и ядровые tar‑архивы от BZIP2 к XZ (а в последнее время — к Zstandard для операций выполнения).

5. Практическое использование командной строки

Интеграция с Tar (самый распространённый рабочий процесс)

Современные реализации GNU tar автоматически распознают формат сжатия по расширению файла, но использование явных флагов по‑прежнему является стандартной практикой:

# GZIP: Fast archive creation
tar -czvf project-backup.tar.gz /var/www/project/

# BZIP2: Legacy high-ratio archive
tar -cjvf project-backup.tar.bz2 /var/www/project/

# XZ: Maximum space savings
tar -cJvf project-backup.tar.xz /var/www/project/

# Generic extraction (tar auto-detects the format)
tar -xvf archive-name.tar.*

Самостоятельное сжатие файлов

Для сжатия отдельных файлов без их объединения:

# Compress keeping the original file intact (-k)
gzip -k access.log      # Output: access.log.gz
bzip2 -k access.log     # Output: access.log.bz2
xz -k access.log        # Output: access.log.xz

# Decompress individual files
gzip -d access.log.gz
bzip2 -d access.log.bz2
xz -d access.log.xz

Использование многопроцессорных систем

По умолчанию однопоточные реализации этих инструментов используют только одно ядро процессора. Если вы сжимаете многогигабайтные архивы на современных многопоточных серверах, однопоточная обработка может занимать часы.

  • XZ многопоточность: Нативная поддержка через -T или --threads:
    xz -T0 -k database_dump.sql   # Uses all available CPU cores
    
  • Параллельный GZIP (pigz): Готовая замена, использующая все ядра процессора для операций GZIP:
    pigz -k database_dump.sql
    
  • Параллельный BZIP2 (pbzip2): Многопоточная реализация для BZIP2:
    pbzip2 -k database_dump.sql
    

6. Как выбрать: Практический фреймворк принятия решений

Выберите инструмент, исходя из главного ограничения вашего рабочего процесса:

Используйте GZIP, если:

  • Вы настраиваете сжатие потоков в реальном времени или передачу по сети, где ограничивающим фактором является пропускная способность.
  • Вы управляете автоматическим вращением журналов (logrotate) на продакшн‑серверах, где ресурсы ЦП должны быть зарезервированы для рабочих нагрузок приложений.
  • Требуется максимальная переносимость между устаревшими встроенными системами и стандартными базовыми образами.

Используйте XZ, если:

  • Вы публикуете артефакты релизов, сборки ядра, базовые образы контейнеров или статические репозитории пакетов, которые часто загружаются третьими сторонами.
  • Вы готовите долгосрочные холодные архивы (внешние еженедельные/ежемесячные резервные копии), где стоимость хранения превышает однократное время сжатия.
  • Вам нужны небольшие размеры файлов, но ваши пользователи всё равно требуют быструю загрузку и быстрые времена извлечения.

Оставляйте BZIP2 только если:

  • Вы поддерживаете обратную совместимость со старыми скриптами, существующими процедурами восстановления резервных копий или программными устройствами, которые не поставляют декомпрессор XZ.

7. Часто задаваемые вопросы (FAQ)

Q1. Какой формат обеспечивает наименьший размер архива? XZ последовательно обеспечивает наименьший размер архива среди трёх благодаря более крупным словарным окнам LZMA2.

Q2. Является ли XZ медленнее GZIP при распаковке файлов? XZ лишь немного медленнее GZIP при распаковке, но существенно быстрее, чем BZIP2.

Q3. Могут ли GZIP и XZ использовать несколько ядер процессора? XZ поддерживает нативное многопоточность с помощью флага -T0, в то время как GZIP можно распараллелить по ядрам, используя утилиту‑заменитель pigz.

Q4. Почему дистрибутивы Linux отказываются от BZIP2? Дистрибутивы в значительной степени отказались от BZIP2, потому что XZ сжимает до меньшего размера и распаковывается быстрее, в то время как GZIP остаётся быстрее для быстрых операций.

Q5. Делает ли более высокий уровень сжатия, например -9, заметную разницу? Установка уровня -9 дает лишь незначительное сокращение размера от 1 % до 3 % в среднем, при этом резко увеличивая потребление процессорных циклов и нагрузку на память.

См. также