Retour

Monter un système de fichiers endommagé



Pour différentes raisons, il se peut que le système de fichiers d'une partition ext3 soit endommagé et ne puisse plus être monté.


Avant de réparer le problème, il peut être interessant d'essayer de monter cette partition pour, au moins, faire des sauvegardes.

Première méthode : repérer une archive du superblock et l'utiliser pour monter la partition.

Pour cela on va utiliser mkfs.ext3 avec l'option -n, qui ne créera pas de système de fichiers mais montrera ce qui aurait été réalisé, indiquant par la même occasion l'emplacement des sauvegardes du superblock. Surtout ne pas oublier le -n sinon les données présentes sur le disque seront perdues. Pour notre exemple on prend comme partition /dev/hda3 et la commande serait sudo mkfs.ext3 -n /dev/hda3.
Comme on veut récupérer seulement l'adresse des supers, on va utiliser grep pour n'afficher que les lignes 11 et 12 de la sortie :

:~$ sudo mkfs.ext3 -n /dev/hda3 |sed -n '11,15p'
mke2fs 1.38 (30-Jun-2005)
Archive du superbloc stockée sur les blocs:
        8193, 24577, 40961, 57345, 73729, 204801, 221185

Cette partition utilise des blocks de 1 Ko :
Taille de bloc=1024 (log=0)

Pour monter la partition il suffira donc d'indiquer l'adresse d'un super, par exemple celui situé à 40961.
On va donc monter la partition en lecture seulement ( ro ) :

       :~$ sudo mount /dev/hda3 -t ext3 -o ro,sb=40961 /mnt/

On vérifie le mount :

:~$ mount |grep hda3
/dev/hda3 on /mnt type ext3 (ro,sb=40961)

Plus souvent les blocks auront une taille de 4 Ko, indication donnée par mkfs.ext3 -n ( ou tune2fs -l ) comme dans l'exemple ci-dessous :

:~$ sudo mkfs.ext3 -n /dev/hda2
mke2fs 1.38 (30-Jun-2005)
Étiquette de système de fichiers=
Type de système d'exploitation: Linux
Taille de bloc=4096 (log=2)
Taille de fragment=4096 (log=2)
130048 inodes, 260064 blocs
13003 blocs (5.00%) réservé pour le super usager
Premier bloc de données=0
8 bloc de groupes
32768 blocs par groupe, 32768 fragments par groupe
16256 inodes par groupe
Archive du superbloc stockée sur les blocs:
       32768, 98304, 163840, 229376

Dans ce cas, il faudra multiplier l'adresse des archives par 4. Par exemple 98304 deviendra 98304 * 4 = 393216 et pour monter la partition :

       :~$ sudo mount /dev/hda2 -t ext3 -o ro,sb=393216 /mnt/

On vérifie le mount :

       :~$ mount |grep hda2
       /dev/hda2 on /mnt type ext3 (ro,sb=393216)

La partition est bien montée suivant les indications données. Après avoir fait les sauvegardes des données sur une autre partition, on pourra démonter la partition normalement.


deuxième méthode : repérer la position physique du système de fichiers sur le disque :


Parfois il peut être nécessaire de monter la partition non pas en la désignant par /dev/hdxn mais par son emplacement "physique" sur le disque.

On va utiliser fdisk avec l'option -u pour donner la taille en secteur et -l pour lister les partitions :

:~$ sudo fdisk -lu /dev/hdb

Disque /dev/hdb: 4327 Mo, 4327464960 octets
15 têtes, 63 secteurs/piste, 8944 cylindres, total 8452080 secteurs
Unités = secteurs de 1 * 512 = 512 octets
 
Périphérique Amorce    Début         Fin      Blocs    Id  Système
/dev/hdb1                16065     8450189     4217062+   f  W95 Etendu (LBA)
/dev/hdb5                16128       642599      313236   82  Linux swap / Solaris
/dev/hdb6              642663     5748434     2552886   83  Linux
/dev/hdb7            8241408     8450189       104391   83  Linux
/dev/hdb8   *       5748498     8241344     1246423+  83  Linux

On a donc les positions et tailles en secteurs et la valeur d'un secteur, qui est de 512 octets.

On aurait pu avoir le même résultat avec parted :
sudo parted -s /dev/hdb unit -s print

Maintenant on va monter la partition hdb8 en utilsant ces éléments.
D'abord on va calculer la "position" de la partition en multipliant la valeur secteurs (5748498) par la taille d'un scteur en octets. Pour cela on utilise expr si l'on n'a pas de calculatrice sous la main :

      :~$ expr  5748498 \* 512
      2943230976

aleur que l'on va utiliser pour monter la partition dans un /dev/loop :
On détermine quel est le premier loop libre :

      :~$ sudo losetup -f
      /dev/loop/0

On associe le "périférique" 2943230976 (/dev/hdb) avec /dev/loop0 avec l'option -o de losetup.  
Extrait du man losetup :-o offset   The data start is moved offset bytes into the specified file or device.

      :~$ sudo losetup -o 2943230976 /dev/loop0 /dev/hdb

Puis on monte la partition en ro :

      :~$ sudo mount -o ro -t ext3 /dev/loop0 /mnt/

On vérifie le mount :

      :~$ cat /proc/mounts |grep loop0
      /dev/loop0 /mnt ext3 ro,data=ordered 0 0

Pour démonter la partition :

      :~$ sudo umount /dev/loop0

et on libère loop0:

      :~$ sudo losetup -d /dev/loop0


Retour



Valid HTML 4.01 Transitional        Valid CSS!