Как лучше всего использовать параллельные 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"
Другие вопросы по тегам