J'ai toujours utilisé TAR et ZIP pour la compression, mais récemment j'ai entendu parler de l' *.Z
algorithme de compression. Cela m'a soulevé une question:
Avec tous ces systèmes de compression, lequel est le meilleur pour une utilisation générale et la compression?
En exécutant quelques tests, j'ai découvert que tar
, comme je l'ai découvert, ne compresse PAS vraiment (sauf indication contraire explicite). Qu'est-ce que c'est bon par rapport à d'autres méthodes de compression?
Je suis déjà au courant que ZIP est le système de compression les plus utilisés, mais dois - je utiliser au lieu de *.Z
, *.7z
, .tar
ou .tar.<insert ending here>
?
Résumé du message:
- Dois - je utiliser
*.tar
,*.Z
,*.7z
,.tar
ou.tar.<insert ending here>
pour la meilleure compression? - Si plain
*.tar
ne se comprime pas, pourquoi l'utilisons-nous?
EDIT: Tous les algorithmes ne permettent pas de stocker des autorisations Linux (d'après ce que j'ai appris). Que faire, et y a-t-il une sorte de piratage (ou script) que je pourrais utiliser pour stocker des autorisations?
la source
Réponses:
tar
signifie archive sur bande. Il ne fait que regrouper les fichiers et leurs métadonnées (autorisations, propriété, etc.) dans un flux d'octets qui peuvent être stockés sur un lecteur de bande (ou un fichier) et restaurés ultérieurement. La compression est une question entièrement distincte que vous aviez l'habitude de diriger la sortie via un utilitaire externe pour compresser si vous le souhaitez. GNU tar était assez sympa pour ajouter des commutateurs pour lui dire de filtrer automatiquement la sortie via l'utilitaire approprié comme raccourci.Zip et 7z combinent l'archivage et la compression dans leur propre format de conteneur, et ils sont destinés à emballer des fichiers sur un système DOS / Windows, de sorte qu'ils ne stockent pas les autorisations et la propriété Unix. Ainsi, si vous souhaitez stocker des autorisations pour des sauvegardes appropriées, vous devez vous en tenir à tar. Si vous prévoyez d'échanger des fichiers avec des utilisateurs Windows, alors zip ou 7z est bon. Les algorithmes de compression réels utilisés par zip et 7zip peuvent être utilisés avec tar, par uzing
gzip
etlzma
respectivement.lzma (aka. * .xz) a l'un des meilleurs taux de compression et est assez rapide en décompression, ce qui en fait un choix de choix de nos jours. Cependant, il faut une tonne de RAM et de CPU pour se comprimer. Le vénérable
gzip
est un peu plus rapide à la compression, il peut donc être utilisé si vous ne souhaitez pas consacrer autant de temps au processeur. Il a également une variante encore plus rapide appelée lzop.bzip2
est encore assez populaire car il a largement remplacé gzip pendant un certain temps avant la création de 7zip / lzma, car il a obtenu de meilleurs taux de compression, mais tombe en disgrâce ces jours-ci, car 7z / lzma est plus rapide à la décompression et obtient de meilleurs taux de compression. L'compress
utilitaire, qui nomme normalement les fichiers * .Z, est ancien et oublié depuis longtemps.L'une des autres différences importantes entre zip et tar est que zip compresse les données en petits morceaux, tandis que lorsque vous compressez un fichier tar, vous compressez le tout à la fois. Ce dernier donne de meilleurs taux de compression, mais pour extraire un seul fichier à la fin de l'archive, vous devez décompresser le tout pour y accéder. Ainsi, le format zip est meilleur pour extraire un seul fichier ou deux d'une grande archive. 7z et
dar
vous permettent de choisir de compresser le tout (appelé mode "solide") ou de petits morceaux pour une extraction fragmentaire facile.la source
gzip
.tar cfp
conservera les autorisations. Un fichier tar n'est pas compressé, donc zip (7-zip), gzip2, gzip, lzo, etc. compresseront tous bien un fichier tar (en général, un tar de fichiers compressés ne sera probablement pas compressible).Les détails des algorithmes sont hors sujet ici 1 car ils ne sont en aucun cas spécifiques à Linux, sans parler d'Ubuntu. Vous trouverez cependant de belles informations ici .
Maintenant
tar
, comme vous l'avez dit, cetar
n'est pas et n'a jamais été un programme de compression. Au lieu de cela, c'est un archiveur ; son objectif principal est de créer un gros fichier à partir d'un grand nombre de petits. Historiquement, c'était pour faciliter le stockage sur des lecteurs de bande, d'où le nom: Tape ARchive.Aujourd'hui, la principale raison d'utiliser
tar
est de diminuer le nombre de fichiers sur votre système. Chaque fichier sur un système de fichiers Unix prend un inode , plus vous avez de fichiers, moins d'inodes disponibles et lorsque vous manquez d'inodes, vous ne pouvez plus créer de nouveaux fichiers. Pour le dire simplement, la même quantité de données stockées sous forme de milliers de fichiers occupera plus de votre disque dur que ces mêmes fichiers dans une seule archive tar.Pour illustrer, puisque cela a été contesté dans les commentaires, sur ma
/
partition 68G , j'ai le nombre suivant d'inodes totaux et utilisés (gardez à l'esprit que le nombre d'inodes dépend du type de système de fichiers et de la taille de la partition):Si je tente maintenant de créer plus de fichiers que je n'en ai d'inodes:
Pas d'espace? Mais j'ai beaucoup d'espace:
Comme vous pouvez le voir ci-dessus, la création de quelques centaines de milliers de fichiers vides épuise rapidement mes inodes et je ne peux plus en créer de nouveaux. Si je
tar
devais les utiliser, je pourrais recommencer à créer des fichiers.Avoir moins de fichiers accélère également considérablement les E / S du système de fichiers, en particulier sur les systèmes de fichiers montés NFS. Je tare toujours mes anciens répertoires de travail lorsqu'un projet est terminé, car moins il y a de fichiers, plus les programmes comme
find
fonctionneront rapidement .Il y a une excellente réponse sur Super User qui va beaucoup plus en détail, mais en plus de ce qui précède, les autres raisons fondamentales qui
tar
sont toujours populaires aujourd'hui sont:Efficacité: utiliser
tar
pour diriger à travers un programme de compression commegzip
est plus efficace car il évite la création de fichiers intermédiaires.tar
est livré avec toutes sortes de cloches et de sifflets, des fonctionnalités qui ont été conçues au cours de sa longue histoire qui le rendent particulièrement utile pour les sauvegardes * nix (pensez aux autorisations, à la propriété des fichiers, à la possibilité de diriger les données directement vers STDOUT et via un lien SSH ... )Inertie. Nous sommes habitués
tar
. Il est sûr de supposer qu'il sera disponible sur n'importe quel * nix que vous pourriez utiliser, ce qui le rend très portable et pratique pour les tarballs de code source.1 C'est absolument vrai et cela n'a rien à voir avec le fait que je n'en sais pas assez pour les expliquer :)
la source
tar
pour "réduire le nombre de fichiers" car la plupart des systèmes de fichiers s'en moquent franchement, et ce n'est pas vraiment optimal de toute façon cartar
il ne prend pas en charge l'accès aléatoire facile aux fichiers. Au contraire, l'utilisation principale (pour moi et je pense pour la plupart des gens) est de partager des fichiers (par exemple le code source) avec d'autres personnes de manière simple.ARG_MAX
, cela peut rendre le traitement de vos fichiers quelque peu compliqué et peut réellement amener un réseau (mal) configuré où les fichiers sont stockés sur un serveur central et partagés avec NFS à genoux. En ce qui concerne la réduction globale du nombre de fichiers, vous aurez besoin de bien plus de fichiers que cela pour le remarquer, mais dans les configurations multi-utilisateurs, le nombre d'inodes peut en effet devenir limitant.tune2fs -l
sur la partition contenant mon $ HOME me dit que j'ai 19 300 352 inodes. Je ne pourrai pas créer plus de fichiers que ça. Comme vous l'avez dit, 10 ^ 6 n'est pas fou, même pas dans les gammes supérieures. Selon ce que vous faites, vous pouvez avoir besoin de bien plus que cela.Il y a deux tâches distinctes mais liées. L'intégration d'une arborescence de fichiers (y compris les noms de fichiers, la structure des répertoires, les autorisations du système de fichiers, la propriété et toute autre métadonnée) dans un flux d'octets est appelée archivage . La suppression de la redondance dans un flux d'octets pour produire un flux d'octets plus petit est appelée compression .
Sous Unix, les deux opérations sont séparées, avec des outils distincts pour chacune. Sur la plupart des autres plates-formes (actuelles et historiques), les outils combinés effectuent à la fois l'archivage et la compression.
(gzip et d'autres programmes qui imitent l'interface de gzip ont souvent la possibilité de stocker le nom de fichier d'origine dans la sortie compressée, mais cela, avec un CRC ou une autre vérification pour détecter la corruption, est la seule métadonnée qu'ils peuvent stocker.)
Il y a des avantages à séparer la compression de l'archivage. L'archivage est spécifique à la plate-forme (les métadonnées du système de fichiers à conserver varient considérablement), mais l'implémentation est simple, largement liée aux E / S et change peu au fil du temps. La compression est indépendante de la plate-forme, mais les implémentations sont liées au processeur et les algorithmes s'améliorent constamment pour tirer parti des ressources accrues que le matériel moderne peut apporter pour résoudre le problème.
L'archiveur Unix le plus populaire est
tar
, bien qu'il existe d'autres tels quecpio
etar
. (Les paquets Debian sont desar
archives, alors qu'ilcpio
est souvent utilisé pour les disques virtuels initiaux.)tar
Est ou a souvent été combiné avec des outils de compression tels quecompress
(.Z),gzip
(.gz),bzip2
(.bz2) etxz
(.xz), du plus ancien au plus jeune , et non par coïncidence de la pire à la meilleure compression.Faire une
tar
archive et la compresser sont des étapes distinctes: le compresseur ne sait rien dutar
format de fichier. Cela signifie que l'extraction d'un seul fichier à partir d'unetar
archive compressée nécessite la décompression de tous les fichiers précédents. Ceci est souvent appelé une archive "solide".De même, comme tar est un format de "streaming" - nécessaire pour qu'il soit utile dans un pipeline - il n'y a pas d'index global dans une archive tar, et lister le contenu d'une archive tar est tout aussi cher que de l'extraire.
En revanche, Zip et RAR et 7-zip (les archiveurs les plus populaires sur les plates-formes Windows modernes) compressent généralement chaque fichier séparément, et compressent légèrement les métadonnées, voire pas du tout. Cela permet une liste bon marché des fichiers dans une archive et l'extraction de fichiers individuels, mais signifie que la redondance entre plusieurs fichiers dans la même archive ne peut pas être exploitée pour augmenter la compression. Alors qu'en général, la compression d'un fichier déjà compressé ne réduit pas davantage la taille du fichier, parfois vous pouvez voir un fichier zip dans un fichier zip: le premier zip a transformé beaucoup de petits fichiers en un seul gros fichier (probablement avec la compression désactivée), ce que le second compresser puis compressé comme une seule entité.
Il existe une pollinisation croisée entre les différentes plates-formes et philosophies:
gzip
est essentiellementzip
le compresseur sans son archiveur, etxz
est essentiellement7-zip
le compresseur sans son archiveur.Il existe d'autres compresseurs spécialisés. Les variantes PPM et leur successeur
ZPAQ
sont optimisés pour une compression maximale sans égard à la consommation des ressources. Ils peuvent facilement mâcher autant de CPU et de RAM que vous pouvez leur jeter, et la décompression est tout aussi pénible que la compression (pour le contraste, les outils de compression les plus utilisés sont asymétriques : la décompression est moins chère que la compression).À l'autre extrémité du spectre,
lzo
,snappy
etLZ4
sont « légers » compresseurs conçus pour une vitesse maximale et la consommation minimum de ressources, au coût de la compression. Ils sont largement utilisés dans les systèmes de fichiers et autres magasins d'objets, mais moins comme outils autonomes.Alors, que devez-vous choisir?
Archivage:
Puisque vous êtes sur Ubuntu, il n'y a aucune raison réelle d'utiliser autre chose que
tar
pour l'archivage, sauf si vous essayez de créer des fichiers facilement lisibles ailleurs.zip
est difficile à battre pour l'ubiquité, mais il n'est pas centré sur Unix et ne conservera pas les autorisations de votre système de fichiers et les informations de propriété, et sa compression intégrée est désuète. 7-zip et RAR (et ZPAQ) ont une compression plus moderne mais ne conviennent pas non plus à l'archivage des systèmes de fichiers Unix (bien que rien ne vous empêche de les utiliser comme compresseurs); RAR est également propriétaire.Compression:
Pour une compression maximale, vous pouvez consulter une référence, comme l'énorme à http://mattmahoney.net/dc/text.html . Cela devrait vous donner une meilleure idée des compromis impliqués.
Cependant, vous ne voulez probablement pas de compression maximale. C'est beaucoup trop cher.
xz
est l'outil de compression polyvalent le plus populaire sur les systèmes Unix modernes. Je pense que 7-zip peut également lire les fichiers xz, car ils sont étroitement liés.Enfin: si vous archivez des données pour autre chose qu'un stockage à court terme, vous devez choisir quelque chose d'open source et de préférence répandu, pour minimiser les maux de tête plus tard.
la source
lzo, gz, b2, lzma (.lzma2 =.xz)
sont des compresseurs de "flux": ils compressent un flux d'octets et ne se soucient pas des fichiers, des répertoires et des métadonnées comme les autorisations. Vous devez utiliser un archiveur comme tar pour regrouper toutes ces données dans un flux d'octets (un fichier tar) et les compresser avec un compresseur. S'il s'agit des données d'un seul fichier qui vous intéressent, vous pouvez également alimenter ce fichier seul à l'un de ces compresseurs.Tar, cpio and pax
sont des archiveurs: ils prennent un tas de fichiers et de répertoires et encodent les données et les métadonnées dans un seul fichier. le goudron est le plus populaire et le plus compatible, bien que les mérites techniques entre les trois soient suffisamment minimes pour qu'il y ait eu des guerres de religion à ce sujet à l'aube des temps.7z et zip sont des compresseurs ET arcihvers: Ensuite, stockez toutes les données et métadonnées et compressez-les. Cependant AFAICT, aucun d'entre eux ne sauvegarde les autorisations Unix.
Zip utilise le même algorithme que gzip appelé DEFLATE. 7z utilise l'algorithme lzma
pour lire un seul fichier à partir d'un fichier tar.gz ou similaire, vous devrez décompresser l'ensemble du flux gz jusqu'à ce que la quantité suffisante du fichier tar soit exposée afin de pouvoir l'extraire. Zip vous permet de compresser et d'extraire chaque fichier individuellement. 7z peut avoir l'un ou l'autre comportement.
Rapports et vitesses de compression: gzip et lzo ont des vitesses de compression et de décompression très très rapides mais de faibles taux de compression. Il ne faut pas non plus beaucoup de mémoire pour compresser. gzip est un peu plus lent et donne un taux de compression un peu meilleur que lzo.
Il est si rapide qu'il peut être plus rapide de lire un fichier compressé gz ou lzo à partir du disque et de le décompresser à la volée au lieu de lire le fichier non compressé directement à partir du disque.
LZMA (xz) offre une excellente compression sur les données générales mais prend très longtemps pour compresser et décompresser tout en prenant une quantité importante de mémoire à compresser.
bz2 était l'algorithme de compression élevée de choix, mais il est tombé en disgrâce car il est à la fois plus lent que lzma et prend plus de temps à compresser et décompresser. Cependant, pour certains types de données (séquences d'adn, fichiers avec de très grandes séries du même octet, etc.) bzip2 peut battre tout le reste à la main. Par exemple, j'ai dû une fois compresser un fichier de 4 Go de 1 et b2 a réduit i à quelques 10 de ko tandis que lzma a pris environ 10 de Mo si je me souviens bien.
la source
Pour les fichiers particulièrement volumineux, vous pouvez utiliser
rzip
. Il examine d'abord les données redondantes à l'intérieur de grands blocs de 900 Mo, les encode, puis remet les données à bzip2 (pas vraiment, mais les mêmes algorithmes sont utilisés).Effet? Beaucoup plus rapide que
xz
,lzma
oubzip2
, et d'après mon expérience, son taux de compression rivalise avec celui delzma
. C'est un porc RAM, cependant.http://en.wikipedia.org/wiki/Rzip
la source