219 votes

Quel est l'avantage d'utiliser "goudron" aujourd'hui ?

Je sais que tar a été conçu pour les archives sur bande à l'époque, mais aujourd'hui, nous disposons de formats de fichiers d'archives qui regroupent les fichiers et effectuent la compression dans le même format de fichier logique.

Questions :

  • L'utilisation de l'algorithme d'agrégation/compression/décompression est-elle pénalisante en termes de performances ? tar encapsulé dans gzip o bzip2 par rapport à l'utilisation d'un format de fichier qui effectue l'agrégation et la compression dans la même structure de données ? Supposons que le temps d'exécution du compresseur comparé soit identique (par exemple, gzip et Deflate sont similaires).

  • Y a-t-il des caractéristiques de la tar que d'autres formats de fichiers, tels que .7z y .zip n'ont pas ?

  • Depuis tar est un format de fichier si ancien, alors que des formats de fichier plus récents existent aujourd'hui. tar (qu'ils soient encapsulés dans gzip , bzip2 ou encore le nouveau xz ) encore si largement utilisé aujourd'hui sur GNU/Linux, Android, BSD et d'autres systèmes d'exploitation UNIX de ce type, pour les transferts de fichiers, les téléchargements de sources et de binaires de programmes, et parfois même comme format de gestionnaire de paquets ?

2 votes

C'est une très bonne question. Moi aussi, je n'aime pas du tout leur façon d'installer des logiciels qui ont des noms bizarres ou que je ne peux pas simplement installer avec apt-get. La seule raison pour laquelle je pense que la question sera rejetée est qu'il s'agit plutôt d'une question pour Unix/Linux. Mais SU devrait l'accepter.

3 votes

@Griffin : La question ne porte pas sur l'installation de logiciels à partir de tarballs. Elle concerne l'utilisation du format Tar (par exemple, par rapport à Zip ou RAR).

34 votes

Je ne suis pas d'accord pour dire que cela "fait perdre du temps". Si vous parlez de performances, il n'y a pas de pénalité de performance réelle pour le tar car le format est très efficace. Si vous voulez dire qu'il y a une perte de temps votre temps, je ne vois pas comment tar xvzf est plus difficile que 7z -x ...

179voto

Giuseppe R Points 1325

Partie 1 : Performance

Voici une comparaison de deux flux de travail distincts et de ce qu'ils font.

Vous avez un fichier sur le disque blah.tar.gz ce qui représente, par exemple, 1 Go de données compressées par gzip qui, une fois décompressées, occupent 2 Go (soit un taux de compression de 50 %).

La façon de créer ceci, si vous deviez faire l'archivage et la compression séparément, serait :

tar cf blah.tar files ...

Il en résulterait blah.tar qui est une simple agrégation des files ... sous forme non compressée.

Alors vous feriez

gzip blah.tar

Cela permet de lire le contenu de blah.tar à partir du disque, les comprimer à l'aide de l'algorithme de compression gzip, puis écrire le contenu sur le disque dur. blah.tar.gz puis délier (supprimer) le fichier blah.tar .

Maintenant, décompressons !

Voie 1

Vous avez blah.tar.gz d'une manière ou d'une autre.

Vous décidez de vous enfuir :

gunzip blah.tar.gz

Cela permettra

  • LIRE le contenu des données compressées de 1 Go de blah.tar.gz .
  • Traiter les données compressées par le biais du gzip décompresseur en mémoire.
  • Au fur et à mesure que la mémoire tampon se remplit d'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.
  • Délier (supprimer) le fichier blah.tar.gz .

Maintenant, vous avez blah.tar sur le disque, qui n'est pas compressé mais qui contient un ou plusieurs fichiers, avec une très faible surcharge de structure de données. La taille du fichier est probablement quelques octets plus grande que la somme de toutes les données du fichier.

Tu cours :

tar xvf blah.tar

Cela permettra

  • LIRE les 2 Go de contenu de données non compressées de blah.tar et le tar les structures de données du format de fichier, y compris les informations sur les autorisations de fichiers, les noms de fichiers, les répertoires, etc.
  • ÉCRIT les 2 Go de données plus les métadonnées sur le disque. Cela implique : la traduction de la structure des données / des informations sur les métadonnées en créant de nouveaux fichiers et répertoires sur le disque, le cas échéant, ou en réécrivant les fichiers et répertoires existants avec le nouveau contenu des données.

L'ensemble des données que nous LIRE du disque dans ce processus était de 1 GB (pour gunzip) + 2 GB (pour tar) = 3 GB.

L'ensemble des données que nous WROTE sur le disque dans ce processus était de 2 Go (pour gunzip) + 2 Go (pour 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 vous enfuir :

tar xvzf blah.tar.gz

Cela permettra

  • LIRE le contenu des données compressées de 1 Go de blah.tar.gz un bloc à la fois, dans la mémoire.
  • Traiter les données compressées par le biais du gzip décompresseur en mémoire.
  • Au fur et à mesure que la mémoire tampon se remplit, elle va tuyau ces données, en mémoire, jusqu'au tar un analyseur de format de fichier, qui lira les informations sur les métadonnées, etc. et les données du fichier non compressé.
  • Au fur et à mesure que la mémoire tampon se remplit dans l'application tar il écrira 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é.

L'ensemble des données que nous LIRE du disque dans ce processus était de 1 Go de données compressées, point.

L'ensemble des données que nous WROTE sur le 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'entrées/sorties du disque dans Voie 2 es identique à l'entrée/sortie de disque effectuée par, disons, les Zip o 7-Zip en tenant compte des différences de taux de compression.

Et si le taux de compression vous préoccupe, utilisez l'option Xz compresseur pour encapsuler tar et vous avez LZMA2'ed TAR, qui est tout aussi efficace que l'algorithme le plus avancé dont dispose 7-Zip :-)

Partie 2 : Caractéristiques

tar stocke les permissions Unix dans ses métadonnées de fichiers, et est très bien connu et testé pour emballer avec succès un répertoire avec toutes sortes de permissions différentes, de liens symboliques, etc. Il existe plus d'un cas où l'on peut avoir besoin de regrouper un ensemble de fichiers en un seul fichier ou flux, mais pas nécessairement de le compresser (bien que la compression soit utile et souvent utilisée).

Partie 3 : Compatibilité

De nombreux outils sont distribués sous forme de sources ou de binaires au format .tar.gz ou .tar.bz2, car il s'agit d'un format de fichier du "plus petit dénominateur commun" : tout comme la plupart des utilisateurs de Windows ont accès aux décompresseurs .zip ou .rar, la plupart des installations Linux, même les plus basiques, auront accès au moins à tar et gunzip, même s'ils sont vieux ou réduits. 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, qui est similaire aux formats ZIP ou RAR en ce qu'il permet à la fois de compresser et de spécifier une disposition pour encapsuler plusieurs fichiers dans un seul fichier.

Vous ne voyez pas le format .7z utilisé plus souvent 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 tels que Opus ou vidéo en WebM . Compatibilité avec les personnes utilisant des systèmes anciens ou très basiques.

0 votes

Bravo pour cette excellente réponse dont tout le contenu est séparé sous trois en-têtes distincts.

2 votes

"Partie 3 : Compatibilité" semble avoir été copié de la réponse de @Kruug.

23 votes

@titaniumdecoy Avez-vous remarqué que c'est allquixotic qui a écrit cette partie à l'origine et l'a éditée dans la réponse de Kruug ?

102voto

Kruug Points 5162

Ce site a été répondu sur Stack Overflow .

bzip et gzip fonctionnent sur des fichiers uniques, pas sur des groupes de fichiers. Le bon vieux zip (et pkzip) fonctionne sur des groupes de fichiers et intègre le concept d'archive.

La philosophie *nix est celle de petits outils qui font très bien des tâches spécifiques et qui peuvent être enchaînés. C'est pourquoi il y a deux outils ici qui ont des tâches spécifiques, et ils sont conçus pour s'adapter ensemble. Cela signifie également que vous pouvez utiliser tar pour regrouper des fichiers et que vous avez ensuite le choix de l'outil de compression (bzip, gzip, etc).

De nombreux outils sont distribués sous forme source ou binaire en .tar.gz ou .tar.bz2, car il s'agit d'un format de fichier du "plus petit dénominateur commun" : tout comme la plupart des utilisateurs de Windows ont accès aux décompresseurs .zip ou .rar, la plupart des installations Linux, même les plus basiques, auront accès à au moins tar y gunzip même s'il est vieux ou dépouillé. 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, comme par exemple .tar.xz (en utilisant l'indice Xz ( LZMA ), qui compresse mieux que gzip ou bzip2), ou .7z, qui est similaire au format de compression .1. ZIP o RAR en ce qu'il permet à la fois de compresser et de spécifier une disposition pour encapsuler plusieurs fichiers dans un seul fichier.

Vous ne voyez pas le format .7z utilisé plus souvent 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 tels que Opus ou vidéo en WebM . La compatibilité avec les personnes utilisant des systèmes anciens ou très basiques est importante.

7 votes

Bonjour @Kruug, j'ai édité votre post juste pour donner une perspective pratique sur les raisons pour lesquelles les gens continuent à choisissez à utiliser ces formats alors qu'ils ont le choix d'utiliser autre chose. Je n'ai pas modifié le texte que vous aviez déjà. C'est juste pour s'assurer que ce qui semble être la réponse canonique à cette question aura l'image complète. N'hésitez pas à modifier mon édition si vous le souhaitez :)

5 votes

@allquixotic inception anyone ? Éditer l'édition de et éditer pour pouvoir éditer une édition...

2 votes

@allquixotic Je me sens un peu mal, d'avoir tous ces upvotes alors qu'au moins 50% de la réponse était la tienne.

64voto

spong Points 875

Tar possède un riche ensemble d'opérations et de modificateurs qui connaissent tout des systèmes de fichiers Unix. Il connaît les permissions Unix, les différents temps associés aux fichiers, les liens durs, les liens souples (et la possibilité que les liens symboliques introduisent des cycles dans le graphe du système de fichiers), et vous permet de spécifier plusieurs façons différentes de gérer toutes ces données.

  • Voulez-vous que les données extraites préservent les temps d'accès aux fichiers ? Tar peut le faire. Pour préserver les permissions ? Tar peut le faire.

  • Voulez-vous conserver les liens symboliques en tant que liens symboliques ? Tar le fait par défaut. Vous voulez copier la cible à la place ? Tar peut le faire.

  • Voulez-vous être sûr que les données liées ne sont stockées qu'une seule fois (c'est-à-dire pour faire ce qu'il faut) ? Le goudron fait ça.

  • Voulez-vous bien gérer les fichiers épars ? Tar peut le faire.

  • Voulez-vous des données non compressées (pourquoi ?) ? Tar peut le faire. Pour compresser avec gzip ? Tar peut le faire. Avec bzip2 ? Tar peut le faire. Avec des programmes de compression externes arbitraires ? Tar peut le faire.

  • Voulez-vous écrire ou récupérer sur/depuis un périphérique brut ? Le format de Tar gère bien cela.

  • Voulez-vous ajouter des fichiers à une archive existante ? Tar peut le faire. Diffuser deux archives pour voir ce qui a changé ? Tar peut le faire. Pour mettre à jour uniquement les parties de l'archive qui ont été modifiées ? Tar peut le faire.

  • Vous voulez être sûr de ne pas archiver sur plus d'un système de fichiers ? Tar peut le faire.

  • Voulez-vous récupérer uniquement les fichiers qui sont plus récents que votre dernière sauvegarde ? Tar peut le faire.

  • Voulez-vous conserver les noms ou les numéros des utilisateurs et des groupes ? Tar peut faire l'un ou l'autre.

  • Avez-vous besoin de préserver les nœuds de périphériques (comme les fichiers dans le dossier /dev ) pour qu'après extraction, le système fonctionne correctement ? Tar peut le faire.

Tar évolue depuis des dizaines d'années pour gérer de nombreux cas d'utilisation et connaît vraiment bien le sujet. beaucoup sur les choses que les gens veulent faire avec les systèmes de fichiers Unix.

12 votes

Vous n'avez pas besoin de GNU tar pour utiliser un compresseur arbitraire : dites simplement à tar d'écrire l'archive sur stdout avec f - et l'acheminer vers le compresseur.

3 votes

"Voulez-vous des données non compressées (pourquoi ?) ?" J'utilise tar très souvent pour copier une arborescence de système de fichiers d'un endroit à un autre et préserver les permissions, etc., et la compression dans ce cas ne fait que prendre des cycles CPU supplémentaires. Par exemple tar cf - * | tar xf - -C /somewhere .

1 votes

En outre, vous voudrez un fichier .tar si le système de fichiers de destination effectue la déduplication. La création d'archives compressées sur un système de fichiers qui effectue la déduplication réduira considérablement le taux de déduplication. Exemple : Nous avons un jour supprimé un fichier tar.gz de 10 000 $, c'est-à-dire qu'il occupait 10 000 $ d'espace de stockage parce que quelqu'un utilisait la compression.

31voto

Luke Bayes Points 2319

Vous confondez les deux processus distincts de archivage y compression .

Raisons d'utiliser un archiveur

Une raison d'utiliser l'archivage sans compression est, par exemple, si un paquet de fichiers est copié d'un hôte à un autre. Une commande comme la suivante

tar cf - some_directory | ssh host "(cd ~/somewhere | tar xf -)"

peut accélérer considérablement les choses. Si je sais que les fichiers ne peuvent pas être compressés ou si SSH est configuré avec la compression, il peut économiser une quantité considérable de CPU considérable. Bien sûr, on peut utiliser un outil de compression plus moderne avec une fonction d'archivage et désactiver la compression. L'avantage de tar est, que je peux m'attendre à ce que soit disponible sur tous les systèmes.

Raisons d'utiliser un archiveur avec compression gzip

Une des raisons pour lesquelles j'utilise tar avec gzip est : vitesse ! Si je veux transférer quelques Go de fichiers texte d'un endroit à l'autre, je je ne me préoccupe pas d'extraire les derniers octets, puisque la compression est uniquement pour le transit et non pour le stockage à long terme. Dans ce cas, j'utilise gzip , qui n'exploite pas au maximum le processeur (contrairement à 7-Zip par exemple), qui signifie que je suis I/O de nouveau lié et non lié à l'unité centrale. Et encore : gzip peut être considéré comme disponible partout.

Raisons de l'utilisation tar en faveur de scp , rsync etc.

Il bat scp si vous avez beaucoup de petits fichiers à copier (par exemple, un répertoire de courrier avec des centaines de milliers de fichiers). rsync Aussi génial qu'il soit, il n'est peut-être pas disponible partout. Plus loin, rsync n'est vraiment utile que si une partie des fichiers - ou une version plus ancienne - est déjà présente sur la destination. Pour la copie initiale tar est le plus rapide, avec ou sans compression, en fonction des données réelles.

1 votes

Mais si vous allez archiver, pourquoi ne pas compresser également ? D'accord, cela peut faire gagner du temps pour les fichiers qui ne sont pas facilement compressibles, mais les archiveurs devraient probablement savoir que la musique, par exemple, n'est pas très compressible, sauf pour les en-têtes.

2 votes

Il se peut que vous n'en ayez pas besoin, ou que votre contenu ne soit pas compressible.

4 votes

Pour des raisons de performances, il est souvent plus facile d'utiliser l'agrégation de fichiers non compressés lors de l'envoi de données sur des liaisons réseau à très large bande passante qui dépassent la vitesse à laquelle le compresseur peut compresser les données. Ceci est réalisable par exemple avec Gigabit Ethernet ; seuls quelques algorithmes de compression bien conçus, qui ont également un taux de compression très faible, peuvent compresser les données aussi rapidement, même sur une grosse unité centrale de bureau. Sur un appareil embarqué, vous disposez d'encore moins de temps CPU pour travailler.

25voto

En plus des autres bonnes réponses données ici, je préfère la combinaison suivante tar + gzip|bzip2|xz principalement parce que ces fichiers compressés sont comme des flux, et que vous pouvez les canaliser facilement.

Je dois décompresser un fichier disponible sur Internet. Avec soit zip o rar Je dois d'abord le télécharger, puis le décompresser. Avec tar.{gz,bz2,xz} Je peux télécharger et décompresser en une seule étape, sans avoir besoin d'avoir l'archive compressée physiquement sur le disque :

curl -s http://example.com/some_compressed_file.tar.gz | tar zx

Cela ne laissera que les fichiers non compressés sur mon disque et accélérera l'ensemble du processus, car je ne perdrai pas de temps à télécharger l'ensemble du fichier et à le décompresser une fois le téléchargement terminé. Au lieu de cela, je le décompresse pendant qu'il est en train de se télécharger. Vous ne pouvez pas faire cela avec zip o rar des fichiers.

2 votes

Je ne sais pas ce qu'il en est de rar (c'est un programme épouvantable qui ne semble être devenu populaire auprès des pirates que grâce à sa capacité à diviser en plusieurs fichiers plus petits), mais vous pouvez lire zip sans problème. La page de manuel le mentionne même. Il a également l'avantage de pouvoir extraire ou mettre à jour efficacement des fichiers au milieu d'une grande archive, bien que tar ait tendance à obtenir une compression légèrement meilleure. La compression par rapport à l'accès aléatoire est un compromis.

3 votes

@psusi incorrect. Vous pouvez faire des piratages comme ce mais ce qu'il fait, c'est télécharger tous les fichiers en mémoire et les décompresser ensuite, au lieu de les décompresser pendant le téléchargement. Et funzip extrait seulement le premier fichier du fichier zip, pas tous.

0 votes

Ahh, alors que vous pouvez pipe la sortie de zip il apparaît que unzip est bogué et ne peut pas lire depuis stdin. Il s'agit cependant d'un défaut du programme, et non d'une limitation du format de fichier.

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