Outils pour utilisateurs

Outils du site


compression

La compression de fichiers

On manipule de plus en plus de fichiers, et la compression permet de gagner énormément de temps et de place, que ce soit pour le stockage ou le transfert de données. Il existe de nombreux algorithmes de compression, et de nombreux formats d'archive. Il peut être intéressant de choisir judicieusement son algorithme et son format d'archive en fonction des besoins.

TL;DR : Pas le temps ou l'envie de lire toute cette page ? Vous ne savez pas quel format prendre ?
➡️ Utilisez 7z (7-Zip) ⬅️

La compression est généralement un compromis : Vous dépensez:

  • du temps
  • du CPU
  • de la mémoire vive

en échange:

  • d'un gain de place
  • d'un gain de temps de transfer
  • ou d'autres gains : s'assurer de l'intégrité des données, s'assurer de leur confidentialité (chiffrement), faciliter leur manipulation (fichiers groupés en une archive, découpage…) etc.

Algorithme de compression et format archive

Il y a deux choses à distinguer :

  • L'algorithme de compression est le bout de programme qui prend des données brutes en entrée (des octets) et qui sort une version compressée de ces données.
    • Exemples d'algorithmes de compression : LZ77, Huffman, Deflate, lzma…
  • Le format d'archive est la manière dont les multiples fichiers vont être groupés (parfois en subissant des pré-traitements) avant d'être donnés à manger à l'algorithme de compression (ce qui peut avoir un impact sur l'efficacité de la compression). L'archiveur détermine aussi comment les fichiers sont organisés dans son format d'archive et fournit généralement des outils particuliers (lister les fichiers contenus dans une archive, extraire un seul fichier, chiffrer les fichiers, découper l'archive en plusieurs morceaux, etc.)
    • Exemples de formats d'archive : zip, 7z, rar, arj, cab…

Certains archiveurs sont liés à certains algorithmes. À titre d'exemple:

  • L'archiveur 7-Zip utilise généralement l'algorithme lzma.
  • L'archiveur zip utilise l'algorithme Deflate.
  • Pour le .tar.gz (courant sous Linux), l'archiveur est tar qui groupe les fichiers avant de les donner à compresser à gzip (qui utilise aussi l'algorithme Deflate).
Cas particulier de certains logiciels de compression sous Linux: Certains logiciels de compression (gzip, zstd, bzip2, etc.) ne savent compresser qu'un seul fichier à la fois. Ils ne savent pas faire d'archive. Pour ces logiciels, il faut passer par tar pour créer une archive unique à partir des différents fichiers. Ce fichier tar sera ensuite compressé (d'où les .tar.gz, .tar.zst, .tar.bz2…)

⚖️ Le compromis

Certains algorithmes de compression compressent mieux que d'autres, mais pour vous le choix va généralement se faire sur ce critère:

compression-curseur.png

Vous allez devoir choisir si vous voulez compresser plus ou moins vite ou plus ou moins fort. Car généralement compresser plus fort prend plus de temps. C'est à vous de voir où vous voulez mettre le curseur.

Le choix sera aussi impacté par:

  • La disponibilité des outils de compression/décompression sur les différentes plateformes (si vous voulez décompresser du lrzip sous Windows ça risque d'être compliqué).
  • La nature et la quantité des données que vous avez à compresser (Inutile de dépensez beaucoup de CPU à essayer de compresser des jpg ou des vidéos !)
  • Le fait que le format d'archive enregistre ou non certaines informations propres à votre système d'exploitation (Méta-données: droits sur les fichiers, propriétaire, etc.) et le fait que vous en ayez besoin ou non.
  • Le fait que certains formats d'archive sont restreints à certains algorithmes (Le format d'archive zip ne sait compresser qu'avec Deflate).
  • Le fait que certains algorithmes n'ont pas forcément la même vitesse de compression et de décompression (Allez-vous passer plus de tremps à compresser ou à décompresser ?)
  • La fréquence à laquelle vous avez besoin de compresser/décompresser (Allez-vous décompresser souvent les fichiers ? Avez-vous besoin d'accéder rapidement aux données ?)
  • La puissance CPU, la quantité de mémoire vive, l'espace de stockage ou les débits dont vous disposez. (Certains algorithmes nécessitent beaucoup de CPU et/ou de mémoire vive pour décompresser.)
  • L'impact du format d'archive sur votre utilisation (par exemple 7z ou tar exige de décompresser une grosse partie de l'archive même si vous ne voulez qu'un seul fichier)
  • Les options proposées par l'algo de compression ou le format d'archive (réglage de la "puissance" de la compression, découpage des archives en morceaux, chiffrement, etc.)
  • Le fait que certains archiveurs ou algorithmes soient soumis à des brevets ou sont propriétaires (préférer les algos Libres et documentés, les formats pérennes). Vous n'avez pas envie de ne plus pouvoir décompresser parce que la société qui édite votre logiciel de compression a mis la clé sous la porte.
  • La protection des données offerte par l'archive (sommes de contrôle, protections contre la corruption des données…)

Alors on choisit quoi ?

Je vais faire un conseil général simple:

Utilisez 7-Zip (format d'archive .7z)

Vraiment, utilisez le format .7z.

Pourquoi ?

  • Le logiciel est Libre et gratuit.
  • Il existe sous Linux, Windows et à peu près tous les systèmes d'exploitation.
  • C'est un format portable (Vous pouvez créer une archive sous Linux et la décompresser sous Windows, et inversement).
  • Il est très performant sur un grand nombre de types de données. C'est même l'un des algorithmes les plus performants existants (bien meilleur que zip).
  • Il fonctionne bien sur de petits ou de gros ensembles de données.
  • C'est un format ouvert, bien documenté et Libre (donc pérenne).
  • Le compresseur est performant (capable d'utiliser tous les coeurs de votre CPU).
  • Le format d'archive est efficace (compression de l'indexe des fichiers, par exemple, ce que ne fait pas le format zip).
  • Il est adapté à la puissance de nos ordinateurs actuels (Les temps de (dé)compression sont raisonnables sur un CPU moderne, et la quantité de mémoire consommée est compatible avec la majorité des PC actuels.)
  • L'archiveur offre suffisamment d'options (découpage, chiffrement, choix du taux de compression…)
  • Si vous avez besoin de compresser vite, pas besoin de changer d'outils : Baissez juste le taux de compression (Fast).

C'est vraiment à l'heure actuelle le meilleur choix.

  • Sous Linux, votre distribution supporte probablement déjà nativement 7z. Sinon il y a des paquets pour ça (par exemple le paquet p7zip-full sous Ubuntu et dérivées). Sinon vous pouvez télécharger la dernière version sur le site officiel (https://www.7-zip.org/download.html)
  • Sous Windows, téléchargez depuis le site officiel : https://www.7-zip.org/download.html

🚗💨 Vous voulez (dé)compresser plus vite ?

Alors prenez lz4. Il est extrêmement rapide et garde malgré tout un bon taux de compression. C'est le meilleur moyen de gagner de la place rapidement. C'est également utile sur les CPU très modestes.

Inconvénients:

  • Il n'est généralement disponible que sous Linux (et pas sous Windows).
  • Il faut passer par tar pour les archives (.tar.lz4)

Mais la vitesse de compression est hallucinante (On parle là de 500 Méga-octets par seconde par coeur à la compression, et plusieurs Giga-octets par seconde en décompression).


💪 Vous voulez compresser plus fort ?

Et bien croyez-le ou non, 7-Zip est probablement déjà le meilleur choix. Vous pouvez demander à 7-Zip d'essayer de compresser plus fort les données avec l'option "Ultra" (-mx=9 en ligne de commande). Pensez toujours à bien activer l'option "Archive solide" (active par défaut en ligne de commande).

Pour aller plus loin, vous pouvez utiliser les options un peu particulières choisies par PeaZip pour 7-Zip (à la place du -mx=9). Cela permet généralement de gagner encore quelques méga-octets :

-m0=LZMA2 -mmt=on -mx9 -md=64m -mfb=64 -ms=16g -mqs=on -sccUTF-8

Et si vos données dépassent 2 Giga-octets, il est possible que zpaq ou lrzip vous donnent de meilleurs résultats que 7-Zip.

(Conseil: zpaq en mode -m4 compresse remarquablement bien dans un temps raisonnable. Je déconseille l'option -m5: Elle est encore plus puissante mais les temps de (dé)compression explosent.)


Mais on m'a dit qu'il fallait utiliser zstd !

Il existe bien d'autres algos et formats d'archive.

  • zstd est un très bon algorithme généraliste amené à remplacer le vénérable gzip utilisé depuis toujours sous Linux. À taux de compression égale, il est plus rapide que gzip. Il est utile quand on compresse/décompresse souvent des données, et son taux de compression est ajustable pour s'adapter à différents cas d'utilisation. Tout comme gzip, il ne sait pas faire d'archives et il faut passer par tar pour en créer. Par rapport à 7z il compresse moins bien, et sous Windows l'utilisation de ce format est encore compliquée.
  • xz est excellent. Plus puissant que zstd, il utilise le même algorithme que 7-Zip (lzma), mais il ne sait compresser qu'un fichier à la fois. Il faut donc passer par tar pour créer des archives. Mais vous ne bénéficiez pas de l'intelligence de 7-Zip pour le groupement des fichiers (ce qui peut avoir un impact sur la taille de l'archive finale), ni de diverses autres options (chiffrement, découpage…). xz n'est pas non plus répandu sous Windows.
  • Certains formats ne sont plus vraiment intéressants:
    • De par ses performances, bzip2 n'est plus vraiment intéressant.
    • gzip est un grand classique, mais surpassé par zstd. Toutefois gzip est probablement le format le plus répandu au monde, il est donc disponible vraiment partout.

Notes

  • Attention à certains formats que je vous déconseille:
    • rar a des performances relativement bonnes et il est assez populaire, mais c'est un format propriétaire aux mains d'une société privée.
    • freearc est extrêmement performant, mais le programme est dans un état douteux (plus de site officiel, abandonné un moment et plus ou moins repris).
    • zip est certes répandu, mais il pose divers problèmes (encodage du nom de fichiers) et ses performances de compression sont ridicules.
  • La quasi-totalité de ces formats archives sont conçues pour détecter les corruptions de données, mais dans ce cas toute la partie de l'archive qui se situe après l'endroit corrompu est généralement illisible. Il existe assez peu de formats d'archives résistants à cela (zip et fsarchiver).
  • Notez que certains systèmes de fichiers sont capables de compresser nativement et automatiquement, comme btrfs. Dans ce cas, créer temporairement une archive ne permettra pas forcément de gagner de la place.
  • tar n'est pas super efficace (il faut généralement le décompresser en entier juste pour obtenir la liste des fichiers), mais il a l'avantage de conserver les droits des fichiers spécifiques à Linux (et aux systèmes POSIX). Par exemple 7z ne va pas conserver le propriétaire du fichier, mais sera capable de mémoriser le flag "exécutable" de Linux.
  • Beaucoup de distributions Linux n'ont pas forcément la toute dernière version de 7-Zip. (Typiquement Ubuntu a 7-Zip 16.02 alors que le site officiel a la 22.01). Les nouvelles version ont souvent des opitimisations qui améliorent le temps de compression (et souvent aussi un peu la compression). Instructions pour installer la version ligne de commande officielle:
    • Allez sur https://www.7-zip.org/download.html et téléchargez la version Linux (typiquement la "64-bit Linux x86-64")
    • Décompressez le fichier 7zXXXX-linux-x64.tar.xz
    • Puis:
      sudo cp 7zz* /usr/local/bin
    • Vous pouvez maintenant utiliser 7zz (au lieu de 7z) en ligne de commande pour compresser.

À faire:

  • Donner des exemples de ligne de commande ? (7z, lz4, zstd, zpaq, lrzip…)
  • Donner des éléments de comparaison ? (temps/taux de compression des différents programmes)
  • Parle de 2 avantages de zip :1) il est possible d'extraire directement un seul fichier. 2) Il est possible de mettre à jour 1 seul fichier de l'archive sans avoir à tout recompresser (avec 7z, il faut tout décompresser et recompresser).
compression.txt · Dernière modification : 2023/03/29 07:07 de sebsauvage