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

2voto

Charlie Points 17807

Il n'indexe pas à ma connaissance, mais j'utilise le dump & restore avec des fichiers volumineux, et naviguer dans l'arbre de restauration en mode interactif pour sélectionner des fichiers aléatoires est TRÈS rapide.

2voto

complistic Points 141

Vous pouvez utiliser le format d'archivage/de compression 7z (7zip) si vous avez accès à l'utilitaire p7zip-full paquet.

Sur Ubuntu, vous pouvez utiliser cette commande pour l'installer :

$ sudo apt-get install p7zip-full

Pour créer une archive, vous pouvez utiliser 7z a <archive_name> <file_or_directory> et si vous ne voulez pas compresser les fichiers et souhaitez simplement les "stocker" tels quels, vous pouvez utiliser la fonction -mx0 option comme :

$ 7z a -mx0 myarchive.7z myfile.txt

Creating archive myarchive.7z

Vous pouvez ensuite extraire les fichiers en utilisant 7z e :

$ 7z e myarchive.7z

Processing archive: myarchive.7z
Extracting  myfile.txt

Ou vous pouvez lister l'index de l'archive avec la commande 7z l ce qui est pratique pour la recherche avec grep :

$ 7z l myarchive.7z | grep

2014-07-08 12:13:39 ....A            0            0  myfile.txt

C'est aussi le t pour tester l'intégrité, u pour ajouter/mettre à jour un fichier dans l'archive, et d pour supprimer un fichier.

NOTE IMPORTANTE
Faites no utilisez le format 7zip pour les sauvegardes de systèmes de fichiers linux car il ne stocke pas le propriétaire et le groupe des fichiers contenus.

0 votes

Pour Linux, il est possible d'utiliser 7zip pour un fichier tar.

0 votes

@ThorbjørnRavnAndersen cela irait à l'encontre de l'intérêt d'être indexable.

1voto

Je pense que GNU tar est capable de faire ce que vous voulez, mais je ne peux pas trouver une ressource définitive qui le dise.

Dans tous les cas, vous avez besoin d'un format d'archivage avec un index (puisque cela vous permettra de faire ce que vous voulez). Je ne pense pas que les fichiers ZIP puissent atteindre une telle taille, malheureusement.

0 votes

Les fichiers ZIP peuvent grossir grand .

1 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.

2 votes

@Pacerier D'après ce que j'ai compris, le format ZIP64 autorise les fichiers de très grande taille, mais pas le format ZIP original.

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