So stellen Sie eine beschädigte "tar.gz" -Datei wieder her

11

Ich musste plötzlich eine alte tar.gzDatei wiederherstellen , aber sobald ich dies ausführte:

tar -zxvf filename.tar.gz

Ich verstehe das:

gzip: stdin: invalid compressed data--format violated  
tar: Child returned status 1  
tar: Error is not recoverable: exiting now
arrrrgv
quelle
8
Ist das wirklich ein gezackter Tarball? Versuchen fileSie zuerst den Befehl.
Alex
1
Ja, es ist mir mehr als einmal passiert, dass ich eine bekommen habe, .tar.gzdie wirklich eine war .tar, und einmal sogar eine PDF.
Vonbrand

Antworten:

12

Was Sie versuchen sollten, ist Folgendes:

  1. Verwenden Sie den fileBefehl im Archiv, um gzipfestzustellen, ob es als -ped-Daten erkannt wird .
  2. Führen Sie strace gunzipdie Datei aus. Dadurch werden die letzten aus der Datei gelesenen Bytes gedruckt, um den Punkt in der Datei zu identifizieren, an dem eine Beschädigung auftritt.
  3. Führen Sie einen Debug-Build von gunzipunder aus gdb. Versuchen Sie, den beschädigten Abschnitt zu korrigieren (Sie müssen besonders viel Glück haben, um dies zu tun) und prüfen Sie, ob er bis zum Ende der Datei fortgesetzt werden kann.

Abhängig von der Art der Beschädigung können Sie Ihre Daten möglicherweise wiederherstellen oder nicht.

Alex
quelle
gunzip filename.tar.gzarbeitete für mich.
Ravi Dhoriya
2

Eine vollständige Wiederherstellung ist nicht möglich. Formate wie .zip bieten bessere Schutz- und Wiederherstellungsoptionen, sind aber auch nicht voll.

.tar.gz fasst alle Dateien zusammen und wendet dann eine Komprimierung an. .zip startet die Komprimierung für jede Datei neu. Daher wirkt sich in der ZIP-Datei ein Schaden am komprimierten Block nur auf die Datei aus, zu der dieser Block gehört. In .tar.gz wirkt sich der Schaden auf alle nachfolgenden Dateien aus, bis die Komprimierung irgendwie neu gestartet wird.

anatoly techtonik
quelle
dass ich dachte, gute Erklärung thx! Ich frage mich, ob es andere Formate gibt, die so gut sind wie zip (aber mit besserer Komprimierung), aber zip wird immer überall erkannt und ist wahrscheinlich die beste Option für die Wiederherstellung.
Wassermann Power
1

Führen Sie das aus zcat bad.tar.gz > some.tarund extrahieren Sie es. Es wird schwierig sein, an dem beschädigten Teil der Datei vorbeizukommen . Die Manpage gibt Hinweise auf das Format, aber ich würde in Google nach anderen Optionen suchen.

Sind Sie sicher, dass dies mit gzip komprimiert ist? Es könnte sich beschweren, weil es das Format nicht versteht ...

vonbrand
quelle
1

Alle Antworten gelten nur für das Extrahieren von Informationen vom Dateianfang bis zu dem Punkt, an dem ein Fehler aufgetreten ist oder an dem die Datei ausgeschnitten wurde.

Leider beschreibt kein Rezept, wie ein Teil der Datei / des Streams nach einem Beschädigungsbereich wiederhergestellt werden kann. Hat jemand dieses Rezept?

Znik
quelle
-1

Verwenden Sie diese: https://github.com/arenn/gzrt

gzrecover foo.tar.gz
cpio -F foo.tar.recovered -i -v
W4U
quelle
Ihr Befehl führt zu einer cpio: illegal option -- FFehlermeldung.
schily
1
cpio --help gibt Ihnen die Option: -F, --file = [[USER @] HOST:] DATEINAME Verwenden Sie diesen DATEINAMEN anstelle der Standardeingabe oder -ausgabe. Optional geben USER und HOST die Benutzer- und Hostnamen für den Fall eines Remote-Archivs an
W4U
Sie sprechen nicht von abpout cpio, sondern von einem Klon mit herstellerspezifischen Optionen, siehe z. B. schillix.sourceforge.net/man/man1/cpio.1.html. Wenn Sie jedoch von einem Klon anstelle des Originals sprechen, sollten Sie angeben, welchen Klon Sie verwenden benutzen.
schily
1
@schilly, ich spreche von cpioInclude in Debian. GNU cpio: link
W4U