Gibt es einen parallelen Dateiarchivierer (wie tar)?

40

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.

Supercheetah
quelle
7
Teer ist mehr als nur Bänder. Der Name kam ursprünglich vom Band, aber heutzutage wird er hauptsächlich verwendet, um Dinge zur Neuverteilung in eine einzelne Datei zu packen und dabei die Verzeichnisstrukturinformationen mit optionaler Komprimierung beizubehalten.
Kevin M
Es gibt eine ganze Reihe von parallelen Komprimierungswerkzeugen, die hier als Benchmark aufgeführt sind. Allerdings muss noch eine parallele Version von tar
p4guru gefunden werden.
Keine der angegebenen Antworten (einschließlich der akzeptierten) behandelt Verzeichnisse , soweit ich das beurteilen kann - sie behandeln Dateien . Ich sehe nur, dass ich zipmit Verzeichnissen umgehen kann: |
Warren
1
Eigentlich , was wir in der Regel tun , ist zu verpacken Verzeichnisse in tarArchiven, und dann das Paket komprimieren eine Datei Kompressor mit (wie gzip, pigzusw.). 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 ähnlich zip, aber vielseitiger.
Gerlos

Antworten:

36

Ich denke, Sie suchen nach pbzip2:

PBZIP2 ist eine parallele Implementierung des bzip2-Block-Sorting-Dateikomprimierers, der Pthreads verwendet und auf SMP-Maschinen eine nahezu lineare Beschleunigung erzielt.

Schauen Sie sich die Projekthomepage an oder überprüfen Sie Ihr bevorzugtes Paket-Repository.

Echox
quelle
1
Sie können auch versuchen pigzund pxzfür parallele Implementierungen von gzipund xz. Sie können mit einem Befehl wie komprimieren tar c dir | pigz -c > dir.tar.gzund mit dekomprimieren pigz -cd dir.tar.gz | tar xf -.
Gerlos
3
Kommandos wären heute tar -cf dir.tar.gz -I pigz dirund tar -xf dir.tar.gz -I pigz. Ist auch xzeingefädelt: benutze XZ_OPT=-T0 tar -cJf dir.tar.gz dirund XZ_OPT=-T0 tar -xJf dir.tar.gz.
Rich
21

7zip kann auf mehreren Threads ausgeführt werden, wenn das -mmtFlag 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:

7z a -mmt foo.7z /opt/myhugefile.dat
fschmitt
quelle
7z ist ein netter Archivierer mit guter Unterstützung für die Steuerung der Kompromisse zwischen Komprimierungsrate und Kompensations- / Dekompensationszeit, wahlfreiem Zugriff und besserer Komprimierung und dergleichen. Es speichert jedoch nicht annähernd so viele Metadaten wie tar, Sie verlieren Eigentümer / Berechtigungen.
Peter Cordes
Es sieht so aus, als ob diese Option standardmäßig aktiviert ist - zumindest habe ich keine Leistungssteigerung damit und die Ausgabe von 7z hat in beiden Fällen eine Linie über die Anzahl der Kerne meiner CPU.
Andrey Starodubtsev
14

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.

robbat2
quelle
11
tar --use-compress-program=pigz  ....

Ersetzen Sie sie pigzdurch Ihr bevorzugtes paralleles Komprimierungsprogramm. Der Grund für die Verwendung tarist, 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).

uDude
quelle
4
tar -c --use-compress-program = pigz -f myDirectory.tar.gz myDirectory /
markusN
1
Alle Optionen, AFAIK für tar, können normal zusammen mit der -IOption verwendet werden, die mit identisch ist --use-compress-program. So kann zB tar cvzf /some/dir/yournewarchive.tar.gz /directory/tobecompressed --exclude="/directo...."auf die Multithread-Option mit pigzas zugegriffen werden tar -I pigz -cvf /some/dir/yournewarchive.tar.gz /directory/tobecompressed --exclude="/directo...". Dies ist die beste und passendste Antwort, IMHO. Vielen Dank, @uDude! :)
ILMostro_7
10

pigz ist eine parallele Implementierung von gzip, kann jedoch nur mehrere Prozessoren für die Komprimierung und nicht für die Dekomprimierung verwenden.

Jay Hacker
quelle
2
Habe einige Experimente gemacht und pigzscheint tatsächlich in der Lage zu sein, auch beim Dekomprimieren mehrere Threads zu verwenden . Versuchen Sie, die Ausgabe von time tar xf dir.tar.gzund von zu vergleichen time pigz -cd dir.tar.gz | tar xf -(auf meiner 4-Kern-CPU dauert es etwas weniger als die Hälfte der Zeit).
Gerlos
4
@gerlos Bei Verwendung timein einer Pipeline wird nur der erste Befehl angezeigt . Aus der pigzDokumentation : "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. "
augurar
1
Es gibt auch Pixz .
Marc. 2377
8

tarist 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. Ich pbzip2komprimiere die Tar-Archive, die ich für Systemsicherungen verwende, mit sehr guten Ergebnissen.

Dieser Befehl sollte den Trick machen.

tar -cpS "infile" | pbzip2 > "outfile"

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).

lovot
quelle
4

Ein weiterer Anwärter ist lbzip2. Es ist ziemlich ähnlich zu pbzip2

Felipe Alvarez
quelle
1

Soweit die Komprimierung berücksichtigt wird, unterstützt xzab Version 5.2 die parallele Komprimierung über die -TOption.

peterph
quelle