[[Vorlage(Getestet, jammy)]] {{{#!vorlage Wissen [:Pakete installieren: Installation von Programmen] [:Terminal: Ein Terminal öffnen] }}} [[Inhaltsverzeichnis()]] [[Bild(zstd_logo.png, 64, align=left)]] [http://facebook.github.io/zstd/ Zstandard] {en} (kurz: zstd) ist ein Kompressionsverfahren für Dateien. zstd ist das jüngste der gängigen Kompressionsverfahren. Es kombiniert die Vorteile mehrerer Algorithmen wie [wikipedia:LZ77:] und [wikipedia: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 {{{#!vorlage Paketinstallation zstd }}} installiert werden[1]. = Nutzung = Die allgemeine Syntax von zstd lautet: {{{#!vorlage Befehl 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. {{{#!vorlage Befehl 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 {{{#!vorlage 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: {{{#!vorlage Tabelle <-2 tableclass="zebra_start3" rowclass="titel" :>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 {{{#!vorlage Befehl zstd -d DATEI.zst #oder unzstd DATEI.zst }}} == Informationen zu gepackter Datei anzeigen == Mit dem Aufruf von {{{#!vorlage Befehl 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: [[Vorlage(Befehl, "zstd --train PFAD/ZU/TRAININGSDATEIEN/* -o TRAININGWÖRTERBUCH")]] * Dann können die Dateien optimiert gepackt werden: [[Vorlage(Befehl, "zstd -D TRAININGWÖRTERBUCH DATEI(EN)")]] * Zum Entpacken wird das Trainingswörterbuch auch benötigt: [[Vorlage(Befehl, "zstd -d -D TRAININGWÖRTERBUCH DATEI.zst")]] Weitere Informationen zu diesem Thema findet man in der [https://zstd.docsforge.com/dev/getting-started/#the-case-for-small-data-compression Dokumentation] {en}. == 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: {{{#!vorlage Befehl 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: {{{#!vorlage Befehl 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:] {Übersicht} Übersichtsartikel zu Archivierungsmethoden und -Programme == Extern == * [https://facebook.github.io/zstd/ Projektseite] {en} von zstd * [https://zstd.docsforge.com/ Dokumentation] {en} von zstd * [github:facebook/zstd:Github-Seite] von zstd #tag: Packprogramme, Archivmanager, Komprimierung