Последно актуализирано: 20 авг., 2026

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 (създадено от Jean-loup Gailly и Mark Adler като безпатентна алтернатива на
compress) - Основно предимство: Непобедима скорост на изпълнение и почти универсална поддръжка от екосистемата.
- Основен недостатък: По-ниско съотношение на компресия в сравнение с модерните статистически и речникови кодери.
GZIP служи като стандартен работен кон в Unix средите повече от три десетилетия. Тъй като неговият DEFLATE алгоритъм работи с малки плъзгащи се прозорци (32 KB), GZIP изисква пренебрежимо малко използване на памет както при компресиране, така и при декомпресиране.
BZIP2
- Основен алгоритъм: Burrows-Wheeler Transform (BWT) комбиниран с трансформация Move-to-Front (MTF) и Хъфманово кодиране
- Стандартно разширение:
.tar.bz2,.tbz2,.bz2 - Ера на издаване: 1996 (създадено от Джулиан Сьюард)
- Основно предимство: По-добри коефициенти на компресиране при повтарящи се ASCII и структурирани лог файлове в сравнение с GZIP.
- Основен недостатък: По-бавно навсякъде, особено по време на декомпресиране, и в голяма степен излишно поради по-нови алгоритми.
BZIP2 обработва данни в дискретни блокове (обикновено 900 KB), използвайки обратими пермутации, които групират подобни символи заедно преди кодирането. Въпреки че беше широко почитан в края на 90‑те и началото на 2000‑те години заради превъзходството си над размерите на файловете на GZIP, неговата изчислителна цена е относително висока.
XZ (LZMA2)
- Подлежащ алгоритъм: LZMA2 (Алгоритъм на Лемпел-Зив-Марков веригата, подобрен)
- Стандартно разширение:
.tar.xz,.txz,.xz - Ера на издаване: 2009 (въведено за замяна на по-стария формат
lzma) - Основно предимство: Изключително високи коефициенти на компресиране и бързо, леко декомпресиране.
- Основен недостатък: Голямо използване на RAM памет и продължително време на процесора по време на първоначалното компресиране.
XZ използва променливи размери на речника (често до 32 MB или 64 MB по подразбиране), за да открива дублиращи се байтови модели в много по-широки прозорци от данни в сравнение с GZIP. Това го прави изключително ефективен при намаляване на големи, излишни файлове като медии за инсталиране на ОС, дървета с изходен код на ядрото и фърмуер изображения.
2. Матрица за сравнение на производителността
Таблицата по-долу обобщава практическите динамики на производителността на всяка помощна програма при изпълнение с подразбиращи се конфигурации на стандартен сървърен хардуер:
| Метрика / Измерение | GZIP (-6) | BZIP2 (-9) | XZ (-6) |
|---|---|---|---|
| Коефициент на компресия | Умерено (~65-75% намаляване) | Добре (~75-80% намаляване) | Отлично (~80-88% намаляване) |
| Скорост на компресиране | Много бързо | Бавно | Много бавно |
| Скорост на декомпресиране | Изключително бързо | Бавно до умерено | Бързо |
| Използване на RAM при компресия | Незначително (~1–2 MB) | Ниско (~8–10 MB) | Високо (~100–700 MB+) |
| Използване на RAM при декомпресиране | Незначително (< 1 MB) | Ниско (~4 MB) | Умерено (~10–65 MB) |
| Основен оптимален диапазон | Регистри, CI/CD конвейери, потоци в реално време | Съвместимост със стари архиви | Хранилища с пакети, OS ISO файлове, студено съхранение |
3. Реални резултати от бенчмарковете
За да разберете как тези инструменти се държат при реално натоварване, разгледайте представителен 1 GB необработен сървърен журнал за достъп и некопресиран 500 MB директория с изходен код на софтуер.
Сценарий A: Компресиране на големи лог файлове (1 GB текст)
- GZIP: Завършва за по-малко от 12 секунди, създавайки архив около 180 MB.
- BZIP2: Завършва приблизително за 45–50 секунди, намалявайки файла до около 130 MB.
- XZ: Отнема 80–90 секунди при настройки по подразбиране, създавайки архив близо до 95 MB.
Сценарий B: Декомпресиране на работни натоварвания
Често пренебрегвана критична метрика е асиметрия.
- GZIP се разархивира за 2–3 секунди с микроскопично използване на паметта.
- XZ се разархивира за 4–6 секунди. Въпреки че първоначалното компресиране беше бавно, извличането на
.xzе почти толкова бързо, колкото извличането на.gz. - BZIP2 изисква приблизително 25–30 секунди само за разархивиране, защото обръщането на трансформацията на Бъроуза-Уийлър е изчислително симетрично на кодирането й.
4. Защо BZIP2 губи популярност
В съвременната инфраструктура BZIP2 се намира в неудобно средно положение:
- Бързината е надмината от GZIP: Ако латентността при обработка или ниското използване на процесора са важни, GZIP е значително по-бърз.
- Плътността е надмината от XZ: Ако спестяването на честотна лента и ефективността на съхранение са важни, XZ генерира значително по-малки архиви.
- Скоростта на разархивиране е надмината и от двете: В системите за доставяне на софтуер клиентите плащат измеримо CPU наказание при извличане на файлове
.tar.bz2в сравнение с.tar.gzили.tar.xz.
Следователно, основните Linux дистрибуции (включително Debian, Arch и Fedora) са преместили официалното разпространение на пакети и ядрови tarball‑ове от 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)
Въпрос 1. Кой формат осигурява най-малък размер на архива? XZ последователно произвежда най-малкия размер на архива от трите, поради по-големите LZMA2 речникови прозорци.
Въпрос 2. XZ е по-бавен от GZIP при разархивиране на файлове? XZ е само леко по-бавен от GZIP при разархивиране, но е значително по-бърз от BZIP2.
Q3. Могат ли GZIP и XZ да се възползват от множество CPU ядра? XZ поддържа вградено многопоточност чрез флага -T0, докато GZIP може да бъде паралелизиран върху ядра с помощта на помощната програма pigz.
Q4. Защо Linux дистрибуциите премахват BZIP2? Дистрибуциите в голяма степен са премахнали BZIP2, защото XZ компресира по-малко и разархивира по-бързо, докато GZIP остава по-бърз за бързи операции.
Q5. Дали по-високо ниво на компресия като -9 прави забележима разлика? Задаването на ниво -9 дава само незначително намаляване на размера от 1% до 3% средно, докато значително увеличава консумацията на CPU цикли и натоварването на паметта.