Normalerweise komprimiere ich mit tar zcvf
und dekomprimiere mit tar zxvf
(mit gzip aus Gewohnheit).
Ich habe kürzlich eine Quad-Core-CPU mit Hyperthreading erhalten, daher habe ich 8 logische Kerne, und ich stelle fest, dass viele der Kerne während der Komprimierung / Dekomprimierung nicht verwendet werden.
Gibt es eine Möglichkeit, die nicht verwendeten Kerne zu nutzen, um sie schneller zu machen?
Antworten:
Sie können pigz anstelle von gzip verwenden, wodurch die gzip-Komprimierung auf mehreren Kernen erfolgt. Anstatt die Option -z zu verwenden, würden Sie sie durch pigz leiten:
Standardmäßig verwendet pigz die Anzahl der verfügbaren Kerne oder acht, wenn dies nicht abgefragt werden konnte. Mit -pn können Sie mehr verlangen, z. B. -p 32. pigz hat die gleichen Optionen wie gzip, sodass Sie mit -9 eine bessere Komprimierung anfordern können. Z.B
quelle
Sie können auch das tar-Flag "--use-compress-program =" verwenden, um tar mitzuteilen, welches Komprimierungsprogramm verwendet werden soll.
Verwenden Sie zum Beispiel:
quelle
tar - dir_to_zip | pv | pigz > tar.file
pv hilft mir zu schätzen, du kannst es überspringen. Trotzdem ist es einfacher zu schreiben und sich zu erinnern.man tar
sagt so, wie es tut dies .zstd
ist das schnellste Werkzeug, um dies zu tun. Deutliche Beschleunigung beim Komprimieren und Dekomprimieren. Verwenden Sietar -cf --use-compress-program=zstdmt
dazu Multithreading.Allgemeiner Ansatz
Es gibt eine Option für das
tar
Programm:Sie können die Multithread-Version des Archivierungs- oder Kompressor-Dienstprogramms verwenden.
Die beliebtesten Multithread-Archivierer sind pigz (anstelle von gzip) und pbzip2 (anstelle von bzip2). Zum Beispiel:
Der Archivierer muss -d akzeptieren. Wenn Ihr Ersatzdienstprogramm diesen Parameter nicht hat und / oder Sie zusätzliche Parameter angeben müssen, verwenden Sie Pipes (fügen Sie ggf. Parameter hinzu):
Ein- und Ausgabe von Singlethread und Multithread sind kompatibel. Sie können mit der Multithread-Version komprimieren und mit der Singlethread-Version dekomprimieren und umgekehrt.
p7zip
Für p7zip zur Komprimierung benötigen Sie ein kleines Shell-Skript wie das folgende:
Speichern Sie es als 7zhelper.sh. Hier das Anwendungsbeispiel:
xz
In Bezug auf Multithread-XZ-Unterstützung. Wenn Sie Version 5.2.0 oder höher von XZ Utils ausgeführt werden , können Sie mehrere Kerne für die Kompression durch Setzen nutzen
-T
oder--threads
auf einen entsprechenden Wert über die Umgebungsvariable XZ_DEFAULTS (zBXZ_DEFAULTS="-T 0"
).Dies ist ein Fragment des Menschen für die Version 5.1.0alpha:
Dies funktioniert jedoch nicht für die Dekomprimierung von Dateien, die nicht auch mit aktiviertem Threading komprimiert wurden. Vom Menschen für Version 5.2.2:
Neu kompilieren mit Ersatz
Wenn Sie Teer aus Quellen erstellen, können Sie mit Parametern neu kompilieren
Nachdem Sie tar mit diesen Optionen neu kompiliert haben, können Sie die Ausgabe der Hilfe von tar überprüfen:
quelle
pigz
) nur aktiviert ist, wenn sie aus der Datei liest. Die Verarbeitung von STDIN kann tatsächlich langsamer sein.xz
Option. Es ist der einfachste und effektivste Ansatz.export XZ_DEFAULTS="-T 0"
vor dem Aufruftar
mit Option-J
für die xz-Komprimierung funktioniert wie ein Zauber.Sie können die Verknüpfung
-I
für den--use-compress-program
Schalter von tar verwenden und diepbzip2
bzip2-Komprimierung für mehrere Kerne aufrufen :quelle
tar: home/cc/ziptest: Cannot stat: No such file or directory tar: Exiting with failure status due to previous errors
`Wenn Sie mehr Flexibilität bei Dateinamen und Komprimierungsoptionen wünschen, können Sie Folgendes verwenden:
Schritt 1:
find
find /my/path/ -type f -name "*.sql" -o -name "*.log" -exec
Dieser Befehl sucht nach den Dateien, die Sie archivieren möchten, in diesem Fall
/my/path/*.sql
und/my/path/*.log
. Fügen Sie so viele hinzu,-o -name "pattern"
wie Sie möchten.-exec
führt den nächsten Befehl mit den Ergebnissen ausfind
:tar
Schritt 2:
tar
tar -P --transform='s@/my/path/@@g' -cf - {} +
--transform
ist ein einfacher Parameter zum Ersetzen von Zeichenfolgen. Der Pfad der Dateien wird aus dem Archiv entfernt, sodass das Stammverzeichnis des Tarballs beim Extrahieren zum aktuellen Verzeichnis wird. Beachten Sie, dass Sie die-C
Option nicht zum Wechseln des Verzeichnisses verwenden können, da Sie die Vorteile verlierenfind
: Alle Dateien des Verzeichnisses wären enthalten.-P
weisttar
an, absolute Pfade zu verwenden, damit die Warnung "Führendes` / 'aus Mitgliedsnamen entfernen "nicht ausgelöst wird. Führendes '/' wird--transform
sowieso von entfernt .-cf -
weisttar
an, den Tarballnamen zu verwenden, den wir später angeben werden{} +
verwendet allefind
zuvor gefundenen DateienSchritt 3:
pigz
pigz -9 -p 4
Verwenden Sie so viele Parameter wie Sie möchten. In diesem Fall
-9
ist dies die Komprimierungsstufe und-p 4
die Anzahl der für die Komprimierung vorgesehenen Kerne. Wenn Sie dies auf einem stark belasteten Webserver ausführen, möchten Sie wahrscheinlich nicht alle verfügbaren Kerne verwenden.Schritt 4: Archivname
> myarchive.tar.gz
Schließlich.
quelle
Ein relativ neueres ( De- ) Komprimierungswerkzeug, das Sie möglicherweise in Betracht ziehen möchten, ist zstandard . Es macht einen hervorragenden Job bei der Verwendung von Ersatzkernen und hat einige große Kompromisse hinsichtlich des Kompressionsverhältnisses gegenüber der (De-) Komprimierungszeit gemacht. Es ist auch sehr optimierbar, abhängig von Ihren Anforderungen an das Komprimierungsverhältnis.
quelle