La séance de questions et réponses d’aujourd’hui nous est offerte par SuperUser, une sous-division de Stack Exchange, un groupe de sites Web de questions-réponses dirigé par la communauté.
La question
Le lecteur de SuperUser, MarcusJ, s’interroge sur le format de tar et pourquoi nous l’utilisons toujours après toutes ces années:
I know that tar was made for tape archives back in the day, but today we have archive file formats that both aggregate files and perform compression within the same logical file format.
Questions:
- Is there a performance penalty during the aggregation/compression/decompression stages for using tar encapsulated in gzip or bzip2, when compared to using a file format that does aggregation and compression in the same data structure? Assume the runtime of the compressor being compared is identical (e.g. gzip and Deflate are similar).
- Are there features of the tar file format that other file formats, such as.7z and.zip do not have?
- Since tar is such an old file format, and newer file formats exist today, why is tar (whether encapsulated in gzip, bzip2 or even the new xz) still so widely used today on GNU/Linux, Android, BSD, and other such UNIX operating systems, for file transfers, program source and binary downloads, and sometimes even as a package manager format?
C’est une question parfaitement raisonnable; Tant de choses ont changé dans le monde informatique au cours des trente dernières années, mais nous utilisons toujours le format tar. C'est quoi l'histoire?
La réponse
Allquixotic, contributeur de SuperUser, donne un aperçu de la longévité et des fonctionnalités du format tar:
Part 1: Performance
Here is a comparison of two separate workflows and what they do.
You have a file on disk
blah.tar.gz
ce qui correspond, par exemple, à 1 Go de données compressées par gzip qui, lorsqu'elles sont décompressées, occupent 2 Go (soit un taux de compression de 50%).
La manière dont vous créeriez ceci, si vous archiviez et compressiez séparément, serait la suivante:
tar cf blah.tar files …
Cela se traduirait par
blah.tar
qui est une simple agrégation de la
files …
sous forme non compressée.
Alors tu ferais
gzip blah.tar
Cela lirait le contenu de
blah.tar
depuis le disque, compressez-les via l'algorithme de compression gzip, écrivez le contenu dans
blah.tar.gz
puis dissociez (supprimez) le fichier
blah.tar
Maintenant, décompressons!
Voie 1
Tu as
blah.tar.gz
D'une façon ou d'une autre.
Vous décidez de courir:
gunzip blah.tar.gz
Cette volonté
-
LISEZ le contenu compressé de 1 Go de
blah.tar.gz
-
TRAITER les données compressées à travers le
gzip
décompresseur en mémoire.
-
Au fur et à mesure que la mémoire tampon se remplit avec «un bloc» de données, ÉCRIVEZ les données non compressées dans le fichier.
blah.tar
sur le disque et répéter jusqu'à ce que toutes les données compressées soient lues.
-
Dissocier (supprimer) le fichier
blah.tar.gz
Maintenant vous avez
blah.tar
sur disque, non compressé mais contenant un ou plusieurs fichiers, avec une surcharge de structure de données très faible. La taille du fichier est probablementquelques octets plus grande que la somme de toutes les données du fichier.
Vous courez:
tar xvf blah.tar
Cette volonté
-
LISEZ les 2 Go de contenu de données non compressé de
blah.tar
et le
tar
structures de données du format de fichier, y compris des informations sur les autorisations de fichier, les noms de fichier, les répertoires, etc.
- ECRIVEZ sur disque les 2 Go de données plus les métadonnées. Cela implique: la traduction des informations de structure de données / métadonnées en création de nouveaux fichiers et répertoires sur le disque, le cas échéant, ou la réécriture de fichiers et de répertoires existants avec un nouveau contenu de données.
Le total des données que nous LIS du disque dans ce processus était de 1 Go (pour gunzip) + 2 Go (pour le goudron) = 3 Go.
Le total des données que nous A ÉCRIT sur le disque dans ce processus était de 2 Go (pour gunzip) + 2 Go (pour les fichiers tar) + quelques octets pour les métadonnées = environ 4 Go.
Voie 2
Tu as
blah.tar.gz
D'une façon ou d'une autre.
Vous décidez de courir:
tar xvzf blah.tar.gz
Cette volonté
-
LISEZ le contenu compressé de 1 Go de
blah.tar.gz
un bloc à la fois, en mémoire.
-
TRAITER les données compressées à travers le
gzip
décompresseur en mémoire.
-
Au fur et à mesure que la mémoire tampon se remplit, tuyau ces données, en mémoire, à travers le
tar
analyseur de format de fichier, qui lira les informations sur les métadonnées, etc., ainsi que les données de fichier non compressées.
- Comme la mémoire tampon se remplit dans la
tar
analyseur de fichiers, il écrit les données non compressées sur le disque en créant des fichiers et des répertoires et en les remplissant avec le contenu non compressé.
Le total des données que nous LIS de disque dans ce processus était 1 Go de données compressées, période.
Le total des données que nous A ÉCRIT sur le disque dans ce processus était 2 Go de données non compressées + quelques octets pour les métadonnées = environ 2 Go.
Si vous remarquez, la quantité d'E / S de disque dans Voie 2 estidentique au disque I / O effectué par, par exemple, le
Zip
ou
7-Zip
programmes, en tenant compte des différences de taux de compression.
Et si le taux de compression vous préoccupe, utilisez le
Xz
compresseur à encapsuler
tar
et vous avez l'archive TAR de LZMA2, qui est aussi efficace que l'algorithme le plus avancé disponible pour
7-Zip
:-)
Partie 2: Caractéristiques
tar
stocke les autorisations UNIX dans ses métadonnées de fichier. Il est très bien connu et testé pour compacter avec succès un répertoire avec toutes sortes d'autorisations différentes, des liens symboliques, etc. Il existe plusieurs cas où il peut être nécessaire d'insérer un groupe de fichiers dans un seul fichier ou flux, mais pas nécessairement le compresser (bien que la compression soit utile et souvent utilisée).
Partie 3: Compatibilité
De nombreux outils sont distribués sous forme binaire ou source sous la forme de fichiers.tar.gz ou.tar.bz2 car il s’agit d’un format de fichier «plus petit commun dénominateur»: comme la plupart des utilisateurs Windows ont accès aux décompresseurs.zip ou.rar, la plupart des installations Linux, même les plus élémentaires auront au moins accès à tar et à gunzip, quel que soit leur âge ou leur finesse. Même les firmwares Android ont accès à ces outils.
Les nouveaux projets ciblant des publics utilisant des distributions modernes peuvent très bien être distribués dans un format plus moderne, tel que.tar.xz (utilisant le format de compression Xz (LZMA), qui compresse mieux que gzip ou bzip2), ou.7z, similaire à les formats de fichier Zip ou Rar dans la mesure où il compresse et spécifie une présentation pour encapsuler plusieurs fichiers dans un seul fichier.
Vous ne voyez pas l’utilisation plus fréquente de.7z pour la même raison que la musique n’est pas vendue dans les magasins de téléchargement en ligne dans de nouveaux formats comme Opus, ou que la vidéo dans WebM. Compatibilité avec les utilisateurs de systèmes anciens ou très basiques.
Avez-vous quelque chose à ajouter à l'explication? Sound off dans les commentaires.Voulez-vous lire plus de réponses d'autres utilisateurs de Stack Exchange doués en technologie? Découvrez le fil de discussion complet ici.