Le moyen le plus rapide d'extraire tar.gz

42

Est-il possible d'extraire un fichier tar.gz plus rapidement que tar -zxvf filenamehere?

Nous avons de gros fichiers et essayons d'optimiser l'opération.

Justin
la source
2
Trouvez-vous que la $ tar -zxvfméthode est liée à IO ou CPU?
EEAA
1
Croire CPU, comment puis-je vérifier?
Justin
5
Pas directement lié, mais « z » n'a pas été nécessaire depuis 2004 / tar v1.1.5 gnu.org/software/tar/#TOCreleases :)
JamesHannah

Réponses:

57

pigz est une version parallèle de gzip. Bien qu'il n'utilise qu'un seul thread pour la décompression, il lance 3 threads supplémentaires pour la lecture, l'écriture et le calcul de contrôle. Vos résultats peuvent varier, mais nous avons constaté une amélioration significative de la décompression de certains de nos ensembles de données. Une fois que vous avez installé pigz, le fichier tar peut être extrait avec:

pigz -dc target.tar.gz | tar xf -

TimS
la source
11
+1 FWIW, vous pouvez aussi écrire cela en tant que tar -xvf --use-compress-program=pigz filenamehere. ( -zéquivaut à --use-compress-program=gzip.) Sinon, vous pouvez même créer gzipun lien symbolique vers pigz, et continuer à utiliser -zxvf.
Ruakh
2
@ruakh, j'ai dû mettre -xfaprès --use-compress-program=pigz, ou j'ai eu une erreur. Pour une raison quelconque, ce n'était pas plus rapide que d'utiliser gzip.
Jonderry
Car bzip2il y a pbzip2( ppour parallèle). tar --use-compress-program=pbzip2 -xvf file.tar.bz2.
alfC
Existe-t-il un moyen d'utiliser la pvcommande pour afficher une progression, ou un équivalent, tout en utilisant le --use-compress-program=pigzdrapeau? Pendant la compression, je peux le faire gnutar --use-compress-program="pigz | pv" -cf target.tar.gz YourData, mais je ne suis pas sûr de savoir comment le faire pendant la décompression / décompression.
Stefan Lasiewski
13

s'il y a beaucoup de petits fichiers dans la boule de tar, annulez le paramètre 'v', essayez à nouveau!

anonyme
la source
3
Je n'utilise jamais -v param. Je ne sais pas pourquoi les gens ont besoin de tant de bruit dans la console.
Eimantas
9
@Eimantas Lorsque vous décomposez un élément contenant de nombreux fichiers de plusieurs gigaoctets, vous souhaitez obtenir une indication de ses progrès. :)
Michael Hampton
@ Timhughes: c'est vraiment bon à savoir, s'il vous plaît poster comme une réponse séparée!
smci
Michael Hampton, si vous avez des fichiers de plusieurs gigaoctets mais que vous mélangez avec une grande liste de petits fichiers, vous avez une bonne raison de ne pas utiliser -v. Dans mes tests locaux, la tâche tar est très lente, surtout si tar est exécuté sur un serveur distant. via terminal, ce que je fais est de regarder le répertoire du -s pour que je puisse regarder le répertoire grandir ...
Luciano Andress Martini
Il peut être intéressant d’utiliser --checkpoint=NUMBER( affiche les messages de progression à chaque NUMBERème enregistrement ) au lieu de -v.
Stefan Lasiewski
6

Si vous voulez voir des progrès, utilisez quelque chose comme pv. Voici un exemple:

pigz -dc mysql-binary-backup.tar.gz | pv | tar xf -
Tim Hughes
la source