Pourquoi devrais-je tarer un seul fichier?

101

Dans mon entreprise, nous téléchargeons un instantané de la base de développement local sous forme de db.dump.tar.gzfichier. La compression est logique, mais l'archive ne contient qu'un seul fichier ( db.dump).

Y a-t-il un intérêt à archiver un seul fichier, ou est .tar.gz-ce un idiome aussi courant? Pourquoi pas juste .gz?

tête de jardin
la source
5
C'est juste une question de convention à mon avis. Quand les gens voient un fichier avec une extension gz, leur pensée par défaut est d'utiliser tar -zxvf. Mais pour ceux qui regardent le nom du fichier et constatent qu’il n’a pas .tgzd’extension, c’est parfaitement bien de gzip le fichier de vidage de la base de données. Comme je ne connais pas les algorithmes de compression en détail, je ne suis pas sûr que tar produise une compression sur des fichiers fragmentés tels que db dump, mais pour les fichiers en texte brut, le format gzip direct présente un très petit avantage en termes de taille par rapport au tarage en premier et à gzip. dans le fichier
MelBurslan
3
Tout ce que fera un seul fichier, c’est ajouter quelques blocs de métadonnées au début et à la fin du fichier. Les données de fichier réelles sont transmises via le fichier tar au compresseur sans aucune modification. Ainsi, pour un fichier volumineux, la différence de taille entre la compression et le tarage sera négligeable.
plugwash
Dans le passé, en essayant diverses méthodes de compression, je me suis avéré .tar.gzsupérieur à la plupart des autres méthodes courantes. Je .tarme souviens que c’était mieux que juste, mais je ne me souviens pas si c’était mieux que juste .gz. Ironiquement, le .cabformat de Window était la meilleure des méthodes que j'ai essayées, ce qui était très inattendu.
Pharap
@Pharap tarn'est pas un algorithme de compression, c'est un format d'archivage
gardenhead
1
@gardenhead Eh bien, cela expliquerait pourquoi cela n'a pas très bien fonctionné.
Pharap

Réponses:

163

Les avantages d'utiliser .tar.gzau lieu de .gzsont que

  • tarstocke plus de méta-données (autorisations UNIX, etc.) que gzip.
  • la configuration peut plus facilement être étendue pour stocker plusieurs fichiers
  • Les fichiers .tar.gz sont très courants, seuls les fichiers gzippés peuvent dérouter certains utilisateurs. (cf. commentaire MelBurslans )

Les frais généraux d'utilisation tarsont également très faibles.

Si ce n'est pas vraiment nécessaire, je ne recommande toujours pas de tarer un seul fichier. Il existe de nombreux outils utiles qui peuvent accéder directement à des fichiers simples compressés (tels que zcat, zgrepetc. - existant également pour bzip2et xz).

jofel
la source
35
Je n'ai pas considéré l'aspect méta-données. Très bon point
Gardenhead
5
Si je vois un .gz, mon premier instinct est de tar -zxf foo.gz. Se souvenir que gzip est même une commande prend quelques secondes de plus.
bgStack15
2
@ bgStack15 FWIW vous n'avez pas besoin de z(ou -d'ailleurs), la plupart des logiciels modernes tardétecteront automatiquement que le fichier doit être décompressé.
drewbenn
2
Par défaut gzip, le nom de fichier d'origine et l'horodatage sont stockés. Vous pouvez utiliser cette -Noption lors de la décompression pour les restaurer.
Ross Ridge
@RossRidge merci, j'ai encore enlevé le texte sur le nom de fichier original.
Jofel
63

En réalité, vous ne posez que la moitié de la question. L'autre question étant, "Pourquoi devrais-je compresser un fichier tar avec gzip?". Et la réponse n’est pas simplement que gziprend le fichier plus petit (dans la plupart des cas):

tar:

  • stocke le nom de fichier et les autres métadonnées : mode, identifiant du propriétaire, identifiant du groupe, taille du fichier, heure de modification
  • stocke une somme de contrôle (pour l'en-tête uniquement)

gzip:

  • peut stocker le nom de fichier d'origine, mais c'est optionnel
  • a une somme de contrôle CRC-32 sur les données d'origine
  • ça compresse le fichier

Avec seulement tarvous ne pouvez pas être sûr que vos données n'ont pas été corrompues. Avec seulement, gzipvous ne pouvez pas restaurer l'ID utilisateur / groupe, l'heure de modification et, éventuellement, le nom de fichier d'origine.

La combinaison est plus puissante que les commandes / formats individuels, car ils se complètent mutuellement .

Anthon
la source
Merci d'avoir clarifié cela! En lisant la tarpage wikipedia, j'ai mal compris la description, ce qui voulait dire que la somme de contrôle s’appliquait à l’ensemble du fichier.
Gardenhead
Cela me semble être la bonne réponse. J'ajouterais également quelques raisons supplémentaires que vous voudrez peut-être modifier si vous êtes d'accord. 1) il n'y a aucun coût supplémentaire pour l'administrateur pour .tgz par rapport à .tar ou .gz seuls: ils ne sont qu'une seule commande. 2) Les administrateurs sauvegardent, copient, déplacent, déplacent BEAUCOUP de fichiers, pour différentes raisons; Les sauvegardes de base de données ne sont que l'une d'entre elles. Ils peuvent utiliser le même flux de travail, les mêmes outils et les mêmes commandes, qu’ils sauvegardent un ou plusieurs fichiers. alors pourquoi specialcase utilisant la syntaxe de la commande gzip, dans le cas où il y a un fichier?
Dewi Morgan
30

Il y a un avantage assez grand d'utiliser uniquement les fichiers texte-gzip - le contenu peut être consulté directement avec les outils de ligne de commande comme less, zgrep, zcat.

ejdi
la source
point intéressant, mais la question est sur un instantané de base de données, peu susceptible d'être un fichier texte, et pas seulement-gzipped.
underscore_d
9
@underscore_d tous mes dumps de base de données (principalement mysql et pgsql) sont des dumps de texte, en partie parce qu'ils sont plus récupérables si quelque chose arrive à corrompre partiellement le dump, et en partie parce que je peux prétraiter n'importe quelle restauration avec les outils habituels (sed , awk, perl, etc) si j'en ai besoin. c'est-à-dire plus fiable et plus utile que les sauvegardes binaires. Le compromis est que les copies de texte ont tendance à être plus volumineuses (peu importe, l'espace disque est bon marché et que la compression est bonne) et que les restaurations sont nettement plus lentes (mais moins si vous intégrez la restauration dans une transaction).
cas
1
Quel est l'avantage de ces outils par rapport au simple fait de canaliser la sortie d'un décompresseur dans les outils ordinaires?
CodesInChaos
21

Je dirais qu'il est probable que les gens ne réalisent tout simplement pas qu'ils peuvent utiliser gzip / bzip2 / xz sans tar. Peut-être parce qu'ils proviennent d'un environnement DOS / Windows où il est normal que la compression et l'archivage soient intégrés dans un seul format ( ZIP , RAR , etc.).

L'utilisation de tar peut présenter de légers avantages dans certaines situations en raison du stockage de métadonnées ou de la possibilité d'ajouter des fichiers supplémentaires, mais présente également des inconvénients. Avec un simple fichier gzip / bzip2 / xz, vous pouvez le décompresser et diriger les données décompressées directement vers un autre outil (tel que votre base de données) sans jamais avoir à stocker les données décompressées sous forme de fichier sur le disque. Avec une tarball, c'est plus difficile.

plugwash
la source
2
Avec GNU tar, il suffit d’un commutateur -O pour sortir vers stdout, je ne dirais donc pas que c’est beaucoup plus difficile!
Hyde
5
Le premier paragraphe semble assez plausible pour les fichiers utilisant l' tgzextension. Cependant, le cas de l'OP utilise tar.gz- et si ces hypothétiques utilisateurs ex-Win / DOS sont un peu comme moi, la première chose qu'ils disent en regardant un tel fichier est: "Pourquoi a-t-il 2 extensions?". Ensuite, ils y font une recherche google et obtiennent rapidement la réponse, ce qui explique précisément que la tarcompression est distincte. ;-)
underscore_d
17

Il existe une différence importante qui pourrait rendre l’utilisation tarimportante dans certaines circonstances: outre les "métadonnées" mentionnées par @jofel dans sa réponse, tar enregistre le nom du fichier dans les archives. Lorsque vous l'extrayez, vous obtenez le nom de fichier d'origine, quel que soit le nom de l'archive.

Dans votre cas, l’archive tar et le fichier qu’elle contient ont les noms correspondants db.dump.tar.gzet db.tar, mais supposons que vous renommiez le fichier tar 20-Apr-16.dump.tgz, ou autre chose. Décompressez ceci avec tar xvfz, et vous obtenez db.dump. À titre de comparaison, décompressez 20-Apr-16.dump.gzet vous avez 20-Apr-16.dump. (Edit: comme indiqué dans les commentaires, gzip enregistre également le nom du fichier; il n’est normalement pas utilisé lors de la décompression). Une tararchive peut également contenir un chemin d'accès relatif qui place le fichier extrait dans un sous-répertoire.

Votre cas d'utilisation déterminera si ce type de persistance de nom de fichier est nécessaire, ou même souhaitée , ou si elle est réellement indésirable. Mais certainement, quelle que soit la compression, une tararchive se déplace différemment d’un fichier normal.

alexis
la source
6
gzip enregistre également le nom de fichier d'origine.
Psusi
8
Ouaip. Le nom est facultatif dans l'en-tête gzip (il n'y en aura évidemment pas si vous avez compressé la sortie en flux d'une commande) et la plupart des outils ne la restaurent pas par défaut (par exemple, vous devez utiliser gzip --nameexplicitement la décompression), mais vous n'avez pas besoin d'utiliser tar pour obtenir la persistance du nom de fichier.
Miles
Merci de l'avoir signalé, je ne le savais pas. Reste que, puisque ce n'est pas le comportement par défaut, le point essentiel est le suivant: La distribution d' un fichier au format tar conserve le nom de fichier d'origine (et éventuellement le chemin relatif), sans intervention du destinataire. Distribuer un fichier compressé (g) ne fonctionne pas.
Alexis
8

En plus de toutes les autres réponses, j'ai récemment créé une situation de script dans laquelle un seul fichier était attendu, mais un ancien employé a écrit les scripts avec la possibilité que plusieurs fichiers soient générés. Les fichiers ont donc été tarés et bzippés, puis transférés et développés.

Lorsque le processus a pris de l'ampleur, il a créé un fichier de 4,3 Go. Il a ensuite été transformé en un fichier .dump.001 en plus d'un fichier .dump. Tous les scripts ont continué à fonctionner.

C'est la paresse sysadmin proactive définie!

Criggie
la source
2

Je tar un seul fichier, pour le copier en préservant l'horodatage (qui est facilement oublié dans les téléchargements). Les autorisations et la propriété des fichiers sont moins importantes: le terme " téléchargement" s'applique aux systèmes mal intégrés.

Que ce soit tar ou non, il est de pratique courante de compresser le fichier pour accélérer les téléchargements - et d’éviter de manquer d’espace disque.

Thomas Dickey
la source
-1

Tar est particulièrement utile pour plusieurs fichiers non écrits dans un système de fichiers formel, comme cela a toujours été le cas. Si pour une raison quelconque il y a parfois 1 seul fichier à écrire, cela n’a aucune conséquence réelle. Je peux dd mon .tar.gz directement dans / dev / sdx sans tenir compte de la partition ou du système de fichiers. Cela peut aussi bien être du ruban adhésif.

Cela est généralement fait parce que le script ou le processus a été copié à partir du code d'héritage. Bien sûr, il n’ya pas besoin de tar si il n’ya qu’un seul fichier, mais cela laisse de la place à l’amélioration de plusieurs fichiers ......

Mckenzm
la source