Partie 1: Performance
Voici une comparaison de deux workflows distincts et de ce qu’ils font.
Vous avez un fichier sur disque blah.tar.gz
qui représente, par exemple, 1 Go de données compressées au format gzip et occupant 2 Go (non compressé) (donc 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 aboutirait à blah.tar
une simple agrégation de la files ...
forme non compressée.
Alors tu ferais
gzip blah.tar
Cela permettrait de lire le contenu blah.tar
du disque, de le compresser via l'algorithme de compression gzip, d'écrire le contenu dans blah.tar.gz
le fichier, puis de le dissocier (supprimer) blah.tar
.
Maintenant, décompressons!
Voie 1
Vous avez blah.tar.gz
, d'une manière 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
.
- TRAITEZ les données compressées via 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étez l'opération jusqu'à ce que toutes les données compressées soient lues.
- Supprimer le lien (supprimer) le fichier
blah.tar.gz
.
Vous avez maintenant blah.tar
sur le disque, qui est décompressé mais contient un ou plusieurs fichiers, avec une surcharge de structure de données très faible. La taille du fichier est probablement supérieure de quelques octets à 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é
blah.tar
et les 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 les 2 Go de données et les métadonnées sur le disque. Cela implique: traduire les informations de structure de données / métadonnées en créant de nouveaux fichiers et répertoires sur le disque, le cas échéant, ou en réécrivant des fichiers et répertoires existants avec de nouveaux contenus de données.
Les données totales lues à partir du disque dans ce processus étaient de 1 Go (pour gunzip) + 2 Go (pour les archives tar) = 3 Go.
Le total des données gravées sur disque dans ce processus était de 2 Go (pour gunzip) + 2 Go (pour les archives tar) + quelques octets pour les métadonnées = environ 4 Go.
Voie 2
Vous avez blah.tar.gz
, d'une manière ou d'une autre.
Vous décidez de courir:
tar xvzf blah.tar.gz
Cette volonté
- LISEZ en mémoire le contenu compressé de 1 Go des données d’
blah.tar.gz
un bloc à la fois.
- TRAITEZ les données compressées via le
gzip
décompresseur en mémoire.
- Au fur et à mesure que la mémoire tampon se remplit, il achemine ces données, en mémoire, vers l'
tar
analyseur de format de fichier, qui lit les informations sur les métadonnées, etc.
- Au fur et à mesure que la mémoire tampon se remplit dans l'
tar
analyseur de fichiers, elle é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é.
Les données totales que nous avons lues à partir du disque au cours de ce processus représentaient 1 Go de données compressées, point à la ligne.
Le total des données gravées sur disque dans ce processus était de 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 de la manière 2 est identique à celle d'E / S effectuée par les programmes, par exemple, Zip
ou 7-Zip , en tenant compte des différences de taux de compression.
Et si le taux de compression vous préoccupe, utilisez le Xz
compresseur pour encapsuler tar
, et vous disposez de 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 situations dans lesquelles il peut être nécessaire de déplacer un groupe de fichiers. dans un seul fichier ou flux, mais ne le compressez pas nécessairement (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 forme de fichier .tar.gz ou .tar.bz2, car il s’agit d’un format de fichier "plus petit dénominateur commun": 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 que .7z soit utilisé plus souvent pour la même raison que la musique ne soit pas vendue dans les magasins de téléchargement en ligne dans de nouveaux formats comme Opus ou la vidéo dans WebM . Compatibilité avec les utilisateurs de systèmes anciens ou très basiques.
tar xvzf
est plus difficile que7z -x
...