Comment définissez-vous la taille du bloc bzip2 lorsque vous utilisez tar?

9

J'utilise tarpour sauvegarder un serveur Linux sur bande. J'utilise l' -joption pour compresser le fichier avec bzip2, mais je ne vois pas de moyen d'ajuster les options de taille de bloc pour bzip2 à partir de tar. La taille de bloc par défaut est de 900 000 octets, ce qui donne la meilleure compression mais est la plus lente. Je ne suis pas si gêné par le taux de compression, alors je cherche à faire fonctionner bzip2 plus rapidement avec une taille de bloc plus petite.

Guy C
la source
1
Sidenote: Dernièrement, j'ai tout sauf abandonné bzip2. J'utilise lzma (du package lzma, lzma-utils ou lzma-sdk, le nom dépend de votre distribution). un moyen.
Mihai Limbăşan

Réponses:

9
export BZIP=--fast
tar cjf foo.tar.bz2 foo

Ou dirigez la sortie de tarvers bzip2.

Bien que vous devriez noter à partir de la page de manuel de bzip2:

    -1 (ou --fast) à -9 (ou --best)
              Réglez la taille du bloc sur 100 k, 200 k .. 900 k lors de la compression.
              N'a aucun effet lors de la décompression. Voir GESTION DE LA MÉMOIRE ci-dessous.
              Les alias --fast et --best sont principalement pour la compatibilité GNU gzip-
              ibilité. En particulier, --fast ne rend pas les choses significatives.
              beaucoup plus rapide. Et --best sélectionne simplement le comportement par défaut.
Brian Campbell
la source
quelle alternative vous pouvez utiliser l'exportation BZIP = -9
Pol Hallen
4
tar -cjf dir.tar.bz2 --options bzip2:compression-level=9 path/to/dir/
steveayre
la source
Sur mon système (OSX El Capitan bsdtar 2.8.3), cela manque dans la page de manuel (bien que gzip: compression-level et xz: compression-level soient répertoriés), mais en le testant, l'option fonctionne.
steveayre
tar: unrecognized option '--options'
ZN13
2

bzip2 tailles de blocs

bzip2a quelques options de taille de bloc. Depuis la page de manuel bzip2(1):

-1 (or --fast) to -9 (or --best)
       Set the block size to 100 k, 200 k ..  900 k when compressing.
       Has no effect when decompressing. See MEMORY MANAGEMENT below.
       The --fast and --best aliases are primarily for GNU gzip
       compatibility. In particular, --fast doesn't make things
       significantly faster. And --best merely selects the default
       behaviour.

Comme vous voulez une compression plus rapide avec moins de respect pour le taux de compression, en utilisant bzip2, vous semblez vouloir l' option -1(ou --fast).

Définition de la bzip2taille de bloc lors de l'utilisationtar

Vous pouvez définir la bzip2taille du bloc lors de l'utilisation tarde plusieurs manières.

La voie UNlX

Ma façon préférée, la méthode UNlX, est celle où vous utilisez chaque outil indépendamment et les combinez à travers des tuyaux.

$ tar --create [FILE...] | bzip2 -1 > [ARCHIVE].tar.bz2

Vous pouvez lire cela comme "créer .tar avec tar-> bzipez-le avec bzip2-> écrivez-le [ARCHIVE].tar.bz2".

Variable d'environnement

Il est également possible de définir des bzip2options via la variable d'environnement BZIP2. Depuis la page de manuel bzip2(1):

bzip2 will read arguments from the environment variables BZIP2 and BZIP,
in that order, and will process them before any arguments read from the
command line. This gives a convenient way to supply default arguments.

Donc, pour l'utiliser avec tar, vous pourriez par exemple faire:

$ BZIP2=-1 tar --create --bzip2 --file [ARCHIVE].tar.bz2 [FILE...]

Des alternatives plus rapides

bzip2utilise un algorithme de compression lente. Si vous êtes préoccupé par la vitesse, vous pouvez rechercher des algorithmes alternatifs, tels que ceux utilisés par gzipou lzop. Voici un bel article comparant les outils de compression: https://aliver.wordpress.com/2010/06/22/huge-unix-file-compresser-shootout-with-tons-of-datagraphs/

aude
la source
Il semble que vous ayez les connaissances nécessaires pour fournir une bonne réponse ici, mais pensez à lire Comment écrire une bonne réponse? dans notre centre d'aide, puis révisez la réponse. Vos commandes / code / paramètres peuvent être techniquement la solution, mais certaines explications sont les bienvenues. Merci d'avance.
HBruijn
1

Envoyez la tarsortie à stdoutpuis dirigez-la bzip2séparément:

% tar cvf - _file_ | bzip2 _opts_ > output.tar.bz2
Alnitak
la source
0

C'est encore plus simple:

% tar -cvf dir.tar path/to/dir/ && bzip2 -9 dir.tar
Andreas Spindler
la source
3
L'utilisation d'un fichier temporaire signifie que vous avez besoin de suffisamment d'espace sur le disque dur, plus de bande passante pour que tar écrive et bzip2 pour le lire. Cela peut sembler trivial pour de petites quantités de données, mais lorsque le répertoire en question contient plusieurs centaines de gigaoctets, cela peut devenir un vrai problème.
Ansgar Esztermann
Oui merci. Je sais que j'ai appris la raison profonde pour laquelle tara -zet -j. Ces options me semblaient plutôt pratiques. Mais ils peuvent sauver la situation.
Andreas Spindler