Niveau :      
Résumé : dd, dd_rescue, par2

Note : cet article est dépassé et il est temps d'utiliser GNU ddrescue

Il arrive parfois/souvent/tous les jours (adaptez en fonctions de l'âge de votre matériel) que vous ayez à récupérer des données d'un disque abîmé. Ce peut être un CD tout comme un disque dur.

Vous vous retrouvez alors avec vos doigts et votre couteau à tenter de récupérer le peu de données dont vous disposez. Et la lecture pose souvent problème. La solution basique est alors d'utiliser dd et les options seek et skip pour récupérer ce qui est récupérable.

$ dd if=/dev/cdrom of=image.iso bs=1k
> [erreur]
> 1+0 record in
> 1+0 record out
> [blah]
$ dd if=/dev/cdrom of=image.iso bs=1k seek=1 skip=1
> [erreur]
> 4+0 record in
> 4+0 record out
> [blah]
$ dd if=/dev/cdrom of=image.iso bs=1k seek=5 skip=5
> ...

A adapter bien sûr à la quantité et à la position de vos erreurs de lecture.

Pour un fichier mpeg cela peut très bien marcher car il manque peu de données en comparaison de la taille du film. Mais c'est assez lourd de relancer dd à chaque erreur. Après quelques tentatives, on se lasse vite et on se met a sauter de gros blocs, persuadés qu'ils sont tous perdus.

C'est ici qu'intervient dd_rescue. Il fait automatiquement ce que vous faites manuellement, c'est-à-dire appeler dd sur tout le disque et répéter les appels tant qu'il y a une erreur et ne saute le problème qu'après plusieurs tests. De plus il adapte automatiquement la taille des blocs lus et écrits en fonction des erreurs pour récupérer le maximum de données. Ainsi moins de pertes.

Exemple d'utilisation :

$ dd_rescue /dev/cdrom fichier.iso

Et vous obtenez un fichier iso abîmé mais le plus complet possible. Et c'est là que vous serez content d'avoir préparé des fichier par2 pour restaurer tout ça au propre. Et tout est pour le mieux dans le meilleur des mondes.