Réparation du système
de fichiers (ext2 et ext3)

(Écrit en orthographe recommandée. Voir note en bas de page)


Lors du démarrage, après un arrêt brutal du système, un message vous informe que une (ou plusieurs) partitions n'ont pas été démontées proprement et qu'un check forcé est effectué (pour les utilisateurs de Windows, ça peut faire penser à un scandisk en mode texte).

Normalement, tout se passe bien et les conséquences sont juste une perte de temps.
N.B. Pour éviter ces inconvénients, l'utilisation de systèmes de fichiers journalisés (ext3, reiserfs,...) est une bonne idée.

Mais parfois, le système de fichiers d'une (ou plusieurs) partition est trop endommagé pour pouvoir être monté (vous aurez un message d'erreur du style "Too many filesystems mounted " --> Trop de systèmes de fichiers montés" ou "Can't read superblock" --> "Impossible de lire le superbloc"

Les conséquences sont évidentes : vous ne pouvez plus monter la (ou les ) partition endommagée et vous ne pouvez donc plus lire, écrire, sauvegarder les données et programmes qui y sont.

Parfois même, c'est la partition racine (ou une partition indispensable au démarrage) qui est endommagée et dans ce cas-là c'est pire puisque le système ne peut même plus démarrer, même pas en mode failsafe...

Bref, vous êtes pas mal embêté :-( Je suis bien placé pour le savoir, je suis passé par là moi aussi.

Je vais donc vous indiquer les manoeuvres que j'ai utilisées : avec un peu de chance, elles fonctionneront chez vous et il y aura plus de peur que de mal (je vous rappelle que c'est sur un système de fichiers ext2fs ou ext3fs). N'oubliez tout de même pas qu'il est prudent de faire des sauvegardes régulières de vos données (vous en faites, n'est-ce pas?) et que je ne vous garantis rien du tout, à part que sur mon PC, ça a toujours fonctionné et que je n'ai jamais perdu ni données, ni programmes.


  1. Avec quel système allez-vous intervenir ?


  1. Comment procéder ?


    Très bonne question ! Je connais deux moyens, qui arriveront au même point, à savoir le montage et la réparation de la partition en question :

    1. la commande e2fsck
    2. la commande mount avec l'option -o sb
  1. La commande e2fsck
Vous allez utiliser (en tant que root) la commande e2fsck sur la partition concernée. Vérifiez bien qu'elle n'est pas montée (oui, je sais, ce n'est pas drôle...) avec la commande mount ou df. Supposons que c'est la partion /dev/hdb6 qu'il faut réparer. Vous taperez alors : e2fsck /dev/hdb6

    (peu importe si c'est du ext2fs ou du extfs, vu que c'est pratiquement la même chose). Le programme vous demandera surement de confirmer chaque action (le choix par défaut étant "yes" (Y/n), il suffit d'appuyer sur la touche "Entrée". Comme ça peut être fastidieux et très long, vous pouvez rajouter l'option -y qui répond "Yes" à toutes les questions :

    e2fsck -y /dev/hdb6

    Petit rappel : pour interrompre le check, il faut faire CTRL + C

    Souvent, ça se passe bien ;-)

    Mais parfois, ça se passe mal :'-(

    Le programme vous informe qu'il ne peut pas réparer, car il ne peut pas lire ce qu'on appelle le superbloc qui contient des informations vitales sur le système de fichiers. Le superbloc est abimé et donc e2fsck ne peut plus rien faire pour votre système de fichiers. Heureusement, des copies du superbloc sont réparties sur le système de fichiers (vous avez eu peur, hein ?). Il vous faudra les indiquer à e2fsck car il ne peut pas les trouver automatiquement. Étant organisés par groupes de blocs de 8192 blocs (par défaut), il vous faudra lancer la commande e2fsck en lui spécifiant de ne pas utiliser le premier superbloc qui se trouve au bloc 1 puisque celui-ci est abimé, mais d'utiliser le suivant qui se trouve au bloc 1+8192=8193.

    On lancera donc la commande suivante :

    e2fsck -f -b 8193 /dev/hdb6
    (mais à tous les coups, ça ne marchera pas avec la valeur qui est donnée par défaut dans le man [8192+1] et il faudra utiliser 32768+1; voir les explications au n° 2)

  1. Un message d'erreur... Dans ce cas, il faut essayer le superbloc suivant 1+8192=8193 et ainsi de suite, la formule étant 1+n.8192 (ou alors changer la taille du groupe de blocs : voir plus bas)

  2. Ça marche ! Des messages "Pass1... Pass2..." s'affichent. Là aussi, si vous voulez répondre "Yes" à toutes les questions, rajoutez l'option -y :

    e2fsck -f -y -b 8193 /dev/hdb6


  1. Quelle taille de superbloc utiliser ?

    "Qu'est-ce que c'est que ce truc ?" pensez-vous.

    En fait, il y a de fortes chances (si on peut dire) que ça ne marche pas avec les blocs 8193, 16385,... mais avec le bloc 32769. En effet, 8192 est la valeur par défaut, mais ce n'est pas obligatoirement celle de VOTRE système de fichiers. Il me semble qu'habituellement, c'est plutôt le quadruple, c'est-à-dire 32768. Vous pouvez le vérifier avec le programme dumpe2fs /dev/hdb6 qui vous affichera des informations sur le système de fichiers. Cherchez une ligne qui commence par "Blocks per group": vous y trouverez la valeur qu'il vous faut... sauf que ça ne fonctionnera pas si le premier superbloc est abimé (décidément, ce n'est pas votre jour de chance !).

    Sinon, on peut aussi essayer avec mk2fs -n /dev/hdb6 (NE SOURTOUT PAS OUBLIER le * -n * sinon vous formateriez votre partition :-((
    Vous devriez avoir une réponse qui ressemble à ça :
    Archive du superbloc stockée sur les blocs :
            32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
            4096000, 7962624, 11239424


 Donc,

En supposant que la valeur est bien 32768, vous essayerez avec 32769

    e2fsck -f -y -b 32769 /dev/hdb6

    Si ça ne marche pas, vous essayerez avec 1+n.32768

  1. La commande mount avec l'option sb=
La commande mount comporte une option intéressante (sb=) qui permet de monter la partition en utilisant un autre superblock que le premier. Pour connaitre le nombre à mettre après sb= vous pourrez utiliser là aussi la commande mk2fs -n /dev/hdb6 (NE SOURTOUT PAS OUBLIER le -n sinon vous formateriez votre partition :-((
Le résultat ressemblera à ça :

Archive du superbloc stockée sur les blocs:
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
        4096000, 7962624, 11239424

Il vous suffira alors de multiplier ces nombres par la taille des blocs de votre système de fichiers (surement 4ko)
Exemple : 32768 x 4 = 131072 et donc la commande sera :
mount -o sb=131072   /dev/hdb6  /mnt/point_de-montage

    Avec un peu de chance, vous vous en sortirez avec une belle frayeur et une histoire fantastique à raconter à vos petits enfants... Dernièrement, il m'a fallu essayer le quatrième superbloc avant de réussir : les trois premiers étaient abimés. Une solution serait d'écrire un script qui teste les superblocs les uns après les autres jusqu'à trouver le bon, mais je ne suis pas assez calé dans ce domaine: si le coeur vous en dit...

    Bon courage.

Parfois, il y a des problèmes avec ext3fs lorsque le journal est abimé. Quel est le rôle de ce journal ? Il sert notamment à éviter le check au démarrage après un arrêt brutal et donc un démarrage plus rapide. J'ai eu une fois un problème au démarrage, car bien qu'ayant suivi la procédure décrite au-dessus, mon système se bloquait pendant le démarrage. J'avais un "kernel panic" à cause d'un "Ext3-fs: invalide journal inode. Mount: error 22 mounting ext3 flags kernel panic: No init found. Try passing init=option to kernel"



(A FINIR) désolé;-)

logo orthographe recommandée


N.B. L'Académie française a approuvé à l'unanimité un certain nombre de rectifications.
Ces rectifications sont désormais inscrites dans les programmes du ministère français de l'éducation nationale (BO n°5 du 12 avril 2007).
Pour en savoir plus http://www.orthographe-recommandee.info/

Attention ! Ces rectifications ne sont PAS de simples tolérances, mais fixent la NOUVELLE orthographe de certains mots.