Un peu de geekisme: comment récupérer une partition ReiserFS qui se trouve sur une partition avec des blocs défectueux

J'ai un peu potassé tout ça... (et finalement, ça m'a servi au boulot). Je vous livre ici ce que j'ai fait, car, qui sait, ça pourra peut-être servir à quelqu'un d'autre.

Pour commencer, je vous conseille SystemRescueCD, car il contient un peu tout ce dont on a besoin. Notez que vous aurez besoin d'un espace disque sain de taille égale ou supérieure à celle de la partition que vous voulez récupérer.

Bootez donc sur ce LiveCD fantastique, sur un PC qui contient le disque défectueux et le disque sain. Formatez le disque sain. Dans la suite, nous appellerons la partition défectueuse hdb1 et la partition formatée du disque sain hda1.

Commencez par monter votre partition saine :

$ cd /mnt
$ mkdir hda1
$ mount /dev/hda1 ./hda1
$ cd hda1

Vous vous trouvez à présent sur votre partition saine. Nous allons démarrer le processus de récupération :

$ dd_rescue /dev/hdb1 ./hdb1.reiserfs.dump

Attention, c'est très long (au boulot, ça a pris à peu près 18 heures, pour 54Go avec 8Mo défectueux).

Après cela, il faut vérifier notre partition reiserfs copiée. Si vous avez de la chance et que vous avez de la place, vous pouvez en faire d'abord une copie de sauvegarde :

$ cp hdb1.reiserfs.dump hdb1.reiserfs.bak

Puis appliquez le programme reiserfsck :

$ reiserfsck --check ./hdb1.reiserfs.dump

Ce programme devrait vous dire comment vous pourrez faire pour réparer le système de fichiers. Vous devrez probablement reconstruire entièrement l'arbre du filesystem:

$ reiserfsck --rebuild-tree ./hdb1.reiserfs.dump

Ça prend aussi un peu de temps (environ 30 minutes pour mes 54 Go). Il devrait vous dire combien de répertoires et de fichiers étaient orphelins (dans mon cas : 1000 répertoires et 11000 fichiers).

Après cela, normalement, vous devrez pouvoir monter votre dump.

$ mkdir /mnt/hdb1
$ mount ./hdb1.reiserfs.dump /mnt/hdb1 -o loop
$ cd /mnt/hdb1

Et voilà. Là, vous devriez voir un superbe répertoire lost+found contenant plein de fichiers avec des noms sous forme de deux nombres séparés par un caractère underscore. A priori (mais je n'en suis pas sûr), le premier nombre correspond à l'inode du parent, et le deuxième nombre à l'inode du fichier lui-même. Ainsi, souvent, les fichiers et répertoires qui ont le premier nombre en commun proviennent du même répertoire. Mais ce n'est pas toujours le cas, donc je me trompe sans doute.

Vous pouvez utiliser l'utilitaire file afin de connaitre les types des fichiers; ça aide déjà pas mal. Attention: pour des fichiers Openoffice et des Jar, il reconnait (certes avec raison) des fichiers Zip. Pas très pratique: on est obligé de faire un unzip après coup pour savoir lesquels sont quoi.