104 votes

Comment obtenir une compression maximale avec .tar.gz ?

La façon dont je comprends l'utilisation de tar + gzip est que tar est normalement utilisé pour consolider un groupe de fichiers en un seul fichier, puis gzip est utilisé pour compresser ce fichier.

J'ai appris récemment que tar peut aussi compresser.

Comme je ne comprends pas entièrement le fonctionnement de la compression @ son cœur, j'ai des craintes (peut-être ridicules) que l'envoi d'un .tar pré-compressé à gzip puisse empêcher gzip de compresser aussi bien que son potentiel le permettrait et d'autres choses de cette nature.

Ma question est essentiellement la suivante : Quelle combinaison d'arguments et de méthodes de compression dois-je utiliser pour créer le tar.gz le plus petit possible, et à quoi ressemble la ligne de commande pour cela ?

167voto

Brian Fane Points 1506

Ou bien, vous pouvez dire à tar d'utiliser la compression maximale de cette façon :

export GZIP=-9
tar cvzf file.tar.gz /path/to/directory

De plus, pour que vos envvars ne soient pas encombrés, vous pouvez faire ceci :

env GZIP=-9 tar cvzf file.tar.gz /path/to/directory

69voto

ISW Points 4427

Comme vous l'avez dit, " boîte de goudron également compresser ", implique que - tar n'est pas siempre compresser les données par lui-même. Il ne le fait que lorsqu'il est utilisé avec la fonction z option. Et ce, non pas par elle-même, mais en faisant passer les données goudronnées par gzip.

Cependant, au lieu de cela, comme indiqué dans este vous pouvez combiner les deux commandes : tar & gzip de telle sorte que vous puissiez spécifier explicitement le niveau de compression pour le fichier gzip pour obtenir la plus petite taille de sortie.

tar cvf - /path/to/directory | gzip -9 - > file.tar.gz

Aquí 9 spécifie le niveau de compression maximal possible.

23voto

gmatht Points 2279

En général, ni gzip ni tar ne peuvent créer "le plus petit tar.gz absolu". Il existe de nombreux utilitaires de compression qui peuvent compresser au format gz. J'ai écrit un bash script " gz99 " pour essayer gzip , 7z y advdef pour obtenir le plus petit fichier. Pour utiliser ceci afin de créer le plus petit fichier possible, exécutez :

tar c path/to/data | gz99 file.gz

El advdef d'AdvanceCOMP donne généralement le fichier le plus petit, mais il est aussi bogué (l'utilitaire gz99 vérifie qu'il n'a pas corrompu le fichier avant d'accepter la sortie de l'utilitaire advdef ). Pour utiliser advdef directement, créez fichier.tar.gz comme vous le souhaitez. Puis lancez :

advdef -z -4 file.tar.gz

Cela créera un fichier gz standard qui peut être lu par gzip et tar comme d'habitude, juste un peu plus petit. C'est à peu près le mieux que vous puissiez faire avec le format gz.

Comme vous n'avez appris que récemment que tar peut compresser, et que vous n'avez pas dit pourquoi vous vouliez le plus petit fichier ".tar.gz", vous ne savez peut-être pas qu'il existe des formats plus efficaces pour les fichiers tar, comme xz. En général, le passage à un format différent peut donner une bien meilleure amélioration de la compression que de jouer avec les options de gzip. Le principal inconvénient de xz est qu'il n'est pas aussi courant que gzip, de sorte que les personnes à qui vous envoyez le fichier devront peut-être installer un nouveau paquet. Il a également tendance à être un peu plus lent, en particulier lors de la compression. Si cela n'a pas d'importance pour vous, et que vous voulez vraiment le plus petit fichier tar, essayez :

 tar cv path/to/data | xz -9 > file.tar.xz

Les versions modernes de tar, par exemple sur Ubuntu 13.10, détectent automatiquement les fichiers compressés. Ainsi, même si vous utilisez la compression xz, vous pouvez toujours décompresser comme d'habitude :

 tar xvf file.tar.xz

Pour donner une idée rapide de la façon dont ces utilitaires de compression se comparent, considérez l'effet de la compression du patch-3.1.1 du noyau linux :

utility         cpu    format  size(bytes)
gzip -9         0.02s  gz      105,628
advdef -2       0.07s  gz      102,619
7z -mx=9 -tgzip 0.42s  gz      102,297
advdef -3       0.55s  gz      102,290
advdef -4       0.75s  gz      101,956
xz -9           0.03s  xz       91,064
xz -3e          0.15s  xz       90,996

Dans cet exemple trivial, nous voyons que pour obtenir le plus petit gz nous avons besoin de advdef (bien que 7z -tgzip soit presque aussi bon et beaucoup moins bogué). Nous voyons aussi que passer à xz nous fait gagner beaucoup plus d'espace que d'essayer de tirer le maximum de l'ancien format gz, sans que la compression prenne trop de temps.

13voto

carlito Points 649
tar c /path/to/data | gzip --best > file.tar.gz

gzip option --best (équivalent à -9 ) demande le niveau de compression le plus élevé.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X