Сжатие файлов архиватором под linux в много потоков
Преамбула
Далеко не все знают, что существуют аналоги gzip и gzip2 с поддержкой SMP, которые генерируют архивы, полностью совместимые со стандартными архиваторами. Зовутся эти чудо-архиваторы pigz, pbzip2 и lbzip2 (два последних имплементация bzip2, думаю лучше брать lbzip2, поскольку именно эта версия упоминается в доках на tar).
Инсталлируем:
yum install pigz pbzip2 lbzip2
Используем:
Паковать:
tar cf - <directory> | pigz - > <имя файла.tar.gz>
Распаковать
cat <имя файла.tar.gz> | unpigz - | tar xf -
Назначаем использование pigz в tar поумолчанию:
в файл /etc/bashrc
добавить строку: alias tarz='tar --use-compress-program=pigz'
echo "alias tarz='tar --use-compress-program=pigz'" >> /etc/bashrc
или:
alias tarz='tar --use-compress-program=pbzip2'
После чего для архивации использовать команду:
tarz -cf <output_file.tar.gz> <directory>
Тест:
Сервер Xeon, 16ядер
исходный файл: 10Гб
сжатие через обычный gzip 1поток:
real 9m16.961s user 9m6.995s sys 0m13.166s
сжатие через pigz 16 потоков:
real 1m10.759s user 14m28.143s sys 0m17.618s
Результат: ускорение в 10 раз!