Comment récupérer un fichier «tar.gz» corrompu

11

J'ai soudainement eu besoin de récupérer un ancien tar.gzfichier, mais dès que je l'exécute:

tar -zxvf filename.tar.gz

J'ai compris:

gzip: stdin: invalid compressed data--format violated  
tar: Child returned status 1  
tar: Error is not recoverable: exiting now
arrrrgv
la source
8
Est-ce vraiment un tarball compressé? Essayez d'abord la filecommande.
alex
1
Oui, il m'est arrivé plus d'une fois d'avoir obtenu un .tar.gzqui était vraiment un .tar, et même une fois un PDF.
vonbrand

Réponses:

12

Ce que vous devez essayer est le suivant:

  1. Utilisez la filecommande sur l'archive pour voir si elle est reconnue comme des gzipdonnées -ped.
  2. Exécutez strace gunzipsur le fichier. Cela affichera les derniers octets lus dans le fichier, ce qui pourrait vous aider à identifier le point dans le fichier où la corruption se produit.
  3. Exécutez une version de débogage de gunzipunder gdb. Essayez de corriger la section corrompue (vous devez être très chanceux pour pouvoir le faire) et voir si elle peut continuer jusqu'à la fin du fichier.

Selon la nature de la corruption, vous pouvez ou non être en mesure de récupérer vos données.

alex
la source
gunzip filename.tar.gztravaillé pour moi.
Ravi Dhoriya
2

Une récupération complète n'est pas possible. Des formats tels que .zip offrent de meilleures options de protection et de récupération, mais pas complets non plus.

.tar.gz regroupe tous les fichiers ensemble, puis applique une compression. .zip redémarre la compression pour chaque fichier. Par conséquent, dans le fichier .zip, les dommages causés au bloc compressé n'affectent que le fichier auquel ce bloc appartient. Dans .tar.gz, les dommages affecteront tous les fichiers suivants jusqu'au redémarrage de la compression.

anatoly techtonik
la source
que je pensais, bonne explication thx! Je me demande s'il existe d'autres formats aussi bons que zip (mais avec une meilleure compression), mais zip est toujours reconnu partout et est probablement la meilleure option concernant la récupération.
Aquarius Power
1

Exécutez zcat bad.tar.gz > some.taret extrayez cela. Dépasser la partie corrompue du fichier sera difficile. La page de manuel donne des pointeurs sur le format, mais je chercherais d'autres options dans Google.

Êtes-vous sûr que c'est compressé avec gzip? Il pourrait se plaindre car il ne comprend pas le format ...

vonbrand
la source
1

Toutes les recpies s'appliquent uniquement pour extraire les informations du début du fichier au point où l'erreur s'est produite ou où le fichier est coupé.

Malheureusement, aucune recette ne décrit comment récupérer une partie du fichier / flux après la zone de corruption. Quelqu'un at-il cette recette?

Znik
la source
-1

utilisez celui-ci: https://github.com/arenn/gzrt

gzrecover foo.tar.gz
cpio -F foo.tar.recovered -i -v
W4U
la source
Votre commande entraîne un cpio: illegal option -- Fmessage d'erreur.
schily
1
cpio --help vous donne l'option: -F, --file = [[USER @] HOST:] FILE-NAME Utilisez ce FILE-NAME à la place de l'entrée ou de la sortie standard. USER et HOST en option spécifient les noms d'utilisateur et d'hôte en cas d'archive distante
W4U
Vous ne parlez pas abpout cpio, mais d'un clone avec des options spécifiques au fournisseur, voir par exemple schillix.sourceforge.net/man/man1/cpio.1.html Si vous parlez cependant d'un clone au lieu de l'original, vous devez mentionner quel clone vous utilisent.
schily
1
@schilly, je parle d' cpioinclure dans debian. GNU cpio: link
W4U