Immer mehr tar Archive Verwenden Sie das auf LZMA2 basierende Format xz für die Komprimierung anstelle des herkömmlichen bzip2(bz2) Komprimierung. Tatsächlich machte kernel.org am 27. Dezember 2013 eine späte Ankündigung „ Good-bye bzip2 Die Angabe von Kernelquellen würde ab diesem Zeitpunkt sowohl im tar.gz- als auch im tar.xz-Format veröffentlicht – und auf der Hauptseite der -Website , was direkt ist angeboten wird in tar.xz.

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

Antwort

Zum Verteilen Bei Archiven über das Internet haben folgende Dinge im Allgemeinen Priorität:

  1. Komprimierungsrate (dh 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)

Komprimierungsspeicher & CPU-Anforderungen sind nicht“ t 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 erfordert es jedoch mehr Speicher zum Dekomprimieren von [1] und ist etwas weniger verbreitet. Gzip benötigt weniger Speicher als beide.

Daher werden sowohl Archive im Gzip- als auch im XZ-Format veröffentlicht, sodass Sie Folgendes auswählen können:

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

Es gibt nicht wirklich eine realistische Kombination von Faktoren, die Sie dazu bringen würden, bzip2 auszuwählen. Es wird also 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 xz verbessert wurde, 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 Daten zulässt Wiederherstellung nach dem Punkt der Beschädigung und parallelen Komprimierung und [theoretisch] Dekomprimierung. Bisher bot nur bzip2 diese an. [2] Keines davon ist jedoch für die Kernelverteilung relevant.


1: In der Archivgröße liegt xz -3 bei 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 sogar xz -0 benötigt mehr als gzip -9).

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

Kommentare

  • Beliebiger Kommentar zum Thema Fehlertoleranz oder ist das etwas, das ‚ immer vollständig außerhalb von Komprimierungsalgorithmen implementiert wurde?
  • @illumin É Ausfallsicherheit ‚ kann nicht bereitgestellt werden, ohne das Komprimierungsverhältnis zu beeinträchtigen. ‚ ist ein orthogonales Problem, und während Tools wie Parchive existieren, erledigt die Fehlerbehandlung des Kernel-TCP ‚ die Aufgabe genauso gut.
  • @illumin É Fehlertoleranz (vorausgesetzt, Sie meinen etwas Ähnliches wie par2) ist normalerweise nicht ‚ a Bedenken hinsichtlich der Verteilung von Archiven über das Internet. Downloads werden als zuverlässig genug angesehen (und Sie können sie einfach erneut herunterladen, wenn sie beschädigt wurden). Kryptografische Hashes und Signaturen werden häufig verwendet und erkennen sowohl Korruption als auch Manipulationen. Es gibt Kompressoren, die eine größere Fehlertoleranz bieten, allerdings auf Kosten des Kompressionsverhältnisses. Niemand scheint den Kompromiss für HTTP- oder FTP-Downloads wert zu finden.
  • xz verwendet WENIGER Speicher zum Dekomprimieren.
  • @Mike Hat sich dies geändert, seit ich dies geschrieben habe? In Fußnote 1 wird insbesondere die Speichernutzung erläutert.

Antwort

Erstens steht diese Frage nicht in direktem Zusammenhang zu 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 Geschwindigkeit ankommt, gzip (insbesondere die Multithread-Implementierung pigz ) ist oft ein guter Kompromiss zwischen Kompressionsgeschwindigkeit und Kompressionsverhä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 bzip2 in fast jeder Hinsicht. 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 viel Grund, bzip2 nicht mehr, außer aus Gründen der 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 ansteigen, sondern die Anzahl der Kerne.

Es gibt Multithread-Implementierungen bzip2 (z. B. pbzip ), aber sie werden häufig nicht standardmäßig installiert. Beachten Sie auch, dass bzip2 multithreaded Dies zahlt sich nur beim Komprimieren aus, während bei der Dekomprimierung ein einzelner Thread verwendet wird, wenn die Datei im Gegensatz zu LZMA2 mit einem einzelnen Thread bzip2 komprimiert wurde. Parallel 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.

Kommentare

  • Nun, einige Teere haben eine z Option.
  • “ speed “ sorgt für eine durcheinandergebrachte Antwort. Sie sollten sich auf die Komprimierungsgeschwindigkeit oder die Dekomprimierungsgeschwindigkeit beziehen. Weder pixz noch pbzi p2 oder pigz werden standardmäßig installiert (oder von tar ohne das Flag -I verwendet), aber pixz und pbzip2 beschleunigen die Komprimierung und Dekomprimierung, und pigz dient nur zur Komprimierung.
  • @Tobu xz wird standardmäßig mit Multithreading ausgeführt, sodass in Zukunft keine pixz -Installation erforderlich ist. Auf einigen Plattformen wird xz Threading bereits unterstützt. Während bzip2 wahrscheinlich nie multithreaded wird, da das Format ‚ nicht für Multithreading entwickelt wurde. Darüber hinaus beschleunigt pbzip2 die Dekomprimierung nur, wenn die Datei mit pbzip2 komprimiert wurde, was häufig nicht der Fall ist.
  • @Marco Ich glaube, lbzip2 ermöglicht die parallele Dekomprimierung von Dateien, selbst wenn diese mit einer nicht parallelen Implementierung (z. B. stock bzip2) komprimiert wurden. ‚ ist der Grund, warum ich lbzip2 über pbzip2 verwende. (Es ist möglich, dass sich ‚ dies seit Ihrem Kommentar weiterentwickelt hat.)
  • This makes sense since the clock speeds won't increase any more – was? dass ‚ nicht ganz stimmt. Der Beitrag wurde im Jahr 2014 erstellt, als Intel den i3-4370 mit 3,8 GHz herausbrachte. 2017 veröffentlichte Intel die i7-8700K mit 4,7 GHz. 2018 veröffentlichten sie den i9-9900K bei 5 GHz – und es gibt ‚ wahrscheinlich cpus im Jahr 2015 & 2016, dass ‚ fehlt auch in dieser Liste

Antwort

LZMA2 ist ein Blockkomprimierungssystem gzip ist 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.

Kommentare

  • Dies ist in der Tat eine sehr nützliche und wichtige Unterscheidung!
  • önnen Sie diese Behauptungen mit Quellen belegen? Ich habe noch kein XZ-Wiederherstellungstool gesehen, und meine bekannte Quelle behauptet etwas anderes: nongnu.org/lzip/xz_inadequate.html

Antwort

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

Kommentare

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.