it-swarm.com.de

Warum wechseln Tar-Archivformate zur xz-Komprimierung, um bzip2 zu ersetzen, und was ist mit gzip?

Immer mehr tar Archive verwenden das auf LZMA2 basierende Format xz für die Komprimierung anstelle der herkömmlichen bzip2(bz2) Komprimierung. Tatsächlich machte kernel.org ein spätes " Auf Wiedersehen bzip2 " Ankündigung, 27. Dezember 201 , was darauf hinweist, dass Kernelquellen ab diesem Zeitpunkt sowohl im tar.gz- als auch im tar.xz-Format veröffentlicht werden - und auf der Hauptseite der Website Was direkt angeboten wird, ist in tar.xz.

Gibt es bestimmte Gründe, die erklären, warum dies geschieht und welche Relevanz gzip in diesem Zusammenhang hat?

213
user44370

Bei der Verteilung von Archiven über das Internet haben folgende Dinge im Allgemeinen Priorität:

  1. Kompressionsverhältnis (d. H. Wie klein der Kompressor die Daten macht);
  2. Dekomprimierungszeit (CPU-Anforderungen);
  3. Anforderungen an den Dekomprimierungsspeicher; und
  4. Kompatibilität (wie weit verbreitet das Dekomprimierungsprogramm ist)

Die Anforderungen an den Komprimierungsspeicher und die CPU sind nicht sehr wichtig, da Sie dafür eine große schnelle Maschine verwenden können und dies nur einmal tun müssen.

Im Vergleich zu bzip2 hat xz ein besseres Komprimierungsverhältnis und eine geringere (bessere) Dekomprimierungszeit. Bei den normalerweise verwendeten Komprimierungseinstellungen ist jedoch mehr Speicher zum Dekomprimieren erforderlich[1] und ist etwas weniger verbreitet. Gzip benötigt weniger Speicher als beide.

Daher werden Archive im gzip- und xz-Format veröffentlicht, sodass Sie Folgendes auswählen können:

  • Auf einem Computer mit sehr begrenztem Speicher (<32 MB) muss dekomprimiert werden: gzip. Gegeben, nicht sehr wahrscheinlich, wenn es um Kernelquellen geht.
  • Minimale verfügbare Tools müssen dekomprimiert werden: gzip
  • Möchten Sie Downloadzeit und/oder Bandbreite sparen: xz

Es gibt keine wirklich realistische Kombination von Faktoren, die Sie dazu bringen würden, sich für bzip2 zu entscheiden. Also wird es auslaufen.

Ich habe mir Komprimierungsvergleiche in einem Blog-Beitrag angesehen. Ich habe nicht versucht, die Ergebnisse zu replizieren, und ich vermute, dass sich einige davon geändert haben (meistens erwarte ich, dass sich xz verbessert hat, da es das neueste ist.)

(Es gibt einige spezielle Szenarien, in denen eine gute bzip2-Implementierung xz vorzuziehen ist: bzip2 kann eine Datei mit vielen Nullen und Genom-DNA-Sequenzen besser komprimieren als xz. Neuere Versionen von xz verfügen jetzt über einen (optionalen) Blockmodus, der die Datenwiederherstellung ermöglicht nach dem Punkt der Korruption und parallelen Komprimierung und [theoretisch] Dekomprimierung. Bisher bot nur bzip2 diese an.[2] Keines davon ist jedoch für die Kernelverteilung relevant.


1: In Archivgröße xz -3 Ist in der Gegend bzip -9. Dann verwendet xz weniger Speicher zum Dekomprimieren. Aber xz -9 (wie z. B. für Linux-Kernel-Tarballs verwendet) verwendet viel mehr als bzip -9. (Und selbst xz -0 braucht mehr als gzip -9).

2: F21 Systemweite Änderung: lbzip2 als Standardimplementierung von bzip2

206
derobert

Erstens steht diese Frage nicht in direktem Zusammenhang mit tar. Tar erstellt lediglich ein unkomprimiertes Archiv. Die Komprimierung wird später angewendet.

Gzip ist im Vergleich zu LZMA2 und bzip2 als relativ schnell bekannt. Wenn es auf die Geschwindigkeit ankommt, ist gzip (insbesondere die Multithread-Implementierung pigz ) oft ein guter Kompromiss zwischen Komprimierungsgeschwindigkeit und Komprimierungsverhältnis. Obwohl es Alternativen gibt, wenn Geschwindigkeit ein Problem ist (z. B. LZ4).

Wenn jedoch ein hohes Komprimierungsverhältnis gewünscht wird, schlägt LZMA2 in fast jeder Hinsicht bzip2. Die Komprimierungsgeschwindigkeit ist häufig langsamer, dekomprimiert jedoch viel schneller und bietet ein viel besseres Komprimierungsverhältnis auf Kosten einer höheren Speichernutzung.

Es gibt nicht mehr viel Grund, bzip2 Zu verwenden, außer für die Abwärtskompatibilität. Darüber hinaus wurde LZMA2 im Hinblick auf Multithreading entwickelt, und viele Implementierungen verwenden standardmäßig Multicore-CPUs (xz unter Linux tut dies leider noch nicht). Dies ist sinnvoll, da die Taktraten nicht mehr steigen, sondern die Anzahl der Kerne.

Es gibt Multithread-Implementierungen bzip2 (Z. B. pbzip ), die jedoch häufig nicht standardmäßig installiert werden. Beachten Sie auch, dass sich Multithreaded bzip2 Nur beim Komprimieren wirklich auszahlt, während bei der Dekomprimierung ein einzelner Thread verwendet wird, wenn die Datei mit einem einzelnen Thread komprimiert wurde bzip2 Im Gegensatz zu LZMA2. Parallele bzip2 - Varianten können Multicore-CPUs nur nutzen, wenn die Datei mit einer parallelen bzip2 - Version komprimiert wurde, was häufig nicht der Fall ist.

47
Marco

Kurze Antwort : xz ist hinsichtlich des Komprimierungsverhältnisses effizienter. Das spart Speicherplatz und optimiert die Übertragung über das Netzwerk.
Sie können dies sehen Quick Benchmark , um den Unterschied durch praktische Tests zu entdecken.

20
Slyx

LZMA2 ist ein Blockkomprimierungssystem, gzip hingegen nicht. Dies bedeutet, dass sich LZMA2 für Multithreading eignet. Wenn in einem Archiv eine Beschädigung auftritt, können Sie mit LZMA2 im Allgemeinen Daten aus nachfolgenden Blöcken wiederherstellen, mit gzip jedoch nicht. In der Praxis verlieren Sie das gesamte Archiv mit gzip nach dem beschädigten Block. Bei einem LZMA2-Archiv verlieren Sie nur die Datei (en), die von den beschädigten Blöcken betroffen sind. Dies kann in größeren Archiven mit mehreren Dateien wichtig sein.

19
Mark Warburton