web-dev-qa-db-fra.com

Quel est le meilleur moyen d'utiliser parallèlement bzip2 et gzip par défaut?

Bzip2 et gzip n’utilisent qu’un seul cœur, bien que de nombreux ordinateurs en possèdent plusieurs. Mais il existe des programmes comme lbzip2, pbzip2 et pigz, qui utilisent tous les cœurs disponibles et promettent d’être compatibles avec bzip2 et gzip.

Alors, quel est le meilleur moyen d’utiliser ces programmes par défaut pour que tar cfa file.tar.bz2 directory utilise lbzip2/pbzip2 au lieu de bzip2? Bien sûr, je ne veux rien casser.

40
elmicha

Vous pouvez relier symboliquement bzip2, bunzip2 et bzcat à lbzip2, et gzip, gunzip, gzcat et 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

J'ai choisi lbzip2 au lieu de pbzip2 car /usr/share/doc/lbzip2/README.gz est plus "joli" que /usr/share/doc/pbzip2/README.gz. En outre, le manuel de tar parle de lbzip2 .

Modifier:

pigz-2.1.6, inclus dans Precise Pangolin, refuse de décompresser les fichiers avec des suffixes inconnus (par exemple, initramfs - *. img). Ceci est corrigé dans pigz-2.2.4, qui est livré avec Quantal. Donc, vous voudrez peut-être attendre jusqu'à ce que Quantal installe le paquet Quantal manuellement ou ne liez pas encore gunzip/gzcat/zcat.

31
elmicha

L'idée de lien symbolique est vraiment bien.
Une autre solution de travail consiste à alias tar:

alias tar='tar --use-compress-program=pbzip2'

ou respectivement

alias tar='tar --use-compress-program=pigz'

Cela crée un autre type de défaut.

31
Bastian Ebeling

La réponse au lien symbolique est vraiment incorrecte. Il remplacerait le défaut gzip (ou bzip2) par pigz (ou pbzip2) pour l’ensemble du système. Bien que les implémentations parallèles soient remarquablement similaires aux versions à processus uniques, des différences subtiles dans les options de ligne de commande pourraient briser les processus système centraux qui dépendent de ces différences.

L'option "--use-compress-programme" est un bien meilleur choix. Une deuxième option (un peu comme l'alias) serait de définir la variable d'environnement TAR_OPTIONS supportée par GNU tar:

 $ export TAR_OPTIONS = "- use-compress-programme = pbzip2" 
 $ tar czf monfichier.tar.bz2 mysubdir /
13
user154053

Une option fascinante consiste à recompiler tar pour utiliser multithread par défaut. Copié de cette réponse stackoverflow

Recompiler avec remplacement

Si vous construisez tar à partir de sources, vous pouvez alors recompiler avec des paramètres

--with-gzip=pigz
--with-bzip2=lbzip2
--with-lzip=plzip

Après avoir recompilé tar avec ces options, vous pouvez vérifier la sortie de l'aide de 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
3
Tom Koch