48 votes

Quelle est la différence entre les formats de fichiers d'archives TAR et CPIO ?

Je suis curieuse et j'ai fait quelques lectures, mais j'ai encore des questions.

Qu'est-ce qui différencie CPIO de TAR ? On m'a dit dans une autre question que tar sert à rassembler de nombreux fichiers en une seule archive qui est ensuite généralement gzipée ou bzipée.

On m'a également dit que TAR ne pouvait pas compresser à partir de STDOUT. Je souhaite archiver / compresser des instantanés ZFS pour les sauvegardes. Je me demandais si je pouvais combiner CPIO avec bzip2 pour obtenir cet effet.

Ou est-ce que je me trompe complètement ? N'est-ce pas là l'objectif du CPIO ?

C'est le genre de commandes que j'ai trouvées après avoir lu la documentation d'Oracle sur la sauvegarde des snapshots ZFS.

# Backup snapshot to cpio and bzip2 archive
zfs send media/mypictures@20070607 | cpio -o | bzip2 -9c > ~/backups/20070607.bz2

# Restore snapshot from cpio and bzip2 archive
zfs recieve media/mypictures@20070607 | cpio -i | bunzip2 -c ~/backups/20070607.bz2

70voto

ktf Points 2308

En complément de ce qui a été dit précédemment par grawity y Paul :

L'histoire

Dans le passé, cpio (avec option -c utilisé) a été les à utiliser pour déplacer des fichiers vers d'autres dérivés d'UNIX, car il était plus portable et plus flexible que goudron . Mais le goudron On peut considérer que les problèmes de portabilité sont résolus depuis la fin des années 1980.

Malheureusement, c'est à peu près à cette époque que différents vendeurs ont modifié le système. -c format de cpio (il suffit de consulter la page de manuel de GNU cpio et l'option -H ). À l'époque, le goudron sont devenues plus portables que les cpio ... Il a fallu presque une décennie entière pour que les différents fournisseurs d'UNIX règlent ce problème. Ayant GNU tar y GNU cpio installé était indispensable pour tous les administrateurs qui devaient gérer des bandes provenant de différentes sources à l'époque (et encore aujourd'hui, je suppose).

Interface utilisateur

goudron peut utiliser un fichier de configuration de bande dans lequel l'administrateur configure les lecteurs de bande connectés au système. L'utilisateur n'a plus qu'à dire "Je prends le lecteur de bande 1" au lieu de devoir se souvenir du nœud de périphérique exact de la bande (ce qui peut être très déroutant et n'est pas non plus standardisé sur les différentes plates-formes UNIX).

Mais la principale différence est la suivante :

goudron est capable d'effectuer des recherches dans les répertoires de manière autonome et prend la liste des fichiers ou des répertoires à sauvegarder dans les arguments de la ligne de commande.

cpio n'archive que les fichiers ou les répertoires qui lui sont demandés, mais n'effectue pas de recherche récursive dans les sous-répertoires. En outre, le cpio obtient la liste des éléments à archiver à partir de stdin - C'est pourquoi il est presque toujours utilisé en combinaison avec trouver .

A cpio La commande semble souvent effrayante pour le débutant si elle est comparée à la commande goudron :

 $ find myfiles -depth -print0 | cpio -ovc0 | gzip -7 > myfiles.cpio.gz
 $ tar czvf myfiles.tar.gz myfiles

Je pense que c'est la raison principale pour laquelle la plupart des gens utilisent goudron pour créer des fichiers d'archives : Pour les tâches simples comme le regroupement d'un répertoire complet, il est tout simplement plus facile à utiliser.

En outre GNU tar offre la possibilité -z ce qui entraîne la compression de l'archive avec GNU zip à la volée, ce qui rend les choses encore plus faciles.

D'autre part, il est possible de faire des choses intéressantes avec trouver & cpio . En fait, il s'agit d'une approche plus proche de celle d'UNIX : Pourquoi inclure la recherche dans l'arborescence des répertoires dans cpio s'il existe déjà un outil qui prend en charge presque tout ce à quoi on peut penser : trouver . On pense notamment à ne sauvegarder que les fichiers plus récents qu'une certaine date, à limiter les fichiers à ceux qui résident dans le même système de fichiers ou à filtrer les résultats de la recherche avec la fonction grep -v pour exclure certains fichiers...

Le peuple de GNU tar a fait beaucoup d'efforts pour inclure un grand nombre de ces choses qui n'étaient auparavant possibles qu'avec la cpio . En fait, les deux outils ont appris l'un de l'autre - mais seulement cpio peut lire le format de goudron - et non l'inverse.

goudron et le traitement des résultats

Une dernière remarque sur ce que vous avez dit :

On m'a également dit que TAR ne peut pas compresser à partir de STDOUT. Je veux archiver / compresser des instantanés ZFS pour les sauvegardes. [ ] CPIO avec bzip2 pour obtenir cet effet.

Eh bien, toutes les versions de goudron (GNU ou non) peuvent être utilisés dans un tube. Il suffit d'utiliser le signe moins ( - ) comme nom d'archive :

 $ tar cvf - myfiles | bzip > myfiles.tar.bz

En outre GNU tar offre la possibilité --to-command pour spécifier une commande du postprocesseur - bien que je préfère encore le pipe. Cela peut être utile pour écrire sur certains périphériques matériels.

6voto

Oliver Points 125

Tar et cpio ont essentiellement la même fonction, qui consiste à créer un seul fichier contigu à partir d'un ensemble de fichiers et de répertoires. À l'origine, il s'agissait de mettre le résultat sur bande, mais de nos jours, il est généralement utilisé pour alimenter un utilitaire de compression comme celui que vous avez décrit ci-dessus. En effet, la compression d'un seul gros fichier est plus efficace en termes de temps et d'espace que la compression d'un grand nombre de petits fichiers. Il convient de noter que de nombreux formats d'image (png, jpg, etc.) sont déjà fortement compressés et peuvent en fait grossir un peu plus s'ils sont soumis à un utilitaire de compression.

Ni tar ni cpio n'effectuent de compression. Tar a effectivement "gagné" la guerre "que devons-nous utiliser pour créer des fichiers agrégés", mais cpio fait l'objet d'une attention particulière dans divers endroits. Je ne connais aucun avantage de l'un par rapport à l'autre, tar l'emporte parce qu'il est plus couramment utilisé.

tar peut en effet prendre une entrée sur stdin et une sortie sur stdout - qui serait ensuite acheminée vers bzip2 comme vous l'avez fait ou quelque chose de similaire. S'il est appelé avec l'option "z", il invoquera automatiquement gzip sur la sortie.

6voto

Lynn Points 51

J'ai demandé à un technicien de HP, vers 1996, pourquoi utiliser cpio plus tar .

On m'a dit que les bandes s'étiraient et s'usaient. Quand tar atteint une partie illisible de la bande, il échoue et renvoie un numéro d'erreur. Lorsque cpio atteint une partie illisible, il passe au bloc lisible suivant, se resynchronise et continue.

Je n'ai jamais vu de documentation à l'appui, mais j'ai toujours utilisé cpio .

5voto

trombonehero Points 41

A noter également : sous FreeBSD et Mac OS X (au moins), vous pouvez manipuler les fichiers cpio avec tar. BSD tar utilise libarchive sous le capot, il peut donc gérer cpio, pax, shar...

Cela signifie que les problèmes d'utilisation de l cpio ne doit pas vous empêcher d'interagir avec les fichiers cpio.

4voto

haridsv Points 569

Bien que les réponses ici soient déjà comparables cpio y tar Je voudrais souligner l'un des points suivants cpio Le mode pipeline permet de copier plus efficacement des fichiers sélectifs (par exemple, via le mode find et filtre) tout en préservant leur structure de répertoire. Cette fonctionnalité est bien documenté et son principe de base est le suivant :

find . <predicates> | cpio -pdmv /destination/dir

L'équivalent avec tar serait de l'ordre de ce qui suit :

find . <predicates> | tar -T - -cf - | (cd /destination/dir; tar xvf -)

Il existe bien sûr d'autres alternatives telles que rsync y cp --parents discuté dans un autre fil mais rien n'est comparable à la flexibilité offerte par la combinaison de find y cpio . Avec tar étant omniprésente pour la création d'archives, c'est la seule raison pour laquelle j'utilise toujours cpio .

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