Copyright © 2009 Brian Lindholm
Copyright © 2009 Renaud Flavigny
Copyright © 2010 Gaël Montreuil
Article paru dans le n° 162 de la Gazette Linux de mai 2009.
Cet article est publié selon les termes de la Open Publication License. La Linux Gazette n'est ni produite, ni sponsorisée, ni avalisée par notre hébergeur principal, SSC, Inc.
Résumé
Après un historique des techniques de compression, l'article compare les performances des différents algorithmes. Il termine sur une présentation des derniers utilitaires et des techniques pour obtenir les meilleures compressions du moment.Table des matières
Historique des versions | ||
---|---|---|
Version 1.0 | 2009-12-15 | RF |
Première version française | ||
2009-05 | BL | |
Version originale |
Au début était compress. Les gens l'utilisaient et ils voyaient que cela était bon. Leurs fichiers devinrent plus petits et ils pouvaient entasser plus de données sur les plateaux de leurs disques qu'auparavant. Nombreux sont ceux qui profitèrent des joies de la compression LZW.
En 1992, quelque chose de meilleur arriva : gzip. Il utilisait un algorithme de compression différent (LZ77 avec un codage de Huffman) qui générait des fichiers encore plus petits. Cerise sur le gâteau, il n'utilisait aucun algorithme encombré de ces satanés brevets. Le peuple fût encore plus heureux car il pouvait entasser encore plus de données sur ses systèmes et cela sans payer de royalties pour des brevets.
En 1996, Julian Seward fournit bzip2 qui utilisait une combinaison de transformation de Burrows-Wheeler et d'autres techniques de compression pour aboutir à des performances encore meilleures que gzip. Ça demandait plus de puissance CPU et plus de mémoire, mais compte tenu des capacités sans cesse croissante des ordinateurs, c'était de moins en moins un problème.
Pendant des années, gzip et bzip2 furent les standards de fait de la compression dans le monde du logiciel libre. gzip était utilisé pour sa rapidité et bzip2 lorsqu'un taux de compression maximal était désiré.
Cependant, en 2000, quelque chose de nouveau se produisit. Igor Pavlov fournit un programme nommé 7-zip qui utilisait un nouvel algorithme : LZMA. Cette algorithme atteignait des taux de compression très élevés au prix d'une consommation de RAM et de temps CPU considérable.
Malheureusement, il y avait deux problèmes qui rendaient 7-zip loin de l'idéal pour les utilisateurs de Linux
/BSD
/Unix
.
Tout d'abord, il avait été écrit pour Microsoft Windows. Argh…
Cela fût corrigé en 2004 avec la livraison d'un portage multi-plateforme : p7zip.
Le second problème était que 7zip (et p7zip) utilise un format de fichier .7z.
C'est un format d'archive multi-fichier fonctionnellement comparable au format .zip.
Malheureusement, à cause de ses origines Windows, le format .7z ne prévoit pas de place pour les permissions à la Unix
, les informations sur le propriétaire et le groupe, les listes de contrôle d'accès et toute autre information de ce genre.
Ces limitations sont un feu - stop pour ceux qui font des sauvegardes de systèmes multi-utilisateurs.
Alors en 2004, Igor Pavlov fournit le LZMA SDK (Kit de développement logiciel).
Bien que destiné aux programmeurs d'application, ce kit de développement comprenait un petit joyau d'utilitaire en ligne de commande appelé lzma_alone.
ce programme pouvait être utilisé à la façon de gzip et bzip2 pour créer des fichiers .lzma.
Combiné avec tar cela procure une excellente compression de fichier et une très bonne compatibilité Unix
.
Moins d'un an après la disponibilité de LZMA SDK, Lasse Collin publia les LZMA Utils. C'était initialement un enrobage de scripts autour de lzma_alone, avec des options en ligne de commande comparables à celles de gzip et de bzip2 à la place des options moins courantes dans le style de p7zip utilisées par lzma_alone). Plus tard les versions de lzma seront entièrement en C. Puis en 2009, Lasse Collin livra les XZ Utils, xz étant l'utilitaire principal. Ce nouvel utilitaire utilise toujours la compression LZMA mais, au lieu de produire un flux de données LZMA brutes, il empaquette le flux résultat dans un format de fichier bien défini avec des nombres magiques, des drapeaux et des contrôles de redondance cyclique. Ainsi est né le format .xz.
En 2008, Antonio Diaz livra un utilitaire comparable appelé lzip. Comme xz, il utilise la compression LZMA, mais au lieu de créer des fichiers .xz il crée des fichiers .lz. Ce format est différent dans les détails mais il fournit les mêmes fonctionnalités que le format .xz comme les nombres magiques, les contrôles de redondance cyclique, etc. De plus, lzip peut créer des fichiers multi-membres et peut éclater la sortie en plusieurs volumes.
À l'heure où j'écris ces lignes, il y a quatre utilitaires en ligne de commande (et trois formats de fichier) qui utilisent la compression LZMA procurant un excellent taux de compression : lzma_alone de Igor Pavlov, lzma et xz de Lasse Collin et lzip de Antonio Diaz. Cela signifie-t-il qu'il y a une guerre comme pour VHS et Betamax ? Difficile à dire ! Heureusement, vous n'êtes pas limité à n'en utiliser qu'un seul. ce sont des utilitaires pas des magnétoscopes. Il y a quantité de place pour eux tous sur votre disque dur. J'ai les quatre sur le mien.
Personnellement, je préfère lzma_alone car il est maintenu par la personne qui a inventé l'algorithme LZMA et qui le comprend le mieux. Toutefois, le format de fichier est minimal et xz et lzip ont des avantages significatifs avec leurs nombres magiques et leurs contrôle d'intégrité des données. De plus, lzma_alone est difficile à construire et n'a pas de pages de manuel (manpage). Les XZ Utils sont plus faciles à construire (ils disposent d'un script de configuration moderne basé sur autotools) mais actuellement il manque les pages de manuels pour les utilitaires principaux xz et lzma. lzip est entre les deux. Il nécessite des bidouilles manuelles pour positionner les options de compilation comme vous le voulez mais il a une jolie page de manuel.
Un jour, l'un d'entre eux peut devenir la façon prédominante d'utiliser la compression LZMA, mais aujourd'hui vous devez vous attendre à trouver les trois formats de fichiers dans la nature. J'en ai été témoin.
Comparons ces utilitaires du point de vue de la performance en compression. Au final, il y a peu de différence. Le tableau ci-dessous montre les performances de lzma_alone, xz, lzip, bzip2, gzip et compress sur l'archive des sources de ghostscript-8.64. j'ai omis lzma de Lasse Collin car maintenant ce n'est plus qu'un lien symbolique vers xz. Les versions exactes sont lzma_alone-4.65, xz-4.999.8beta, lzip-1.5, bzip2-1.0.5, gzip-1.3.12 et ncompress-4.2.4.2.
gs.tar 65003520 bytes (original file) gs.tar.lzma 12751330 bytes (159.05s to compress, 1.48s to decompress) gs.tar.xz 12768488 bytes (155.17s to compress, 1.54s to decompress) gs.tar.lz 12804165 bytes (161.12s to compress, 1.97s to decompress) gs.tar.bz2 16921504 bytes ( 14.72s to compress, 3.45s to decompress) gs.tar.gz 19336239 bytes ( 7.31s to compress, 0.63s to decompress) gs.tar.Z 29467629 bytes ( 2.39s to compress, 0.78s to decompress)
Les résultats de compression des trois utilitaires basés sur LZMA sont très comparables. lzma_alone l'emportant d'un cheveu. Tous les trois font mieux que bzip2, gzip et compress en prenant beaucoup plus longtemps. La décompression avec lzip est 30 % plus lente que pour les deux autres utilisant LZMA mais est nettement plus rapide que bzip2
Comment vous assurer les avantages de ces nouveaux utilitaires ? Si vous êtes chanceux, votre distribution comprend un ou plus d'entre eux sous forme de paquets pré-compilés. J'utilise Debian (Lenny) 5.0
qui a lzma_alone et une version ancienne des LZMA Utils de Lasse Collin (qui contient lzma mais pas xz). Pour ce qui n'est pas fourni avec votre distribution, vous devez télécharger les sources et les compiler vous même. Vous trouverez ci-joint des liens vers les programmes principaux.
http://www.7-zip.org/sdk.html | (pour lzma_alone) |
http://tukaani.org/xz/ | (pour xz et lzma) |
http://www.nongnu.org/lzip/lzip.html | (pour lzip) |
Pour ceux qui veulent construire lzma_alone, j'offre lzma_alone_patches.tar.bz2, qui contient quelques corrections minimes, des instructions de construction et une page de manuel. Pour l'utiliser, vous devez aussi télécharger le LZMA SDK original depuis le site Web mentionné ci dessus. Comme pour les XZ Utils et Lzip, c'est tout à fait simple à construire et installer.
Comment faire pour convertir les archives existantes d'un schéma de compression vers un autre ? Avec les tubes Unix
bien sur ! Voyez les exemples ci-dessous pour comprendre comment faire.
gzip -c -d source.tar.gz | lzma_alone e -si source.tar.lzma
bzip2 -c -d source.tar.bz2 | lzma -c > source.tar.lzma
gzip -c -d source.tar.gz | xz -c > source.tar.xz
bzip2 -c -d source.tar.bz2 | lzip -c > source.tar.lz
Et pour décompresser ces archives incroyablement compactes ?
lzma_alone d source.tar.lzma -so | tar -xvf -
tar --use-compress-program=lzma -xvf source.tar.lzma
tar --use-compress-program=xz -xvf source.tar.xz
tar --use-compress-program=lzip -xvf source.tar.lz
Pour ceux qui ont beaucoup d'archives à convertir, vous pouvez télécharger le paquet littleutils. ce paquet contient trois scripts (to-lzma,to-xz et to-lzip) qui convertiront de multiples fichiers gzip ou bzip2 en lzma, xz ou lz respectivement. L'option -k
est particulièrement utile pour détruire le fichier original uniquement si le nouveau est plus petit. Sinon, le fichier original est conservé. Pour convertir un répertoire entier d'archives vers le format lzma, tapez simplement :
Après ce détour éhonté vers mon propre logiciel, je conclurai cet article en exhortant les gens à utiliser au moins l'un de ces utilitaires de compression LZMA. Surtout si vous distribuez des archives compressées. Les fichiers compressés avec LZMA prennent moins de temps au téléchargement, et prennent moins de temps à décompresser (au moins comparé avec Bzip2). Même dans un monde de connections internet à large bande, de processeurs multi-gigahetz et de disques durs caverneux, ces utilitaires économisent du temps et de la place.
Brian Lindholm est diplômé de Virginia Tech. c'est un ingénieur en mécanique d'âge moyen qui a commencé la programmation en BASIC sur un TRS-80 Model I (en 1980). A la fin des années 80, il passa au Pascal et au C sur un clone IBM PC
Au cours des ans, Brian devint de plus en plus mécontent de l'instabilité et du coût des différents systèmes d'exploitation de Microsoft. En particulier, il détestait ne pas avoir le contrôle total de sa machine. Heureusement pour lui, il avait un copain de chambre au collège qui faisait tourner
Linux
(c'était l'époque deLinux 0.9
etSlackware 1.0
). C'était ce dont il avait besoin.Les années passant, il a lentement appris de plus en plus, et maintenant il travaille à maintenir son système
Debian
stable et heureux (même au travers de quatre mises à jour majeures : de 2.2 vers 3.0 puis 3.1 puis 4.0 puis 5.0). Un point notable : son systèmeDebian
ne s'est jamais planté de lui même. Seules des coupures de courant, des tentatives de démarrage sur la mauvaise partition, des appuis inopinés sur le bouton Reset, un DVD rayé, et un lecteur ZIP™ particulièrement versatile l'ont mis à terre. Il aime VIM et trouve Perl incroyablement utile dans son travail.Dans sa vie hors - Linux, Brian participe à la conception de générateurs de puissance (matériel pour grosses centrales électriques) pour gagner sa vie, à l'occasion il enregistre de la musique en public, il lit trop de science-fiction et sort sur les sentiers des Appalaches aussi souvent qu'il le peut
L'adaptation française de ce document a été réalisée dans le cadre du Projet de traduction de la Gazette Linux.
Vous pourrez lire d'autres articles traduits et en apprendre plus sur ce projet en visitant notre site : http://www.traduc.org/Gazette_Linux.
Si vous souhaitez apporter votre contribution, n'hésitez pas à nous rejoindre, nous serons heureux de vous accueillir.