32 votes

Existe-t-il un tar ou un cpio plus intelligent pour récupérer efficacement un fichier stocké dans l'archive ?

J'utilise tar pour archiver un groupe de fichiers très volumineux (plusieurs Go). bz2 des fichiers.

Si j'utilise tar -tf file.tar pour lister les fichiers de l'archive, cela prend beaucoup de temps (~10-15 minutes).

De même, cpio -t < file.cpio prend tout autant de temps, plus ou moins quelques secondes.

Par conséquent, la récupération d'un fichier dans une archive (par l'intermédiaire de tar -xf file.tar myFileOfInterest.bz2 par exemple) est aussi lent.

Existe-t-il une méthode d'archivage qui conserve un "catalogue" facilement accessible avec les archives, de sorte qu'un fichier individuel dans les archives puisse être retrouvé rapidement ?

Par exemple, une sorte de catalogue qui stocke un pointeur vers un octet particulier de l'archive, ainsi que la taille du fichier à récupérer (et toute autre particularité propre au système de fichiers).

Existe-t-il un outil (ou un argument pour tar o cpio ) qui permet de retrouver efficacement un fichier dans les archives ?

0 votes

Comme d'autres l'ont dit, la plupart des formats d'archives autres que tar utilisent un index, vous pouvez également créer un index externe pour les tar-s non compressés ; serverfault.com/a/1023249/254756

21voto

cas Points 6563

Tar (et cpio, afio, pax et d'autres programmes similaires) sont des formats orientés flux - ils sont destinés à être transmis directement à une bande ou à être transmis à un autre processus. alors qu'en théorie, il serait possible d'ajouter un index à la fin du fichier/du flux, je ne connais pas de version qui le fasse (ce serait une amélioration utile cependant).

cela ne vous aidera pas avec vos archives tar ou cpio existantes, mais il existe un autre outil, dar ("disk archive"), qui crée des fichiers d'archives contenant un tel index et peut vous donner un accès direct et rapide aux fichiers individuels dans l'archive.

Si dar n'est pas inclus dans votre distribution unix/linux, vous pouvez le trouver à l'adresse suivante :

http://dar.linux.free.fr/

0 votes

Existe-t-il un moyen de diriger une extraction vers la sortie standard ? Il semble qu'il y ait un moyen de créer une archive à partir de l'entrée standard, mais pas un moyen (du moins pas directement) d'extraire vers la sortie standard. La documentation n'indique pas clairement s'il existe un moyen de le faire. Savez-vous comment cela peut être réalisé ?

1 votes

Non, je ne sais pas. Je n'utilise pas vraiment dar moi-même... je sais juste qu'il existe. je suis assez heureux avec tar, et j'ai tendance à créer des fichiers texte listant le contenu des gros fichiers tar que je pourrais vouloir rechercher plus tard. vous pouvez le faire en même temps que la création de l'archive tar en utilisant deux fois l'option v (par exemple "tar cvvjf /tmp/foo.tar.bz2 /path/to/backup > /tmp/foo.txt")

12voto

MauganRa Points 211

Vous pourriez utiliser SquashFS pour de telles archives. Il s'agit

  • conçu pour être accessible à l'aide d'un pilote de fusible (bien qu'une interface traditionnelle existe)
  • compressé (plus la taille du bloc est grande, plus il est efficace)
  • inclus dans le noyau Linux
  • stocke les UIDs/GIDs et le temps de création
  • sensible à l'endive, donc tout à fait portable

Le seul inconvénient que je connaisse est qu'il est en lecture seule.

http://squashfs.sourceforge.net/ http://www.tldp.org/HOWTO/SquashFS-HOWTO/whatis.html

8voto

jason saldo Points 5036

Bien qu'il ne stocke pas d'index, star est censé être plus rapide que tar . De plus, il prend en charge les noms de fichiers plus longs et supporte mieux les attributs de fichiers.

Comme vous le savez certainement, la décompression du fichier prend du temps et serait probablement un facteur dans la vitesse d'extraction même s'il y avait un index.

Editar: Vous pouvez également jeter un coup d'œil à xar . Il comporte un en-tête XML qui contient des informations sur les fichiers de l'archive.

De la page référencée :

L'en-tête XML de Xar lui permet de contenir des métadonnées arbitraires sur les fichiers contenus dans l'archive. Outre les métadonnées standard des fichiers Unix, telles que la taille du fichier et les heures de modification et de création, Xar peut stocker des informations telles que les bits des fichiers ext2fs et hfs, les drapeaux Unix, les références aux attributs étendus, les informations du Finder de Mac OS X, les fourchettes de ressources de Mac OS X et les hachages des données du fichier.

0 votes

+1 pour m'avoir signalé l'existence d'un outil utile dont je n'avais jamais entendu parler auparavant.

0 votes

Lien de star est en panne......

6voto

Ryan Sampson Points 2898

Le seul format d'archive que je connaisse qui stocke un index est le ZIP, car j'ai dû reconstruire des index corrompus plus d'une fois.

5voto

Aidas Kasparas Points 67

Thorbjørn Ravn Anderser a raison. GNU tar crée des archives "recherchables" par défaut. Mais il n'utilise pas cette information lorsqu'il lit ces archives si l'option -n n'est pas donnée. Avec l'option -n, je viens d'extraire un fichier de 7 Go d'une archive de 300 Go dans le temps nécessaire pour lire/écrire 7 Go. Sans l'option -n, cela a pris plus d'une heure et n'a donné aucun résultat.

Je ne suis pas sûr de l'effet de la compression sur ce point. Mon archive n'a pas été compressée. Les archives compressées ne sont pas "recherchables" parce que l'actuel (1.26) GNU tar décharge la compression sur un programme externe.

0 votes

Selon la page de manuel de tar man7.org/linux/man-pages/man1/tar.1.html Si l'archive est consultable, il l'utilisera en lecture (pour l'extraction ou la liste). Si vous utilisez GNU tar et que vous rencontrez toujours ce problème, vous devriez déposer un rapport de bogue auprès de GNU.

11 votes

Si je lis correctement le manuel, il ne dit jamais qu'il a une sorte d'index et peut sauter à n'importe quel fichier dans l'archive en donnant le nom du fichier. --seek signifie simplement que le support sous-jacent est recherchable, de sorte que lorsqu'il lit depuis le début, il peut sauter la lecture du contenu du fichier, mais il doit toujours lire les en-têtes d'entrée depuis le début. Ceci dit, si vous avez une archive avec 1M de fichiers, et que vous essayez d'extraire le dernier, avec --no-seek, vous devez lire le contenu de tous les fichiers ; avec --seek, vous n'avez besoin de lire que 1M d'en-têtes, un pour chaque fichier, mais c'est toujours super lent.

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