Trucs:Récupérer une partition /boot corrompue

De Lea Linux
Aller à la navigation Aller à la recherche
lea(anne)<anne@lea-linux.org>

Vous venez pour une raison ou pour une autre de perdre tout ou partie de votre partition /boot. Pas de panique, il vous reste une solution avant la réinstallation complète. Attention ceci ne fonctionnera que dans le cas où vous avez prévu un système de fichiers dédié à /boot.

Exemple : extrait du fichier /etc/fstab :

/dev/hda7 / ext3 noatime 1 1
/dev/hda5 /boot ext3 noatime 1 2
none /dev/pts devpts mode=0620 0 0
/dev/hda10 /home ext3 noatime 1 2
/dev/hda8 /usr ext3 noatime 1 2
/dev/hda9 /var ext3 noatime 1 2
/dev/hda6 swap swap defaults 0 0

Quelques conseils à suivre pour vous faciliter la vie dans ce genre de situation (à prévoir avant le plantage bien sûr :p) :

  • conserver une copie de votre noyau dans l'arborescence, généralement dans /usr/src/linux-xxx/arch/i386/boot.
  • si vous n'avez pas de copie de noyau, conserver au moins une copie de /usr/src/linux-xxx/.config pour pouvoir procéder rapidement à la création d'un noyau.
  • prévoir bien évidemment de découper votre système en plusieurs systèmes de fichiers séparés afin de limiter la casse en cas d'endommagement d'une partie du système.

Les étapes pour restaurer /boot :

  • Booter avec un système de secours. La knoppix constitue dans ce cas de figure un excellent support. Les CD de votre distribution permettent souvent de jouer ce rôle. Par exemple, sous Mandriva, démarrez sur le CD n°1, puis tapez [F1], puis "rescue" et [Entrée].
  • Monter la partition / puis chrooter l'environnement :
    • # mount /dev/hda1 /mnt
      (remplacez hda1 par votre partition racine)
    • # chroot /mnt
  • Monter l'ensemble des partitions avec la commande mount -a.
  • Reformater la partition /boot (qui n'aura pas été montée) :
    Exemple : # mke2fs -j /dev/hda5
    pour un formattage en ext3.
  • Monter /boot : # mount /dev/hda2 /boot
    (ici aussi, adaptez pour hda2)
  • Récupérer le package lilo pour en extraire le fichier boot.b
    Exemple : à partir d'une Red Hat 8.0
    • transformer le rpm en archive cpio
      # rpm2cpio lilo-21.4.4-20.i386.rpm > lilo-21.4.4-20.i386.rpm.cpio
    • extraire les répertoires
      # cpio -i --make-directories < lilo-21.4.4-20.i386.rpm.cpio
    • vous obtenez alors une sous-arborescence, dans laquelle vous trouverez un répertoire boot:
      # ls boot
      boot.b chain.b os2_d.b
      Voilà notre fichier boot :). A copier dans /boot.
      Remarque : vous pouvez aussi lancer Midnight Commander (commande mc) qui sait se déplacer dans un package rpm, et copier le fichier boot.b dans /boot grâce à lui.
  • Copier le noyau dans le répertoire /boot. Vérifier que le nom correspond bien à celui spcifié dans /etc/lilo.conf.
    Remarque : si vous n'avez procédé à aucune recompilation et que vous n'avez pas de copie du noyau, vous pouvez également procéder comme pour le fichier boot.b. Il vous suffit de récupérer le package du noyau et le tour est joué.
  • Recréer l'image virtuelle initrd. Notamment si vous utilisez ext3 ou SCSI pour vos partitions système, vous aurez besoin de cette image. Elle permet, avant le chargement des modules / drivers (ext3 ou scsi par exemple), de gérer l'accès à ces partitions lors du boot.
    La commande : mkinitrd <nom_de_l'image> <version_du_noyau>
    Exemple : dans /boot
    # mkinitrd initrd-2.4.18-14.img 2.4.18-14
  • Vérifier /etc/lilo.conf, puis réinstaller LILO :
    # lilo -t
    Added linux *
    The boot sector and the map file have *NOT* been altered.
  • Rebooter la machine. Ouf :)