Гид по технологиям

Быстрая компрессия с pigz

• 5 min read • Linux • Обновлено 28 Nov 2025
Быстрая компрессия с pigz
Быстрая компрессия с pigz

Ультрабыстрая компрессия с помощью pigz — обложка

Введение

Gzip — надёжный формат сжатия, но стандартная утилита gzip использует только одно ядро CPU. Pigz (parallel implementation of gzip) — многопоточная замена, которая выполняет сжатие в формате GNU Zip с использованием нескольких процессорных ядер и часто делает это гораздо быстрее.

Кратко: pigz совместим с форматом .gz, поддерживает большинство привычных опций gzip (например, уровни от 1 до 9), имеет собственные ключи для многопоточности и может работать как внешний компрессор для tar.

Что нужно знать прежде, чем начать

  • Термины: “сжатие” — уменьшение размера файла; “архив” — объединение нескольких файлов в один контейнер (tar).
  • Pigz не является архиватором: он сжимает отдельные файлы (.gz). Для каталогов используйте tar вместе с pigz.
  • Опции, которые часто используются: -k (сохранить исходный файл), -d (разархивация), -p N (использовать N потоков), числа 1–9 — уровень компрессии.

Важно: в командах ниже пробелы между именем команды и параметрами обязателны: pigz -k file, а не pigz-k file.

Установка

На Debian/Ubuntu/Mint и совместимых дистрибутивах:

sudo apt install pigz

Установка pigz через apt на Ubuntu

На Arch Linux и Manjaro:

sudo pacman -S pigz

На openSUSE:

sudo zypper install pigz

Если пакет недоступен в репозитории, можно собрать из исходников с официального репозитория проекта.

Сжатие одного файла

Чтобы сжать файл в формат .gz с помощью pigz:

pigz имя_файла

По умолчанию pigz заменяет исходный файл сжатым (удаляет оригинал). Чтобы сохранить исходный файл, используйте -k:

pigz -k имя_файла

Выбор уровня сжатия (1—9):

pigz -5 файл
  • 1 — максимально быстро, но менее эффективно по размеру;
  • 9 — максимально эффективно по размеру, но медленнее.

Сжатие одного файла с помощью pigz, пример вывода ls

Сжатие каталогов (tar + pigz)

Pigz не умеет архивацию каталога сам по себе. Для папок используйте tar и укажите pigz как внешний компрессор. Примеры:

tar --use-compress-program="pigz -k -9" -cf pictures.tar.gz Pictures

Пояснение:

  • --use-compress-program="pigz -k -9" — tar будет использовать внешний процессор pigz с ключами -k (сохранить файлы) и -9 (максимальный уровень сжатия);
  • -c — создать архив;
  • -f pictures.tar.gz — имя создаваемого файла архива;
  • Pictures — папка, которую архивируем.

Альтернативный синтаксис (короткий) в современных версиях tar:

tar -I pigz -cf pictures.tar.gz Pictures

Архивация каталога через tar с внешним компрессором pigz

Распаковка файлов и архивов

Разжатие отдельного .gz файла:

pigz -d имя_файла.gz
# или эквивалентно
unpigz имя_файла.gz

Для распаковки tar.gz, где для сжатия использовался pigz, применяйте tar с тем же внешним процессором:

tar --use-compress-program="pigz -d" -xvf pictures.tar.gz

Или коротко, если tar поддерживает -I:

tar -I pigz -xvf pictures.tar.gz

Распаковка каталога из tar.gz с помощью pigz

Управление параллелизмом и влияние на систему

По умолчанию pigz пытается использовать все доступные ядра процессора. При сжатии больших наборов данных это может снизить отзывчивость системы. Ограничьте число потоков через -p:

pigz -k -p 2 файл

Пример: -p 2 заставит pigz работать только на двух ядрах. Подберите число, учитывая нагрузку и количество ядер в системе.

Совет: для фоновых бэкапов запускайте pigz с меньшим числом потоков; для однократной пакетной операции — используйте больше потоков.

Практические рекомендации и методика выбора опций

Мини‑метод: как выбрать параметры для задачи

  1. Определите приоритет: скорость или размер? Если скорость — используйте -1 и больше потоков. Если размер — -9.
  2. Учитывайте влияние на систему: ограничьте -p при интерактивной работе.
  3. Для каталогов всегда используйте tar с --use-compress-program="pigz ...".
  4. Для резервного копирования, где требуется хранить исходники, добавляйте -k.

Ментальные модели:

  • “CPU vs IO”: при слабом диске увеличение потоков может не дать прироста — узким местом становится I/O.
  • “Быстрое бэкапирование”: берегите интерактивность, ограничив потоки и снижая уровень компрессии.

Когда pigz не подходит (противопоказания)

  • Нужен контейнерный архив с сохранением метаданных и атрибутов — используйте tar с подходящими ключами; pigz сам по себе не архивирует каталоги.
  • Сжатие коротких, уже сжатых файлов (изображения, видео) часто даёт небольшой выигрыш и тратит CPU.
  • На машинах с очень высоким I/O-ограничением параллелизм может ухудшить скорость.

Альтернативы и сравнение (кратко)

  • gzip: однопоточный, стандартный; совместим по формату.
  • pigz: многопоточный gzip-совместимый.
  • pbzip2/bzip2: многопоточный bzip2-совместимый (лучше по сжатию в некоторых случаях, но медленнее).
  • zstd: современный алгоритм, быстрое сжатие и отличная степень компрессии; имеет собственный формат, не совместим с .gz.

Выбор зависит от совместимости форматов, требований к скорости и степени сжатия.

Контроль качества: тесты и приёмка

Критерии приёмки

  • Файл .gz корректно создаётся и распаковывается стандартной утилитой gzip/gunzip или pigz.
  • При использовании -k исходный файл остаётся.
  • При указании -p N утилита использует не более N потоков (проверяется инструментами мониторинга CPU).

Минимальные тесты

  1. Сжатие и распаковка текстового файла: pigz -k test.txt → pigz -d test.txt.gz.
  2. Архивация каталога: tar --use-compress-program="pigz -9" -cf a.tar.gz dir → tar --use-compress-program="pigz -d" -xvf a.tar.gz.
  3. Проверка ограничения потоков: запустить pigz -p 1 на большом файле и наблюдать нагрузку.

Роли и чеклисты

Администратор

  • Установить pigz из репозитория.
  • Настроить cron/скрипты бэкапа с разумными параметрами -p и -k.
  • Тестировать восстановление из архива.

Разработчик/DevOps

  • Выбрать компрессор, учитывая совместимость CI/CD и артефактов.
  • Обновить скрипты сборки: заменить gzip на pigz там, где важна скорость.

Пользователь рабочего стола

  • Использовать pigz для локального сжатия больших каталогов, но ограничивать потоки для сохранения отзывчивости.

Пример рабочего процесса (SOP)

  1. Проверить наличие pigz: which pigz.
  2. Для архивирования каталога выполнить: tar --use-compress-program="pigz -k -6 -p 4" -cf backup.tar.gz /path/to/data.
  3. Перенести backup.tar.gz на хранение.
  4. Для восстановления: tar --use-compress-program="pigz -d" -xvf backup.tar.gz.

Диаграмма принятия решения

flowchart TD
  A[Нужно сжать файл или каталог?] -->|Файл| B[Использовать pigz]
  A -->|Каталог| C[Использовать tar + pigz]
  B --> D[Определить приоритеты]
  D -->|Скорость| E[pigz -1 -p <число>]
  D -->|Максимальный коэффициент| F[pigz -9 -p <число>]
  C --> G[tar --use-compress-program='pigz ...']

Совместимость и рекомендации по миграции

  • Формат .gz, созданный pigz, полностью совместим с gzip/gunzip.
  • Для перехода со скриптов, использующих gzip, обычно достаточно заменить вызовы gzip на pigz и проверить опции -k/-p.
  • Для интеграции с системами архивации/бэкапа убедитесь, что на всех узлах доступен pigz или используйте совместимый gzip для распаковки.

Заключение

Pigz — простой и эффективный способ ускорить сжатие в формате .gz на многопроцессорных системах. Он совместим с gzip по формату, легко интегрируется с tar и имеет полезные опции для контроля параллелизма и сохранения исходников. При выборе параметров ориентируйтесь на баланс между скоростью, нагрузкой на систему и степенью сжатия.

Примечание об изображении: изображение предоставлено Miguel Á. Padriñán @Pexels.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро