web-dev-qa-db-fra.com

Comment puis-je récupérer des fichiers à partir d'une archive .tar.gz corrompue?

J'ai un grand nombre de fichiers dans une archive .tar.gz. Vérification du type de fichier avec la commande

file SMS.tar.gz

donne la réponse

gzip compressed data - deflate method , max compression

Lorsque j'essaie d'extraire l'archive avec gunzip, après un certain temps, je reçois le message

gunzip: SMS.tar.gz: unexpected end of file

Existe-t-il un moyen de récupérer même une partie de l'archive?

26
Tom Melluish

Êtes-vous sûr qu'il s'agit d'un fichier gzip? Je voudrais d'abord exécuter le "fichier SMS.tar.gz" pour valider cela.

Ensuite, je lirais la page The gzip Recovery Toolkit .

15
David Segonds

La récupération est possible mais elle dépend de la cause de la corruption.

Si le fichier est juste tronqué, obtenir un résultat partiel n'est pas trop difficile; il suffit de courir

gunzip < SMS.tar.gz > SMS.tar.partial

ce qui donnera une sortie malgré l'erreur à la fin.

Si le fichier compressé contient de gros blocs manquants, il est essentiellement sans espoir après le mauvais bloc.

Si le fichier compressé est systématiquement corrompu de petites manières (par exemple en transférant le fichier binaire en ASCII, qui écrase les retours chariot et les retours à la ligne dans le fichier), il est possible de récupérer mais nécessite beaucoup de temps de la programmation personnalisée, cela ne vaut vraiment la peine que si vous n'avez absolument aucun autre recours (pas de sauvegardes) et que les données valent beaucoup d'efforts. (Je l'ai fait avec succès.) J'ai mentionné ce scénario dans un question précédente .

Les réponses pour les fichiers .Zip diffèrent quelque peu, car les archives Zip ont plusieurs membres compressés séparément, donc il y a plus d'espoir (bien que la plupart des outils commerciaux soient plutôt faux, ils éliminent les avertissements en corrigeant les CRC, pas en récupérant de bonnes données). Mais votre question portait sur un fichier .tar.gz, qui est une archive avec un gros membre.

34
Liudvikas Bukys

Voici un scénario possible que nous avons rencontré. Nous avions un fichier tar.gz qui ne décompressait pas, essayer de décompresser a donné l'erreur:

gzip -d A.tar.gz
gzip: A.tar.gz: invalid compressed data--format violated

J'ai compris que le fichier peut avait été initialement téléchargé sur une connexion ftp non binaire (nous ne savons pas avec certitude).

La solution était relativement simple en utilisant unix dos2unix utilitaire

dos2unix A.tar.gz
dos2unix: converting file A.tar.gz to UNIX format ...
tar -xvf A.tar
file1.txt
file2.txt 
....etc.

Ça a marché! C'est une mince possibilité, et cela vaut peut-être la peine d'essayer - cela peut aider quelqu'un là-bas.

4
Anthony Palmer