Come recuperare un file “tar.gz” danneggiato


11

Improvvisamente avevo bisogno di recuperare un vecchio tar.gzfile, ma non appena lo eseguo:

tar -zxvf filename.tar.gz

Capisco questo:

gzip: stdin: invalid compressed data--format violated  
tar: Child returned status 1  
tar: Error is not recoverable: exiting now

8
È davvero un tarball gzip? Prova prima a filecomandarlo.
alex

1
Sì, mi è capitato più di una volta di averne ottenuto uno .tar.gzche era davvero un .tar, e una volta persino un PDF.
vonbrand,

Risposte:


12

Quello che dovresti provare è il seguente:

  1. Utilizzare il filecomando sull'archivio per vedere se sono riconosciuti come gzipdati a forma di.
  2. Esegui strace gunzipsul file. Ciò stamperà gli ultimi byte letti dal file che potrebbero aiutarti a identificare il punto nel file in cui si verifica la corruzione.
  3. Esegui una build di debug di gunzipunder gdb. Prova a correggere la sezione danneggiata (devi essere molto fortunato per poterlo fare) e vedere se può continuare fino alla fine del file.

A seconda della natura della corruzione, potresti o non essere in grado di recuperare i tuoi dati.


gunzip filename.tar.gzha funzionato per me.
Ravi Dhoriya ツ


2

Il recupero completo non è possibile. Formati come .zip offrono migliori opzioni di protezione e recupero, ma non sono completi.

.tar.gz raggruppa tutti i file insieme e quindi applica una compressione. .zip riavvia la compressione per ciascun file. Pertanto, nel file .zip un danno arrecato al blocco compresso ha effetto solo sul file a cui appartiene questo blocco. In .tar.gz il danno influenzerà tutti i file successivi fino a quando la compressione non verrà in qualche modo riavviata.


che stavo pensando, buona spiegazione grazie! Mi chiedo se ci sono altri formati validi come zip (ma con una migliore compressione), ma zip è sempre riconosciuto ovunque ed è probabilmente l'opzione migliore per il recupero.
Aquarius Power il

1

Esegui zcat bad.tar.gz > some.tared estrailo. Passare oltre la parte danneggiata del file sarà complicato. La pagina man fornisce indicazioni sul formato, ma vorrei cercare altre opzioni su Google.

Sei sicuro che sia compresso con gzip? Potrebbe lamentarsi perché non capisce il formato ...


1

Tutte le richieste si applicano solo per l'estrazione di informazioni dall'inizio del file al punto in cui si è verificato l'errore o dove viene tagliato il file.

Sfortunatamente nessun destinatario descrive come recuperare parte del file / flusso dopo l'area di corruzione. Qualcuno ha quel destinatario?


-1

usa questo: https://github.com/arenn/gzrt

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

Il tuo comando genera un cpio: illegal option -- Fmessaggio di errore.
schily

1
cpio --help ti dà l'opzione: -F, --file = [[USER @] HOST:] FILE-NAME Usa questo FILE-NAME invece di input o output standard. USER e HOST opzionali specificano i nomi utente e host in caso di un archivio remoto
W4U

Non stai parlando cpiodi un clone, ma di un clone con opzioni specifiche del fornitore, vedi ad esempio schillix.sourceforge.net/man/man1/cpio.1.html Se tuttavia parli di un clone anziché dell'originale, dovresti menzionare quale clone stiamo usando.
schily,

1
@schilly, sto parlando di cpioincludere in debian. GNU cpio: link
W4U,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.