Skip to content

Was ist der Unterschied zwischen verschiedenen "Kompressionssystemen"?

Ich begrüße Sie beim Online-Projekt, hier finden Sie die Auflösung, nach der Sie gesucht haben.

Lösung:

tar steht für Bandarchivierung. Dabei werden Dateien und ihre Metadaten (Berechtigungen, Besitzverhältnisse usw.) in einen Bytestrom gepackt, der auf einem Bandlaufwerk (oder in einer Datei) gespeichert und später wiederhergestellt werden kann. Die Komprimierung ist eine völlig separate Angelegenheit, bei der man früher die Ausgabe durch ein externes Dienstprogramm leiten musste, um sie zu komprimieren, wenn man das wollte. GNU tar war so nett, Schalter hinzuzufügen, um die Ausgabe automatisch durch das entsprechende Dienstprogramm als Abkürzung zu leiten.

Zip und 7z kombinieren die Archivierung und Komprimierung in ihrem eigenen Containerformat, und sie sind dafür gedacht, Dateien auf einem DOS/Windows-System zu packen, also speichern sie keine Unix-Berechtigungen und Besitzverhältnisse. Wenn Sie also Berechtigungen für korrekte Backups speichern wollen, müssen Sie bei tar bleiben. Wenn Sie vorhaben, Dateien mit Windows-Benutzern auszutauschen, dann ist zip oder 7z gut geeignet. Die eigentlichen Kompressionsalgorithmen von zip und 7zip können mit tar verwendet werden, indem man gzip und lzma verwendet werden.

lzma (auch bekannt als *.xz) hat eine der besten Komprimierungsraten und ist recht schnell bei der Dekomprimierung, was es heutzutage zu einer Top-Wahl macht. Die Komprimierung erfordert jedoch eine Menge Speicherplatz und Rechenzeit. Das altehrwürdige gzip ist bei der Komprimierung um einiges schneller und kann daher verwendet werden, wenn Sie nicht so viel Rechenzeit aufwenden wollen. Es gibt auch eine noch schnellere Variante namens lzop. bzip2 ist immer noch recht populär, da es gzip eine Zeit lang weitgehend ersetzte, bevor 7zip/lzma aufkam, da es bessere Kompressionsraten erzielte, aber heutzutage fällt es in Ungnade, da 7z/lzma schneller bei der Dekompression ist und bessere Kompressionsraten erzielt. Die compress das normalerweise Dateien mit *.Z benennt, ist uralt und längst vergessen.

Ein weiterer wichtiger Unterschied zwischen zip und tar besteht darin, dass zip die Daten in kleinen Stücken komprimiert, während beim Komprimieren einer tar-Datei die gesamte Datei auf einmal komprimiert wird. Letzteres bietet eine bessere Komprimierungsrate, aber um eine einzelne Datei am Ende des Archivs zu extrahieren, müssen Sie das gesamte Archiv dekomprimieren, um an die Datei zu gelangen. Daher eignet sich das zip-Format besser zum Extrahieren einer oder zweier Dateien aus einem großen Archiv. 7z und dar bieten die Möglichkeit, das gesamte Archiv zu komprimieren (sogenannter "solid"-Modus) oder kleine Teile für eine einfache stückweise Extraktion zu wählen.

Die Details der Algorithmen sind hier nicht Thema 1 da sie in keiner Weise spezifisch für Linux sind, geschweige denn für Ubuntu. Sie finden jedoch einige schöne Informationen hier.

Nun weiter zu tarwie du schon sagtest, tar ist kein Komprimierungsprogramm und war es auch nie. Stattdessen ist es ein Archivierungsprogramm; sein Hauptzweck ist es, aus vielen kleinen Dateien eine große zu machen. Historisch gesehen war dies, um die Speicherung auf Bandlaufwerken zu erleichtern, daher der Name: Tape ARchive.

Heute ist der Hauptgrund für die Verwendung von tar ist es, die Anzahl der Dateien auf Ihrem System zu verringern. Jede Datei in einem Unix-Dateisystem belegt einen Inode. Je mehr Dateien Sie haben, desto weniger Inodes stehen zur Verfügung, und wenn Sie keine Inodes mehr haben, können Sie keine neuen Dateien mehr erstellen. Einfach ausgedrückt: Die gleiche Menge an Daten, die in Tausenden von Dateien gespeichert ist, nimmt mehr Platz auf der Festplatte ein als die gleichen Dateien in einem einzigen tar-Archiv.

Zur Veranschaulichung, da dies in den Kommentaren bestritten wurde, auf meiner 68G / Partition habe ich die folgende Anzahl an gesamten und verwendeten Inodes (bedenke, dass die Anzahl der Inodes vom Dateisystemtyp und der Größe der Partition abhängt):

Inode count:              393216
Free inodes:              171421

Wenn ich nun versuche, mehr Dateien zu erstellen, als ich Inodes habe:

$ touch {1..171422}
touch: cannot touch ‘171388’: No space left on device
touch: cannot touch ‘171389’: No space left on device
touch: cannot touch ‘171390’: No space left on device
touch: cannot touch ‘171391’: No space left on device
touch: cannot touch ‘171392’: No space left on device
touch: cannot touch ‘171393’: No space left on device
touch: cannot touch ‘171394’: No space left on device
touch: cannot touch ‘171395’: No space left on device
touch: cannot touch ‘171396’: No space left on device
touch: cannot touch ‘171397’: No space left on device

Kein Platz? Aber ich habe jede Menge Platz:

$ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1       5,8G  4,3G  1,2G  79% /

Wie Sie oben sehen können, werden durch das Erstellen einiger hunderttausend leerer Dateien meine Inodes schnell aufgebraucht und ich kann keine neuen mehr erstellen. Wenn ich tar würde ich wieder Dateien erstellen können.

Weniger Dateien zu haben, beschleunigt auch die E/A des Dateisystems erheblich, insbesondere bei über NFS gemounteten Dateisystemen. Ich tarne immer meine alten Arbeitsverzeichnisse, wenn ein Projekt beendet ist, denn je weniger Dateien ich habe, desto schneller sind Programme wie find arbeiten.

Es gibt eine großartige Antwort auf Super User, die weit mehr ins Detail geht, aber zusätzlich zu den oben genannten, die anderen grundlegenden Gründe, warum tar auch heute noch beliebt ist, sind:

  1. Effizienz: Die Verwendung von tar durch ein Komprimierungsprogramm zu leiten, wie gzip ist effizienter, da es die Erstellung von Zwischendateien vermeidet.

  2. tar kommt mit allerlei Schnickschnack daher, Funktionen, die im Laufe seiner langen Geschichte entwickelt wurden und die es besonders nützlich für *nix-Backups machen (man denke an Berechtigungen, Dateibesitz, die Fähigkeit, Daten direkt nach STDOUT und über eine SSH-Verbindung zu leiten ...)

  3. Trägheit. Wir sind daran gewöhnt tar. Es ist sicher anzunehmen, dass es auf jedem *nix verfügbar ist, das Sie zufällig benutzen, was es sehr portabel und praktisch für Quellcode-Tarballs macht.


1 Das ist absolut wahr und hat nichts mit der Tatsache zu tun, dass ich nicht genug über sie weiß, um es zu erklären 🙂

Es gibt zwei verschiedene, aber verwandte Aufgaben. Das Packen eines Baumes von Dateien
(einschließlich Dateinamen, Verzeichnisstruktur, Dateisystemberechtigungen,
Eigentümerschaft und andere Metadaten) in einen Bytestrom zu packen, nennt man
Archivierung. Das Entfernen von Redundanz in einem Bytestrom zur Erzeugung eines
kleineren Bytestrom zu erzeugen, heißt Komprimierung ..

Unter Unix sind die beiden Operationen getrennt, mit eigenen Werkzeugen für
beide. Auf den meisten anderen Plattformen (aktuell und historisch) führen kombinierte Werkzeuge
sowohl die Archivierung als auch die Komprimierung durchführen.

(gzip und andere Programme, die die Schnittstelle von gzip nachahmen, haben oft die
(gzip und andere Programme, die die Schnittstelle von gzip nachahmen, haben oft die Option, den ursprünglichen Dateinamen in der komprimierten Ausgabe zu speichern, aber
Dies ist zusammen mit einer CRC- oder anderen Prüfung zur Erkennung von Beschädigungen die einzige
die einzigen Metadaten, die sie speichern können.)

Es hat Vorteile, die Komprimierung von der Archivierung zu trennen.
Die Archivierung ist plattformspezifisch (die Metadaten des Dateisystems, die
(die Metadaten des Dateisystems, die erhalten werden müssen, sind sehr unterschiedlich), aber die Implementierung ist einfach,
weitgehend E/A-gebunden und ändert sich im Laufe der Zeit kaum. Die Komprimierung ist plattformunabhängig, aber die Implementierungen sind CPU-abhängig
und die Algorithmen werden ständig verbessert, um die Vorteile der
Ressourcen zu nutzen, die moderne Hardware für das Problem bereitstellen kann.
Problem zu nutzen.

Das beliebteste Unix-Archivierungsprogramm ist tarobwohl es auch andere gibt
wie z.B. cpio und ar. (Debian-Pakete sind ar Archive, während
cpio oft für initiale Ramdisks verwendet wird.) tar ist oder wurde oft
mit Komprimierungswerkzeugen kombiniert, wie z. B. compress (.Z), gzip (.gz),
bzip2 (.bz2) und xz (.xz), vom ältesten zum jüngsten, und nicht
zufällig von der schlechtesten zur besten Kompression.

Herstellung einer tar Archivs und dessen Komprimierung sind getrennte Schritte: Der
Komprimierer weiß nichts über die tar Dateiformat. Das bedeutet, dass
Extrahieren einer einzelnen Datei aus einer komprimierten tar Archivs erfordert
das Dekomprimieren aller vorangegangenen Dateien erfordert. Dies wird oft als ein
"solides" Archiv genannt.

Da es sich bei tar um ein "Streaming"-Format handelt - eine Voraussetzung für die Verwendung in einer
Pipeline nützlich ist, gibt es keinen globalen Index in einem tar-Archiv, und das Auflisten des
Inhalt eines tar-Archivs aufzulisten ist genauso teuer wie das Extrahieren.

Im Gegensatz dazu komprimieren Zip, RAR und 7-zip (die beliebtesten Archivierungsprogramme auf
modernen Windows-Plattformen) in der Regel jede Datei einzeln komprimieren und
komprimieren die Metadaten nur geringfügig oder gar nicht. Dies ermöglicht eine kostengünstige Auflistung der
der Dateien in einem Archiv und die Extraktion einzelner Dateien, aber
bedeutet aber auch, dass die Redundanz zwischen mehreren Dateien im selben Archiv
nicht ausgenutzt werden kann, um die Kompression zu erhöhen. Während im Allgemeinen
das Komprimieren einer bereits komprimierten Datei die Dateigröße nicht weiter verringert
wird, kann es gelegentlich vorkommen, dass eine Zip-Datei in einer Zip-Datei enthalten ist: beim
erste Komprimierung hat viele kleine Dateien in eine große Datei verwandelt (wahrscheinlich
mit deaktivierter Komprimierung), die dann bei der zweiten Komprimierung
als eine einzige Einheit.

Es gibt eine gegenseitige Befruchtung zwischen den verschiedenen Plattformen und
Philosophien: gzip ist im Wesentlichen zipder Kompressor ohne seinen
Archivierer, und xz ist im Wesentlichen 7-zipder Kompressor ohne seinen
Archivierer.

Es gibt noch andere, spezialisierte Kompressoren. PPM-Varianten und ihre
Nachfolger ZPAQ sind auf maximale Kompression optimiert, ohne Rücksicht auf
Ressourcenverbrauch. Sie können leicht so viel CPU und RAM verschlingen, wie
und die Dekomprimierung ist genauso anstrengend wie die Komprimierung
Komprimierung (im Gegensatz dazu sind die am weitesten verbreiteten Komprimierungstools
asymmetrisch: Dekomprimieren ist billiger als Komprimieren).

Am anderen Ende des Spektrums, lzo, snappy und LZ4 sind "leichte"
Kompressoren, die auf maximale Geschwindigkeit und minimalen Ressourcen
auf Kosten der Kompression ausgelegt sind. Sie sind weit verbreitet in
Dateisystemen und anderen Objektspeichern, aber weniger als eigenständige Werkzeuge.


Für welchen sollten Sie sich also entscheiden?

Archivierung:

Da du Ubuntu verwendest, gibt es keinen wirklichen Grund, etwas anderes zu verwenden
als tar für die Archivierung zu verwenden, es sei denn, Sie versuchen, Dateien zu erstellen, die
anderswo leicht lesbar sind.

zip ist an Allgegenwärtigkeit kaum zu überbieten, aber es ist nicht Unix-zentriert und wird
und behält keine Dateisystemberechtigungen und Eigentümerinformationen, und
seine eingebaute Kompression ist veraltet. 7-zip und RAR (und ZPAQ) haben
eine modernere Komprimierung, sind aber ebenso wenig für die Archivierung von Unix
Dateisystemen (obwohl nichts dagegen spricht, sie einfach als
Kompressoren zu verwenden); RAR ist außerdem proprietär.

Komprimierung:

Für maximale Komprimierung können Sie sich einen Benchmark ansehen, z. B. den
enorme auf http://mattmahoney.net/dc/text.html. Dies sollte Ihnen
Sie eine bessere Vorstellung von den damit verbundenen Kompromissen.

Wahrscheinlich wollen Sie aber nicht die maximale Kompression. Das ist viel zu
teuer.

xz ist das beliebteste Allzweck-Kompressionswerkzeug auf modernen Unix
Systemen. Ich glaube, 7-zip kann auch xz-Dateien lesen, da sie eng verwandt sind.
verwandt sind.

Schließlich: Wenn Sie Daten für etwas anderes als die kurzfristige Speicherung archivieren wollen
Daten archivieren wollen, sollten Sie sich für ein quelloffenes und möglichst
weit verbreitet sein, um spätere Kopfschmerzen zu vermeiden.

Sie haben die Möglichkeit, unsere Inhalte aufzuwerten, indem Sie sich mit Ihrer Erfahrung an den Referenzen beteiligen.



Nutzen Sie unsere Suchmaschine

Suche
Generic filters

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.