De plus en plus tar
les archives utilisent le format xz
basé sur LZMA2 pour la compression au lieu du traditionnel bzip2(bz2)
compression. En fait kernel.org a fait un retard " Au revoir bzip2 " annonce, 27 décembre 201 , indiquant que les sources du noyau seraient désormais publiées au format tar.gz et tar.xz - et sur la page principale du site Web ce qui est directement proposé se trouve dans tar.xz
.
Y a-t-il des raisons spécifiques expliquant pourquoi cela se produit et quelle est la pertinence de gzip
dans ce contexte?
Pour la distribution d'archives sur Internet, les éléments suivants sont généralement prioritaires:
La mémoire de compression et les exigences du processeur ne sont pas très importantes, car vous pouvez utiliser une grande machine rapide pour cela, et vous ne devez le faire qu'une seule fois.
Comparé à bzip2, xz a un meilleur taux de compression et un temps de décompression (meilleur) inférieur. Cependant, aux paramètres de compression généralement utilisés, il nécessite plus de mémoire pour décompresser[1] et est un peu moins répandu. Gzip utilise moins de mémoire que l'un ou l'autre.
Ainsi, les archives au format gzip et xz sont publiées, vous permettant de choisir:
Il n'y a pas vraiment de combinaison réaliste de facteurs qui vous amènerait à choisir bzip2. Donc, sa suppression progressive.
J'ai regardé les comparaisons de compression dans n article de blog . Je n'ai pas tenté de reproduire les résultats, et je soupçonne que certains d'entre eux ont changé (surtout, je m'attends à ce que xz
se soit amélioré, car c'est le plus récent.)
(Il existe certains scénarios spécifiques où une bonne implémentation de bzip2 peut être préférable à xz: bzip2 peut compresser un fichier avec beaucoup de zéros et de séquences d'ADN du génome mieux que xz. Les nouvelles versions de xz ont maintenant un mode de blocage (facultatif) qui permet la récupération de données après le point de corruption et de compression parallèle et de décompression [en théorie]. Auparavant, seul bzip2 les proposait.[2] Cependant, aucun de ces éléments n'est pertinent pour la distribution du noyau)
1: en taille d'archive, xz -3
est d'environ bzip -9
. Ensuite, xz utilise moins de mémoire pour décompresser. Mais xz -9
(comme, par exemple, utilisé pour les archives tar du noyau Linux) utilise beaucoup plus que bzip -9
. (Et même xz -0
a besoin de plus de gzip -9
).
2: F21 System Wide Change: lbzip2 comme implémentation par défaut de bzip2
Tout d'abord, cette question n'est pas directement liée à tar
. Tar crée simplement une archive non compressée, la compression est ensuite appliquée plus tard.
Gzip est connu pour être relativement rapide par rapport à LZMA2 et bzip2. Si la vitesse est importante, gzip
(en particulier l'implémentation multithread pigz
) est souvent un bon compromis entre la vitesse de compression et le taux de compression. Bien qu'il existe des alternatives si la vitesse est un problème (par exemple LZ4).
Cependant, si un taux de compression élevé est souhaité, LZMA2 bat bzip2
dans presque tous les aspects. La vitesse de compression est souvent plus lente, mais elle se décompresse beaucoup plus rapidement et offre un bien meilleur taux de compression au prix d'une utilisation plus importante de la mémoire.
Il n'y a plus beaucoup de raisons d'utiliser bzip2
, à l'exception de la compatibilité descendante. De plus, LZMA2 a été conçu en pensant au multithreading et de nombreuses implémentations utilisent par défaut des processeurs multicœurs (malheureusement xz
sous Linux ne le fait pas encore). Cela a du sens car les vitesses d'horloge n'augmenteront plus mais le nombre de cœurs augmentera.
Il existe des implémentations bzip2
multithread (par exemple pbzip
), mais elles ne sont souvent pas installées par défaut. Notez également que le bzip2
multithread ne paie vraiment que lorsque la compression alors que la décompression utilise un seul thread si le fichier a été compressé à l'aide d'un bzip2
unique, dans contrairement à LZMA2. Les variantes parallèles bzip2
ne peuvent exploiter les processeurs multicœurs que si le fichier a été compressé à l'aide d'une version parallèle bzip2
, ce qui n'est souvent pas le cas.
Réponse courte : xz est plus efficace en termes de taux de compression. Ainsi, il économise de l'espace disque et optimise le transfert via le réseau.
Vous pouvez le voir Quick Benchmark afin de découvrir la différence par des tests pratiques.
LZMA2 est un système de compression de blocs, contrairement à gzip. Cela signifie que LZMA2 se prête au multi-threading. De plus, si une corruption se produit dans une archive, vous pouvez généralement récupérer les données des blocs suivants avec LZMA2 mais vous ne pouvez pas le faire avec gzip. En pratique, vous perdez l'archive entière avec gzip après le bloc corrompu. Avec une archive LZMA2, vous ne perdez que le ou les fichiers affectés par le ou les blocs corrompus. Cela peut être important dans des archives plus grandes avec plusieurs fichiers.