zstd
Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:
Ubuntu 22.04 Jammy Jellyfish
Du möchtest den Artikel für eine weitere Ubuntu-Version testen? Mitarbeit im Wiki ist immer willkommen! Dazu sind die Hinweise zum Testen von Artikeln zu beachten.
Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:
Zstandard 🇬🇧 (kurz: zstd) ist ein Kompressionsverfahren für Dateien. zstd ist das jüngste der gängigen Kompressionsverfahren. Es kombiniert die Vorteile mehrerer Algorithmen wie LZ77 und Entropiekodierung. Während andere Verfahren entweder auf hohe Geschwindigkeit oder eine hohe Kompressionsrate optimiert sind, kann zstd in einer breiten Spanne von hoher Kompressionsrate bis hoher Geschwindigkeit genutzt werden. Des Weiteren hat zstd einen Modus, mit dem sich (viele) kleine Dateien effektiv komprimieren lassen.
zstd wurde bei Facebook entwickelt, die Version 1.0 erschien im Sommer 2016. zstd kommt in vielen Projekten zum Einsatz. Der Linux-Kernel unterstützt zstd als Komprimierungsverfahren unter anderem für die Dateisysteme BtrFS und SquashFS. Einige Linuxdistributionen wie z.B. Arch und Fedora komprimieren die Paket in deren Paketquellen mit zstd.
Installation¶
zstd ist in den Ubuntu Paketquellen enthalten und kann über das Paket
zstd
Befehl zum Installieren der Pakete:
sudo apt-get install zstd
Oder mit apturl installieren, Link: apt://zstd
installiert werden[1].
Nutzung¶
Die allgemeine Syntax von zstd lautet:
zstd [OPTIONEN] EINGABEDATEI(EN) [-o AUSGABEDATEI]
Übergibt man mehr als eine Eingabedatei und lässt die Option -o AUSGABEDATEI
weg, dann wird für jede Eingabedatei eine komprimierte Datei erzeugt. Gibt man -o AUSGABEDATEI
bei mehreren Eingabedateien an, werden diese alle zusammen in AUSGABEDATEI
gepackt.
Dateien packen¶
Der Aufruf von z.B.
zstd data.txt
würde die Datei data.txt mit der Kompressionsstufe 3 (Voreinstellung von zstd) komprimieren und die komprimierten Daten in die Datei data.txt.zst speichern. Als Ausgabe bei der Ausführung des Befehls erhält man:
data.txt : 33.97% ( 1201 => 408 bytes, data.txt.zst)
Es wird also ausgegeben, welche Ausgabedatei generiert wird und wie hoch der Komprimierungsgrad ist.
Möchte man mehrere Dateien in eine komprimieren, nutzt man den Befehl
zstd data1.txt data2.txt -o data_compressed.zst
Die Ausgabe sieht dann z.B. so aus:
zstd: WARNING: all input files will be processed and concatenated into a single output file: data_comp The concatenated output CANNOT regenerate the original directory tree. 2 files compressed : 43.92% ( 1874 => 823 bytes)
zstd kennt viele Optionen, von denen die wichtigsten hier aufgeführt sind:
Optionen von zstd | |
Option | Erklärung |
-KOMPRESSIONSLEVEL | Die Komprimierung wird mit dem Kompressionslevel KOMPRESSIONSLEVEL durchgeführt, dieser kann zwischen 1 und 19 liegen. Voreinstellung ist 3 |
--ultra | Erlaubt noch höhere Kompressionslevel zwischen 20 und 22. Diese hohen Kompressionslevel verbrauchen (deutlich) mehr RAM als die Kompressionslevel 1 bis 19. |
--fast[=STUFE] | Auf schnelle Komprimierung wechseln. Optional kann die Stufe STUFE angegeben werden, diese kann zwischen 1 und 19 liegen. Wird die Option --fast angeben, wird die Option -KOMPRESSIONSLEVEL ignoriert. |
-TANZAHL | ANZAHL von Threads verwenden. Voreinstellung ist -T1 (=ein Thread). Gibt man -T0 an, wird die Anzahl der Threads gleich der Anzahl der CPU-Kerne gewählt. |
-d , --decompress | Datei entpacken |
Alle weiteren Optionen lassen sich entweder in der Man-Page lesen oder über den Aufruf von zstd -h
anzeigen.
Dateien entpacken¶
Zum Entpacken dient der Befehl
zstd -d DATEI.zst #oder unzstd DATEI.zst
Informationen zu gepackter Datei anzeigen¶
Mit dem Aufruf von
zstd -l data.txt.zst
werden Informationen zu einer gepackten Datei angezeigt. Die Ausgabe sieht z.B so aus:
Frames Skips Compressed Uncompressed Ratio Check Filename 1 0 1.19 KB 1.17 KB 0.988 XXH64 data1.txt.zst
optimiertes Packen von kleinen Dateien¶
zstd kennt eine Methode vom optimierten Packen vieler kleiner Dateien. Dazu müssen Trainingsdaten vorhanden sein, also Daten, die typisch / representative für die später zu packenden Dateien sind. Mit deren Hilfe legt zstd ein Trainingwörterbuch an. Dieses Wörterbuch muss dann beim Packen und (!) Entpacken angegeben werden, um ein besseres Ergebnis zu erhalten.
Das prinzipielle Vorgehen ist wie folgt:
Zuerst wird das Trainingswörterbuch TRAININGSWÖRTERBUCH angelegt:
zstd --train PFAD/ZU/TRAININGSDATEIEN/* -o TRAININGWÖRTERBUCH
Dann können die Dateien optimiert gepackt werden:
zstd -D TRAININGWÖRTERBUCH DATEI(EN)
Zum Entpacken wird das Trainingswörterbuch auch benötigt:
zstd -d -D TRAININGWÖRTERBUCH DATEI.zst
Weitere Informationen zu diesem Thema findet man in der Dokumentation 🇬🇧.
Benchmarking¶
zstd bietet eine bzw. zwei Optionen zum Benchmarking, mit der die Komprimierungsgeschwindigkeit des Systems und der Komprimierungsgrad einer Datei getestet werden kann. Dabei wird keine gepackte zstd-Datei auf dem Laufwerk angelegt. Der Befehl lautet:
zstd -b5 EINGABEDATEI.txt
Dabei würde die Datei EINGABEDATEI.txt testweise auf Stufe 5 komprimiert und das Ergebnis ausgeben. Statt 5 kann natürlich auch jede anderen Stufe zwischen 1 und 19 angegeben werden.
Man kann auch mehrere Kompressionsstufen in einem Durchlauf testen. Mit dem folgenden Befehl von Stufe 1 bis einschließlich Stufe 19:
zstd -b1 -e19 EINGABEDATEI.txt
Die Ausgabe sieht z.B. so aus:
1#data3.txt : 2139 -> 1048 (2.041), 220.3 MB/s , 504.5 MB/s 2#data3.txt : 2139 -> 1057 (2.024), 204.1 MB/s , 466.2 MB/s 3#data3.txt : 2139 -> 1042 (2.053), 182.5 MB/s , 461.5 MB/s ... 18#data3.txt : 2139 -> 1013 (2.112), 7.57 MB/s , 466.1 MB/s 19#data3.txt : 2139 -> 1013 (2.112), 7.56 MB/s , 465.7 MB/s
Ausgegeben wird also die Kompressionsstufe, die Ausgangsgröße der Datei, die Größe, die die komprimierte Datei hätte, der Kompressionsfaktor sowie der erreichte Datendurchsatz beim Komprimieren und Dekomprimieren.
Links¶
Intern¶
Archivmanager Übersichtsartikel zu Archivierungsmethoden und -Programme
Extern¶
Projektseite 🇬🇧 von zstd
Dokumentation 🇬🇧 von zstd
Github-Seite von zstd