Gibt es etwas für die parallele Archivierung von Dateien?
Tar ist großartig, aber ich verwende keine Bandarchive und es ist mir wichtiger, dass die Archivierung schnell (mit Komprimierung wie bzip2) erfolgt, da ich smp habe.
performance
tar
archive
Supercheetah
quelle
quelle
zip
mit Verzeichnissen umgehen kann: |tar
Archiven, und dann das Paket komprimieren eine Datei Kompressor mit (wiegzip
,pigz
usw.). Sie können dies in zwei Schritten tun, aber auch in einem einzigen Schritt , da sie Datenströme von der Standardeingabe / -ausgabe verarbeiten können. Die Ergebnisse sind sehr ähnlichzip
, aber vielseitiger.Antworten:
Ich denke, Sie suchen nach pbzip2:
Schauen Sie sich die Projekthomepage an oder überprüfen Sie Ihr bevorzugtes Paket-Repository.
quelle
pigz
undpxz
für parallele Implementierungen vongzip
undxz
. Sie können mit einem Befehl wie komprimierentar c dir | pigz -c > dir.tar.gz
und mit dekomprimierenpigz -cd dir.tar.gz | tar xf -
.tar -cf dir.tar.gz -I pigz dir
undtar -xf dir.tar.gz -I pigz
. Ist auchxz
eingefädelt: benutzeXZ_OPT=-T0 tar -cJf dir.tar.gz dir
undXZ_OPT=-T0 tar -xJf dir.tar.gz
.7zip kann auf mehreren Threads ausgeführt werden, wenn das
-mmt
Flag gesetzt ist, aber nur beim Komprimieren in 7z-Archiven, die eine gute Komprimierung bieten, aber im Allgemeinen langsamer als zip sind, um Archive zu erstellen. Mach so etwas:quelle
Das OP fragte nach paralleler Archivierung, nicht nach paralleler Komprimierung.
Wenn das Quellmaterial aus einem Dateisystem stammt, in dem sich möglicherweise unterschiedliche Verzeichnisse / Dateien auf unterschiedlichen Datenträgern befinden, oder sogar von einem einzelnen schnellen Datenträger, der die Eingabegeschwindigkeit der Komprimierungstools überschreitet, kann es in der Tat vorteilhaft sein, mehrere Eingabeströme zu haben in die Kompressionsschichten gehen.
Es stellt sich die sinnvolle Frage, wie die Ausgabe aus einem Parallelarchiv aussieht. Es ist nicht mehr nur ein einzelner Dateideskriptor /
stdout
, sondern ein Dateideskriptor pro Thread.Ein Beispiel hierfür ist der parallele Speicherauszugsmodus von Postgresql
pg_dump
, bei dem ein Speicherauszug in ein Verzeichnis erstellt wird, in dem Threads über die zu sichernden Tabellen arbeiten (Arbeitswarteschlange mit mehreren Threads, die die Warteschlange belegen).Ich bin mir nicht sicher, ob es sich tatsächlich um Mainstream-Parallelarchivierer handelt. Es gab einen Hack für Solaris Tar zur Verwendung in ZFS: http://www.maier-komor.de/mtwrite.html
Es gibt einige dedizierte Sicherungstools, mit denen mehrere Threads erfolgreich ausgeführt werden. Es gibt jedoch noch viele andere Tools, mit denen die Arbeitslast nur nach Verzeichnissen auf hoher Ebene aufgeteilt wird.
quelle
Ersetzen Sie sie
pigz
durch Ihr bevorzugtes paralleles Komprimierungsprogramm. Der Grund für die Verwendungtar
ist, dass der Besitzer, die Gruppe und die Berechtigungen gespeichert werden können. Diese Metadaten sind häufig nützlich (z. B. Wiederherstellen eines Verzeichnisbaums in einem komplexen System).quelle
-I
Option verwendet werden, die mit identisch ist--use-compress-program
. So kann zBtar cvzf /some/dir/yournewarchive.tar.gz /directory/tobecompressed --exclude="/directo...."
auf die Multithread-Option mitpigz
as zugegriffen werdentar -I pigz -cvf /some/dir/yournewarchive.tar.gz /directory/tobecompressed --exclude="/directo..."
. Dies ist die beste und passendste Antwort, IMHO. Vielen Dank, @uDude! :)pigz ist eine parallele Implementierung von gzip, kann jedoch nur mehrere Prozessoren für die Komprimierung und nicht für die Dekomprimierung verwenden.
quelle
pigz
scheint tatsächlich in der Lage zu sein, auch beim Dekomprimieren mehrere Threads zu verwenden . Versuchen Sie, die Ausgabe vontime tar xf dir.tar.gz
und von zu vergleichentime pigz -cd dir.tar.gz | tar xf -
(auf meiner 4-Kern-CPU dauert es etwas weniger als die Hälfte der Zeit).time
in einer Pipeline wird nur der erste Befehl angezeigt . Aus derpigz
Dokumentation : "Die Dekomprimierung kann nicht parallelisiert werden, zumindest nicht ohne speziell dafür vorbereitete Deflate-Streams. Folglich verwendet pigz einen einzelnen Thread (den Haupt-Thread) für die Dekomprimierung, sondern erstellt drei weitere Threads zum Lesen. Schreiben und Berechnen überprüfen, was unter bestimmten Umständen die Dekomprimierung beschleunigen kann. "tar
ist einfach ein Archivformat, das sehr gut darin ist, die Dateien genau zu duplizieren und den Verzeichnisbaum und die ursprünglichen Dateiattribute beizubehalten. TAR eignet sich sehr gut zum Erstellen von Backups, da alles erhalten bleibt. Ichpbzip2
komprimiere die Tar-Archive, die ich für Systemsicherungen verwende, mit sehr guten Ergebnissen.Dieser Befehl sollte den Trick machen.
pbzip2
LZMA-Komprimierung (wie pxz) verwendet beim Komprimieren / Dekomprimieren großer Dateien eine TONNEN RAM (ich habe versucht, 8 Threads mit 8 GB RAM auszuführen, und pxz hat mit dem Auslagern auf die Festplatte begonnen).quelle
Ein weiterer Anwärter ist
lbzip2
. Es ist ziemlich ähnlich zu pbzip2quelle
Soweit die Komprimierung berücksichtigt wird, unterstützt
xz
ab Version 5.2 die parallele Komprimierung über die-T
Option.quelle