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

Как заставить tar использовать все ядра при сжатии в Linux

5 min read Linux Обновлено 01 Dec 2025
tar на всех ядрах: ускорение сжатия в Linux
tar на всех ядрах: ускорение сжатия в Linux

Иллюстрация: сжатие tar с использованием всех ядер процессора

Если вы когда‑либо сжимали большие объёмы с помощью tar, вы знаете, как медленно это может идти при однопоточном сжатии. Часто процесс занимает много минут или часов, и вы прерываете его. К счастью, существуют «параллельные» реализации gzip, bzip2 и xz — pigz, pbzip2 и pxz — которые позволяют tar эффективно использовать все доступные ядра CPU и ускорять создание архивов. В этой статье показано, как это сделать на Linux, с примерами, советами и контрольными списками.

Что нужно знать: обзор инструментов

Основные инструменты:

  • pigz — параллельный gzip. Быстрый, даёт меньшую степень сжатия по сравнению с xz.
  • pbzip2 — параллельный bzip2. Баланс между скоростью и степенью сжатия.
  • pxz — параллельный xz. Наилучшее сжатие, но требует больше времени и памяти.

Буква “p” в начале имён означает “parallel” — параллельный режим. На современных многопроцессорных системах (от 4‑8 до десятков и сотен потоков) эти инструменты дают заметный выигрыш по времени.

Установка

Установите нужные пакеты из репозиториев вашей системы. Примеры команд для популярных дистрибутивов:

sudo apt install pigz pbzip2 pxz    # Debian/Ubuntu
sudo dnf install pigz pbzip2 pxz    # Fedora
sudo pacman -Sy pigz pbzip2 pxz     # Arch Linux

Установка через dnf: пример вывода и пакетов

Совет: на сервере с ограниченной RAM сначала протестируйте pxz с небольшими параметрами, чтобы не вызвать OOM при агрессивных настройках сжатия.

Базовый синтаксис tar с обычным сжатием

Обычные однопоточные команды tar выглядят так:

tar czf linux-5.10-rc3.tar.gz linux/
tar cjf linux-5.10-rc3.tar.bz2 linux/
tar cJf linux-5.10-rc3.tar.xz linux/

c — create, z — gzip, j — bzip2, J — xz, f — файл. Эти команды используют стандартные одноядерные реализации: gzip, bzip2, xz.

На моей тестовой машине (старый i7‑2600s) сжатие ядра Linux заняло около 28 минут с xz в однопоточном режиме.

Пример вывода htop при однопоточном xz: одно ядро загружено

Как заставить tar использовать параллельные компрессоры

Tar может передать поток данных внешней программе сжатия. Для этого есть две опции:

  • короткая: -I <программа>
  • полная: –use-compress-program=<программа>

Примеры корректных команд:

tar -I pigz -cf linux-5.10-rc3.tar.gz linux/
tar -I pbzip2 -cf linux-5.10-rc3.tar.bz2 linux/
tar -I pxz -cf linux-5.10-rc3.tar.xz linux/

Или эквивалент с длинной опцией:

tar --use-compress-program=pxz -cf linux-5.10-rc3.tar.xz linux/

После запуска вы увидите, что pxz/pigz используют все доступные потоки CPU и время сжатия существенно сокращается.

pxz загружает все потоки CPU — htop показывает 100% на нескольких ядрах

В моём примере с pxz время уменьшилось с ~28 минут до ~7 минут, даже при параллельной работе виртуальной машины и браузера в фоне.

Результат: уменьшенное время сжатия с pxz

Настройка уровня сжатия

pxz, pigz и pbzip2 поддерживают флаги уровня сжатия (обычно -1…-9). Более высокий уровень = меньше размер архива, но больше времени и памяти.

Пример для pxz:

pxz -T0 -9 < input > output.xz
  • -T0 — автоматически использовать все доступные потоки
  • -9 — максимальный уровень сжатия

С tar:

tar -I 'pxz -T0 -9' -cf linux-5.10-rc3.tar.xz linux/

Сжатие pxz с уровнем 9: сравнение размеров и времени

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

График сравнения скорости и размера

Когда параллельное сжатие не поможет (контрпримеры)

  • Большие числа мелких файлов. Параллелизация компрессора полезна для потока данных; если узким местом является сборка большого количества мелких файлов, выигрыш может быть ограничен. В таких случаях сначала упакуйте в tar, затем сжимайте.
  • I/O‑ограниченные системы (медленные HDD). Если диск не выдерживает записи, CPU не будет главным ограничителем.
  • Нехватка памяти. Агрессивное сжатие с pxz -9 может привести к OOM.

Альтернативные подходы

  • rsync + xz/pigz: для передачи и хранения дельт лучше подходит rsync/rdiff.
  • zstd (не в этой статье): zstd предлагает отличное соотношение скорости/сжатия и имеет параллельные утилиты (zstdmt). Можно использовать tar -I ‘zstd -T0’.
  • split + параллельное сжатие частей: если у вас большая файловая система, можно разделить набор файлов и сжать в нескольких параллельных процессах.

Чек‑лист перед запуском (роль‑ориентированный)

Для системного администратора:

  • Установить pigz/pbzip2/pxz и проверить версии.
  • Оценить доступную RAM и потоки CPU.
  • Тестировать на небольшом наборе данных.

Для разработчика/инженера по данным:

  • Протестировать компромисс скорость/размер для вашего типа данных.
  • Использовать скрипт автоматизации для повторяемости.

Общий чек‑лист:

  • Есть резервная копия на случай ошибки
  • Достаточно свободного места на диске
  • Проверено потребление памяти при выбранном уровне сжатия

Быстрая памятка: команды и сниппеты (cheat sheet)

Создать .tar.xz с pxz, используя все ядра:

tar -I 'pxz -T0' -cf archive.tar.xz /path/to/dir

Создать .tar.gz с pigz, все ядра, уровень 6:

tar -I 'pigz -p 0 -6' -cf archive.tar.gz /path/to/dir

Распаковать архивы (обычно стандартные tar справится):

tar -xf archive.tar.xz

Примечание: некоторые старые версии tar не понимают -I; в таком случае используйте –use-compress-program или вызовите pxz/pigz отдельно.

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

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

Мини‑методология для повторяемых бенчмарков

  1. Выберите один и тот же набор файлов и расположение Диска/FS.
  2. Очистите кеши диска (для теста на реальную скорость I/O).
  3. Запустите каждый тест минимум 3 раза и усредните результаты.
  4. Измеряйте время (time), нагрузку CPU (htop) и итоговый размер архива.
  5. Документируйте настройки (уровень сжатия, число потоков).

Совместимость и миграция

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

Короткий глоссарий

  • tar — утилита архивирования потоков файлов.
  • pigz/pbzip2/pxz — многопоточные реализации gzip/bzip2/xz соответственно.
  • -I / –use-compress-program — опция tar для указания внешней программы сжатия.

Важно: параллельное сжатие экономит время, но не всегда снижает нагрузку на систему. Тестируйте в условиях, близких к рабочим.

Резюме

Использование pigz, pbzip2 или pxz через опцию -I в tar — простой и надёжный способ задействовать все CPU‑ядра и ускорить сжатие больших архивов в Linux. Выбор инструмента зависит от желаемого баланса скорости и степени сжатия: pigz — быстрее, pxz — лучше сжимает. Тестируйте уровни сжатия и следите за потреблением памяти.

Если вы хотите быстро начать: установите pxz и выполните tar -I ‘pxz -T0’ -cf archive.tar.xz /path/to/dir. Это даст заметный прирост производительности на современных многоядерных машинах.

Спасибо за прочтение — удачных и быстрых архивов!

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

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

Как отложить Windows 10 Anniversary Update
Windows

Как отложить Windows 10 Anniversary Update

Исправление ошибки Search protocol host в Windows 10
Windows

Исправление ошибки Search protocol host в Windows 10

Как включить камеру на Mac
How-to

Как включить камеру на Mac

Устранение Fatal Application Exit в Resident Evil 7
Игры

Устранение Fatal Application Exit в Resident Evil 7

Уменьшение фонового шума микрофона
Аудио

Уменьшение фонового шума микрофона

Ускорение загрузок в Microsoft Store на Windows
Windows

Ускорение загрузок в Microsoft Store на Windows