Schnellste Möglichkeit, mehrere Dateien zu einer zusammenzufassen (tar czf ist zu langsam)

23

Momentan laufe ich tar czfum Sicherungsdateien zu kombinieren. Die Dateien befinden sich in einem bestimmten Verzeichnis.

Aber die Anzahl der Dateien wächst. Die Verwendung tzr czfdauert zu lange (mehr als 20 Minuten und Zählen).

Ich muss die Dateien schneller und skalierbarer kombinieren.

Ich habe gefunden genisoimage, readomund mkisofs. Aber ich weiß nicht, welcher am schnellsten ist und welche Einschränkungen für jeden von ihnen gelten.

Najib-botak Chin
quelle
Ich bezweifle, dass tarein erheblicher Overhead entsteht. Das Lesen der Dateien ist hier der teure Vorgang. Sie sollten entweder die Art und Weise ändern, in der Ihre Dateien gespeichert werden, oder einen völlig anderen Ansatz wählen (das gesamte Dateisystem kopieren). Wir können Ihnen nicht viel helfen, ohne zu wissen, wie Ihre Dateien organisiert sind.
Gilles 'SO - hör auf böse zu sein'
5
Hängen Sie Ihren FS mit der Option "noatime" ein und beschleunigen Sie möglicherweise die E / A-Vorgänge.
Rufo El Magufo
2
+1 für Noatime, es macht wirklich einen signifikanten Unterschied. Besonders für normale Festplatten und auch nur zum Reduzieren von unnötigen Schreibvorgängen.
JM Becker

Antworten:

25

Sie sollten prüfen, ob die meiste Zeit für die CPU oder für die E / A aufgewendet wird. In beiden Fällen gibt es Möglichkeiten, dies zu verbessern:

A: nicht komprimieren

Sie erwähnt nicht „Kompression“ in der Liste der Anforderungen so die „z“ versuchen , fallen aus Ihren Argumenten Liste: tar cf. Dies könnte die Dinge etwas beschleunigen.

Es gibt andere Methoden, um den Vorgang zu beschleunigen, z. B. die Verwendung von "-N", um Dateien zu überspringen, die Sie bereits zuvor gesichert haben.

B: sichern Sie die gesamte Partition mit dd

Wenn Sie alternativ eine gesamte Partition sichern, erstellen Sie stattdessen eine Kopie des gesamten Datenträgerabbilds. Dies würde Verarbeitungsaufwand und viel Zeit für die Suche nach Plattenköpfen sparen . tarund jedes andere Programm, das auf einer höheren Ebene arbeitet, hat den Overhead, Verzeichniseinträge und Inodes lesen und verarbeiten zu müssen, um festzustellen, wo sich der Dateiinhalt befindet, und mehr Kopfdatenträgersuchen durchzuführen , wobei jede Datei von einem anderen Ort von der Festplatte gelesen wird.

Um die zugrunde liegenden Daten viel schneller zu sichern, verwenden Sie:

dd bs=16M if=/dev/sda1 of=/another/filesystem

(Dies setzt voraus, dass Sie kein RAID verwenden, wodurch sich die Situation möglicherweise ein wenig ändert.)

Yves Junqueira
quelle
2
nicht komprimieren : oder verwenden, pigzwenn im System mehr als ein Prozessor vorhanden ist.
Rufo El Magufo
LZ4 / zstd-Algorithmen und ähnlich schnelle Komprimierungsalgorithmen können sich dennoch lohnen, um zu überprüfen, ob sie einen Prozess beschleunigen können, indem sie nur weniger Daten schreiben (wenn die Daten überhaupt komprimierbar sind), während sie in der Komprimierung um eine Größenordnung schneller sind, je nachdem jedoch weniger effizient sind level und algorithm, auch man gzip sagt "Die Standardkomprimierungsstufe ist -6", daher gibt es Raum für Verbesserungen.
LiveWireBT
8

Um zu wiederholen, was andere gesagt haben: Wir müssen mehr über die Dateien wissen, die gesichert werden. Ich werde hier mit einigen Annahmen gehen.

An die tar-Datei anhängen

Wenn Dateien nur zu den Verzeichnissen hinzugefügt werden (dh keine Datei wird gelöscht), stellen Sie sicher, dass Sie die vorhandene TAR-Datei anhängen, anstatt sie jedes Mal neu zu erstellen. Sie können dies tun, indem Sie den vorhandenen Archivdateinamen in Ihrem tarBefehl anstelle eines neuen angeben (oder den alten löschen).

Schreiben Sie auf eine andere Festplatte

Das Lesen von derselben Festplatte, auf die Sie schreiben, kann die Leistung beeinträchtigen. Versuchen Sie, auf eine andere Festplatte zu schreiben, um die E / A-Last zu verteilen. Wenn sich die Archivdatei auf demselben Datenträger wie die Originaldateien befinden muss, verschieben Sie sie anschließend.

Nicht komprimieren

Ich wiederhole nur, was @ Yves gesagt hat. Wenn Ihre Sicherungsdateien bereits komprimiert sind, ist eine erneute Komprimierung kaum erforderlich. Sie verschwenden nur CPU-Zyklen.

Barry Brown
quelle
4

Verwendung von Teer mit lz4-Komprimierung wie in

tar cvf - myFolder | lz4 > myFolder.tar.lz4

bietet Ihnen das Beste aus beiden Welten (ziemlich gute Komprimierung UND Geschwindigkeit). Erwarten Sie eine Komprimierungsrate von ca. 3, auch wenn Ihre Daten Binärdateien enthalten.

Weiterführende Literatur: Vergleich von Kompressionsalgorithmen Wie man mit lz4 tariert

StefanQ
quelle
1
Was StefanQ bleibt, ist, dass Sie Ihren Kompressor auswählen müssen, je nachdem, wo sich Ihr Engpass befindet. Denken Sie auch daran, dass Sie die Ausgabe auf einem anderen physischen Speichergerät oder sogar auf einem Remote-Computer speichern können!
Lester Cheung
2

Ich bin überrascht, dass niemand Dump and Restore erwähnt. Es ist viel schneller als dd, wenn Sie freien Speicherplatz im Dateisystem haben.

Beachten Sie, dass Sie je nach Dateisystem möglicherweise verschiedene Tools benötigen:

  • ext2 / 3/4 - Dump und Restore (Paket- Dump in RH / Debian)
  • XFS - xfsdump und xfsrestore (Paket xfsdump in RH / Debian)
  • ZFS - zfs send und zfs recv
  • BTRFS - BTRFS senden und BTRFS empfangen

Beachten Sie, dass einige Programme keine eingebaute Komprimierung haben (alle außer dump) - leiten Sie zu stdout und verwenden Sie pigz nach Bedarf. ;-)

Lester Cheung
quelle