Der schnellste Weg, um tar.gz zu extrahieren

42

Gibt es überhaupt eine tar.gz-Datei schneller zu extrahieren als tar -zxvf filenamehere?

Wir haben große Dateien und versuchen, den Betrieb zu optimieren.

Justin
quelle
2
Finden Sie, dass die $ tar -zxvfMethode IO oder CPU gebunden ist?
EEAA
1
Glaube CPU, wie kann ich das überprüfen?
Justin
5
Nicht direkt verwandt, aber 'z' ist seit 2004 nicht erforderlich / tar v1.1.5 gnu.org/software/tar/#TOCreleases :)
JamesHannah

Antworten:

57

pigz ist eine parallele Version von gzip. Obwohl nur ein einzelner Thread für die Dekomprimierung verwendet wird, werden drei zusätzliche Threads zum Lesen, Schreiben und Überprüfen der Berechnung gestartet. Ihre Ergebnisse können variieren, bei einigen unserer Datensätze konnte jedoch eine deutliche Verbesserung der Dekomprimierung festgestellt werden. Sobald Sie pigz installiert haben, können Sie die tar-Datei extrahieren mit:

pigz -dc target.tar.gz | tar xf -

TimS
quelle
11
+1. FWIW, das kann man auch schreiben als tar -xvf --use-compress-program=pigz filenamehere. ( -zbeläuft sich auf --use-compress-program=gzip.) Alternativ können Sie auch gzipeinen Symlink zu erstellen pigzund weiter verwenden -zxvf.
Ruakh
2
@ruakh, musste ich setzen , -xfnachdem --use-compress-program=pigz, oder ich habe einen Fehler. Aus irgendeinem Grund war es nicht schneller als mit gzipobwohl.
Jonderry
Denn bzip2da ist pbzip2( pfür parallel). tar --use-compress-program=pbzip2 -xvf file.tar.bz2.
AlfC
Gibt es eine Möglichkeit, den pvBefehl zu verwenden, um den Fortschritt anzuzeigen, oder eine gleichwertige Person, während Sie gleichzeitig die --use-compress-program=pigzFlagge verwenden? Während der Komprimierung kann ich dies tun, bin mir gnutar --use-compress-program="pigz | pv" -cf target.tar.gz YourDataaber nicht sicher, wie ich dies während der Dekomprimierung tun soll.
Stefan Lasiewski
13

Wenn der Teerball viele, viele, viele kleine Dateien enthält, brechen Sie den Parameter 'v' ab und versuchen Sie es erneut!

anonym
quelle
3
Ich benutze nie -v param. Ich weiß nicht, warum die Leute so viel Lärm in der Konsole brauchen.
Eimantas
9
@Eimantas Wenn Sie etwas entpacken, das viele Multi-Gigabyte-Dateien enthält, möchten Sie einen Hinweis auf den Fortschritt erhalten. :)
Michael Hampton
@TimHughes: das ist wirklich toll zu wissen, bitte als separate Antwort posten!
smci
Michael Hampton Wenn Sie Multi-Gigabyte-Dateien haben, aber mit einer großen Liste kleiner Dateien gemischt sind, haben Sie einen guten Grund, -v nicht zu verwenden. In meinen lokalen Tests macht es tar sehr langsam, besonders wenn Sie tar auf einem Remote-Server ausführen Über das Terminal schaue ich mir das du-s-Verzeichnis an, damit das Verzeichnis wächst ...
Luciano Andress Martini
Es kann sich lohnen, stattdessen --checkpoint=NUMBER( Fortschrittsmeldungen für jeden NUMMER-ten Datensatz anzeigen ) zu verwenden -v.
Stefan Lasiewski
6

Wenn Sie den Fortschritt sehen möchten, verwenden Sie etwas wie pv. Hier ist ein Beispiel:

pigz -dc mysql-binary-backup.tar.gz | pv | tar xf -
Tim Hughes
quelle