Останнє оновлення: 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 КБ), GZIP потребує незначних витрат пам’яті під час стискання та розпакування.

BZIP2

  • Основний алгоритм: Burrows-Wheeler Transform (BWT) у поєднанні з Move-to-Front (MTF) трансформацією та кодуванням Хаффмана
  • Типове розширення: .tar.bz2, .tbz2, .bz2
  • Ера випуску: 1996 (створено Джуліаном Сьюардом)
  • Основна перевага: Кращі коефіцієнти стискання повторюваних ASCII‑файлів та структурованих лог‑файлів порівняно з GZIP.
  • Основний недолік: Повільніший у всіх аспектах, особливо під час розпакування, і в значній мірі став застарілим через нові алгоритми.

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

XZ (LZMA2)

  • Базовий алгоритм: LZMA2 (Lempel-Ziv-Markov chain Algorithm, поліпшений)
  • Типове розширення: .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) на продакшн‑серверах, де ресурси CPU мають бути зарезервовані для навантажень додатків.
  • Потрібна максимальна портативність між застарілими вбудованими системами та стандартними базовими образами.

Використовуйте 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% в середньому, при цьому різко збільшуючи споживання процесорних циклів та навантаження на пам’ять.

Дивіться також