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

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.


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.


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


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?


-1

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

gzrecover foo.tar.gz
cpio -F foo.tar.recovered -i -v

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,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.