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 que cpio
et ar
. (Les paquets Debian sont des ar
archives, alors qu'il
cpio
est souvent utilisé pour les disques virtuels initiaux.) tar
Est ou a souvent été combiné avec des outils de compression tels que compress
(.Z), gzip
(.gz),
bzip2
(.bz2) et xz
(.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 du tar
format de fichier. Cela signifie que l'extraction d'un seul fichier à partir d'une tar
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 essentiellement zip
le compresseur sans son archiveur, et xz
est essentiellement 7-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
et LZ4
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.