Existe-t-il un archiveur de fichiers parallèle (comme tar)?

40

Existe-t-il une solution d'archivage parallèle des fichiers?

Tar, c'est bien, mais je n'utilise pas d'archives sur bande, et il est plus important pour moi que l'archivage se fasse rapidement (avec une compression telle que bzip2) puisque j'ai smp.

supercheetah
la source
7
tar est pour plus que de simples bandes. Le nom venait à l'origine de la bande, mais de nos jours, je vois qu'il est surtout utilisé pour placer des éléments dans un seul fichier à des fins de redistribution, tout en conservant les informations de structure de répertoire avec une compression facultative.
Kevin M
quelques outils de compression parallèles comparés ici vbtechsupport.com/1614 n'ont cependant pas encore trouvé de version parallèle de tar
p4guru
Aucune des réponses fournies (y compris celle acceptée) ne gère les répertoires , autant que je sache - ils traitent des fichiers . Je ne vois zipque pouvoir gérer des répertoires: |
Warren
1
En fait, ce que nous faisons habituellement est de regrouper les répertoires dans les tararchives, puis compresser le paquet en utilisant un compresseur de fichiers (comme gzip, pigz, etc.). Vous pouvez le faire en deux étapes, mais également en une seule , car ils peuvent travailler sur des flux de données à partir d'entrées / sorties standard. Les résultats sont très similaires zip, mais plus polyvalents.
Gerlos

Réponses:

36

Je pense que vous cherchez pbzip2:

PBZIP2 est une implémentation parallèle du compresseur de fichiers de tri par blocs bzip2 qui utilise des pthreads et permet une accélération quasi linéaire sur les machines SMP.

Consultez la page d'accueil du projet ou consultez votre référentiel de paquets préféré.

echox
la source
1
Vous pouvez également essayer pigzet pxzpour les implémentations parallèles de gzipet xz. Vous pouvez compresser en utilisant une commande comme tar c dir | pigz -c > dir.tar.gzet décompresser en utilisant pigz -cd dir.tar.gz | tar xf -.
gerlos
3
Les commandes d'aujourd'hui seraient tar -cf dir.tar.gz -I pigz diret tar -xf dir.tar.gz -I pigz. Aussi xzest fileté: utiliser XZ_OPT=-T0 tar -cJf dir.tar.gz diret XZ_OPT=-T0 tar -xJf dir.tar.gz.
Rich
21

7zip peut fonctionner sur plusieurs threads lorsque l' -mmtindicateur est spécifié, mais uniquement lors de la compression dans 7z-archives, qui offrent une excellente compression mais sont généralement plus lents que zip pour créer des archives. Faites quelque chose comme ça:

7z a -mmt foo.7z /opt/myhugefile.dat
fschmitt
la source
7z est un bon archiveur, avec un bon support pour contrôler les compromis entre le taux de compression et le temps de compilation / décomposition, un accès aléatoire par rapport à une meilleure compression, etc. Cependant, il ne stocke pas autant de métadonnées que tar, vous perdez le propriétaire / les autorisations.
Peter Cordes
Il semble que cette option est activée par défaut - au moins, je n’ai aucune augmentation de performance et la sortie de 7z a une ligne sur la quantité de cœurs de mon processeur dans les deux cas.
Andrey Starodubtsev
14

L'OP a posé des questions sur l'archivage parallèle et non sur la compression parallèle.

Si le matériel source provient d'un système de fichiers où différents répertoires / fichiers peuvent se trouver sur différents disques, ou même d'un seul disque rapide dépassant la vitesse de saisie du ou des outils de compression, il pourrait s'avérer avantageux de disposer de plusieurs flux d'entrée. entrer dans les couches de compression.

La question qui se pose est la suivante: à quoi ressemble le résultat d’une archive parallèle? Ce n'est plus un simple descripteur de fichier / stdout, mais un descripteur de fichier par thread.

Un exemple de ceci jusqu’à présent est le mode de vidage parallèle de Postgresql pg_dump, dans lequel il est vidé dans un répertoire, les threads travaillant sur l’ensemble des tables à sauvegarder (la file de travail avec plusieurs threads consommant la file).

Je ne suis pas sûr qu'il y ait des archiveurs parallèles qui soient courants. Il y avait un hack pour Solaris Tar à utiliser sur ZFS: http://www.maier-komor.de/mtwrite.html

Certains outils de sauvegarde dédiés permettent d'exécuter plusieurs threads, mais beaucoup d'autres ne font que diviser la charge de travail par répertoire à un niveau élevé.

robbat2
la source
11
tar --use-compress-program=pigz  ....

remplacez-le pigzpar votre programme de compression parallèle préféré. La raison d'utiliser tarest parce qu'il peut stocker le propriétaire, groupe, autorisations. Ces métadonnées sont souvent utiles (par exemple, restaurer une arborescence de répertoires dans un système complexe).

uDude
la source
4
tar -c --use-compress-programme = pigz -f monRépertoire.tar.gz monRépertoire /
markusN
1
Toutes les options, autant que je sache, peuvent être utilisées normalement avec l' -Ioption, qui est identique à --use-compress-program. Ainsi, par exemple, tar cvzf /some/dir/yournewarchive.tar.gz /directory/tobecompressed --exclude="/directo...."peut être appliqué à l’option multithread en utilisant pigzas tar -I pigz -cvf /some/dir/yournewarchive.tar.gz /directory/tobecompressed --exclude="/directo...". Ceci est la meilleure, la réponse la plus appropriée, IMHO. Merci @uDude! :)
ILMostro_7
10

pigz est une implémentation parallèle de gzip, mais ne peut réellement utiliser que plusieurs processeurs pour la compression, pas la décompression.

Jay Hacker
la source
2
A fait quelques expériences, et pigzsemble réellement être capable d'utiliser plusieurs threads également lors de la décompression. Essayez de comparer les sorties de time tar xf dir.tar.gzet de time pigz -cd dir.tar.gz | tar xf -(mon processeur 4 cœurs prend un peu moins de la moitié du temps).
gerlos
4
@gerlos L'utilisation timesur un pipeline ne fera que chronométrer la première commande. D'après la pigzdocumentation : "La décompression ne peut pas être mise en parallèle, du moins sans des flux de déflation spécifiques préparés à cet effet. Par conséquent, pigz utilise un seul thread (le thread principal) pour la décompression, mais créera trois autres threads pour la lecture, écriture et vérification des calculs, ce qui peut accélérer la décompression dans certaines circonstances. "
augurar
1
Il y a aussi pixz .
Marc.2377
8

tarest simplement un format d’archive très efficace pour dupliquer exactement les fichiers et préserver l’arborescence de répertoires et les attributs de fichier d’origine. TAR est très utile pour les sauvegardes, car tout est préservé. J'utilise pbzip2pour compresser les archives tar que j'utilise pour les sauvegardes du système avec de très bons résultats.

Cette commande devrait faire l'affaire.

tar -cpS "infile" | pbzip2 > "outfile"

pbzip2 peut être remplacé par un autre utilitaire de compression, mais sachez que la compression LZMA (comme pxz) utilise une tonne de RAM lors de la compression / décompression de fichiers volumineux (j'ai essayé d'exécuter 8 threads avec 8 Go de RAM et pxz a commencé à permuter sur le disque).

lovot
la source
4

Un autre concurrent est lbzip2. C'est assez similaire à pbzip2

Felipe Alvarez
la source
1

En ce qui concerne la compression, la xzversion 5.2 prend en charge la compression parallèle via l’ -Toption.

Peterph
la source