Ceci est une ancienne révision du document !
Comment réparer une archive corrompue
Dans quel cas utiliser ce tutoriel?
Vous voulez extraire une archive et vous obtenez une erreur du type
bzip2: Data integrity error when decompressing. Input file = (stdin), output file = (stdout) It is possible that the compressed file(s) have become corrupted. You can use the -tvv option to test integrity of such files. You can use the `bzip2recover' program to *attempt* to recover data from undamaged sections of corrupted files. tar: 56 garbage bytes ignored at end of archive tar: Unexpected EOF in archive tar: Unexpected EOF in archive tar: Error is not recoverable: exiting now
Et bien vous avez vraiment pas de chance ! Votre archive est certainement corrompue.
Solution
Avec le gestionnaire d'archive vous récupérez la première partie de l'archive, à savoir toutes les données avant l'erreur dans le fichier.
Pour récupérer la suite taper
bzip2recover nomdelarchive.tar.bz2
Vous obtiendrez une multitude de fichier (de l'ordre de 6000 fichiers pour une archive de 3 Go) Ces fichiers se nomment rec00001nomdelarchive.tar et ainsi de suite.
Ensuite il faut tester chacun des fichiers, pour cela taper
bunzip rec*bz2
Si vous avez un retour "d'argument trop long" dans le terminal essayer par tranche de 1000 (ex: rec01*bz2 puis rec02*bz2 …) si cela est encore trop long, envisager la commande xargs
Vous allez obtenir le nom du fichier corrompu (ex rec003776nomdelarchive.tar) et bien déplacer ce fichier ainsi que ceux situer avant pour n'avoir que les fichiers suivant le fichier corrompu.
Ensuite reconstruisez la suite des fichiers en tapant
cat rec0* > findelarchvie.tar
Récupérer le script ici http://oss.bestsolution.at/documents/find_tar_headers.pl.bz2 qui permet de retrouver les marques d'en-tête, et exécutez-le en tapant:
perl find_tar_headers.pl findelarchive.tar
Une fois lancé, vous pouvez l'arrêter en tapant control + C et repérer les chiffres mentionnés
findelarchive.tar:17185:top/secret/warp_reactor.so:157106 findelarchive.tar:75041:top/secret/kernel_injectors.so:153125 findelarchive.tar:130849:top/secret/dampening_fields.so:145746 findelarchive.tar:183585:top/secret/plasma_controls.so:157035
Le nombre à repérer est celui de la première ligne, dans ce cas il s'agit de 17185
Reconstruisez correctement l'archive en tapant
tail -c +17185 findelarchive.tar > bonnearchive.tar
Évidemment mettez le bon chiffre à la place de 17185
Voilà vous n'avez plus qu'a décompresser la dernière archive ainsi obtenue.