Jak odzyskać uszkodzony plik „tar.gz”

11

Nagle musiałem odzyskać stary tar.gzplik, ale jak tylko go uruchomię:

tar -zxvf filename.tar.gz

Rozumiem:

gzip: stdin: invalid compressed data--format violated  
tar: Child returned status 1  
tar: Error is not recoverable: exiting now
arrrrgv
źródło
8
Czy to naprawdę spakowany tarball? fileNajpierw wypróbuj polecenie.
alex
1
Tak, zdarzyło mi się nie raz, że dostałem taki, .tar.gzktóry był naprawdę .tar, a raz nawet PDF.
vonbrand

Odpowiedzi:

12

Powinieneś spróbować:

  1. Użyj filepolecenia w archiwum, aby sprawdzić, czy jest rozpoznawane jako gzipdane -ped.
  2. Uruchom strace gunzipna pliku. Spowoduje to wydrukowanie ostatnich bajtów odczytanych z pliku, co może pomóc zidentyfikować punkt w pliku, w którym następuje uszkodzenie.
  3. Uruchom kompilację debugowania gunzipponiżej gdb. Spróbuj poprawić uszkodzoną sekcję (musisz mieć więcej szczęścia, aby to zrobić) i sprawdź, czy można kontynuować do końca pliku.

W zależności od charakteru uszkodzenia możesz odzyskać swoje dane.

alex
źródło
gunzip filename.tar.gzpracował dla mnie.
Ravi Dhoriya ツ
2

Pełne odzyskanie nie jest możliwe. Formaty takie jak .zip zapewniają lepszą ochronę i opcje odzyskiwania, ale też nie są pełne.

.tar.gz scala wszystkie pliki razem, a następnie stosuje kompresję. .zip ponownie uruchamia kompresję dla każdego pliku. Dlatego w pliku .zip uszkodzenie skompresowanego bloku wpływa tylko na plik, do którego należy ten blok. W pliku .tar.gz uszkodzenie wpłynie na wszystkie kolejne pliki, dopóki kompresja nie zostanie ponownie uruchomiona.

anatoly techtonik
źródło
że myślałem, dobre wyjaśnienie dzięki! Zastanawiam się, czy istnieją inne formaty tak dobre jak zip (ale z lepszą kompresją), ale zip jest zawsze rozpoznawany wszędzie i jest prawdopodobnie najlepszą opcją dotyczącą odzyskiwania.
Wodnik Moc
1

Uruchom zcat bad.tar.gz > some.tari wyodrębnij to. Przejście uszkodzonej części pliku będzie trudne. Strona podręcznika podaje wskaźniki do formatu, ale szukałbym innych opcji w Google.

Czy na pewno jest to skompresowane za pomocą gzip? Może narzekać, ponieważ nie rozumie formatu ...

vonbrand
źródło
1

Wszystkie rekordy dotyczą tylko wyodrębnienia informacji od początku pliku do momentu wystąpienia błędu lub wycięcia pliku.

Niestety, żaden przepis nie opisuje, jak odzyskać część pliku / strumienia po uszkodzeniu. Czy ktoś ma ten przepis?

Znik
źródło
-1

użyj tego: https://github.com/arenn/gzrt

gzrecover foo.tar.gz
cpio -F foo.tar.recovered -i -v
W4U
źródło
Twoje polecenie powoduje cpio: illegal option -- Fwyświetlenie komunikatu o błędzie.
schily
1
cpio --help daje opcję: -F, --file = [[USER @] HOST:] NAZWA PLIKU Użyj NAZWA PLIKU zamiast standardowego wejścia lub wyjścia. Opcjonalne USER i HOST określają nazwy użytkownika i hosta w przypadku zdalnego archiwum
W4U
Nie mówisz o abpout cpio, ale o klonie z opcjami specyficznymi dla dostawcy, patrz np. Schillix.sourceforge.net/man/man1/cpio.1.html Jeśli jednak mówisz o klonie zamiast oryginalnym, powinieneś wspomnieć, który klon należy używają.
schily
1
@schilly, mówię o cpiouwzględnieniu w debianie. GNU cpio: link
W4U,