Как лучше всего использовать параллельные bzip2 и gzip по умолчанию?
Bzip2 и gzip используют только одно ядро, хотя многие компьютеры имеют более одного ядра. Но есть такие программы, как lbzip2, pbzip2 и pigz, которые используют все доступные ядра и обещают быть совместимыми с bzip2 и gzip.
Итак, как лучше использовать эти программы по умолчанию, чтобы tar cfa file.tar.bz2 directory
использует lbzip2/pbzip2 вместо bzip2? Конечно, я не хочу ничего ломать.
5 ответов
Вы можете использовать символические ссылки bzip2, bunzip2 и bzcat на lbzip2, а gzip, gunzip, gzcat и zcat на pigz:
sudo apt-get install lbzip2 pigz
cd /usr/local/bin
ln -s /usr/bin/lbzip2 bzip2
ln -s /usr/bin/lbzip2 bunzip2
ln -s /usr/bin/lbzip2 bzcat
ln -s /usr/bin/pigz gzip
ln -s /usr/bin/pigz gunzip
ln -s /usr/bin/pigz gzcat
ln -s /usr/bin/pigz zcat
Я выбрал lbzip2 вместо pbzip2, потому что /usr/share/doc/lbzip2/README.gz выглядит "лучше", чем /usr/share/doc/pbzip2/README.gz. Также в руководстве по tar рассказывается о lbzip2.
Редактировать:
pigz-2.1.6, входящий в состав Precise Pangolin, отказывается распаковывать файлы с неизвестными суффиксами (например, initramfs-*.img). Это исправлено в pigz-2.2.4, который поставляется с Quantal. Так что вы можете подождать, пока Quantal, установить пакет Quantal вручную или пока не связывать gunzip / gzcat / zcat.
Идея символической ссылки действительно хороша.
Другое рабочее решение - псевдоним tar
:
alias tar='tar --use-compress-program=pbzip2'
или соответственно
alias tar='tar --use-compress-program=pigz'
Это создает другой вид дефолта.
Символическая ссылка действительно неверна. Он заменит gzip по умолчанию (или bzip2) на pigz (или pbzip2) для всей системы. Хотя параллельные реализации удивительно похожи на версии с одним процессом, тонкие различия в параметрах командной строки могут нарушить основные системные процессы, которые зависят от этих различий.
Опция --use-compress-program - намного лучший выбор. Второй вариант (очень похожий на псевдоним) - установить переменную окружения TAR_OPTIONS, поддерживаемую GNU tar:
$ export TAR_OPTIONS = "- use-compress-program=pbzip2" $ tar czf myfile.tar.bz2 mysubdir/
Одним из интересных вариантов является перекомпиляция tar для использования многопоточных по умолчанию. Скопировано из этого ответа stackoverflow
Перекомпиляция с заменой
Если вы собираете tar из исходников, вы можете перекомпилировать с параметрами
--with-gzip=pigz
--with-bzip2=lbzip2
--with-lzip=plzip
После перекомпиляции tar с этими опциями вы можете проверить вывод справки tar:
$ tar --help | grep "lbzip2\|plzip\|pigz"
-j, --bzip2 filter the archive through lbzip2
--lzip filter the archive through plzip
-z, --gzip, --gunzip, --ungzip filter the archive through pigz
Используйте в вашем ~/.bash_aliases:
alias gzip="pigz"
alias gunzip="unpigz"