Trucs:Récupérer une partition /boot corrompue
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
/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 Mandrake, 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 redhat 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 fichierboot
:). A copier dans/boot
.
Remarque : vous pouvez aussi lancer Midnight Commander (commandemc
) qui sait se déplacer dans un package rpm, et copier le fichierboot.b
dans/boot
grâce à lui.
- transformer le rpm en archive cpio
- 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 fichierboot.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 :)