Comment
réinstaller lilo à partir
d'une disquette de secours ?
(Écrit en orthographe recommandée. Voir note en bas de page)
Bon (si on peut dire), vous ne pouvez plus démarrer
Linux. Lilo (ou grub) n'est plus là ; ou alors il est là,
mais il refuse de se lancer (LIL.). Bref, c'est la cata ! Plusieurs
raisons : vous avez réinstallé Windows (95, 98 ou Me)
qui a délicatement écrasé le MBR où était
installé lilo ou grub. (Il parait que XP est plus
précautionneux, mais pour éviter ça, activez la
protection antivirus de votre BIOS: il interdira l'écriture
sur le MBR), vous avez déplacé des partitions,... Deux
cas à envisager :
Vous pouvez redémarrer votre Linux avec une disquette de démarrage :-)
Vous ne pouvez pas :-(
Vous pouvez redémarrez votre Linux avec une disquette de démarrage:
Dans ce cas, vous n'avez qu'à vous loguer sous root et
réinstaller le chargeur de démarrage (bootloader) lilo
sur votre disque dur avec la commande lilo. Si votre fichier
/etc/lilo.conf est bon, vous ne devrez pas avoir de message d'erreur
et pas de problème au redémarrage.
2. Vous ne pouvez pas redémarrer votre linux avec
la disquette de démarrage
Là, ça se
complique un peu. Votre linux "principal", c'est à
dire celui qui est installé sur votre disque dur ne veut rien
savoir. Il vous faut réinstaller le chargeur de démarrage
"lilo" à l'aide d'un système qui fonctionne.
Deux possibilités au moins : une
disquette ou un CD qui contient un système de secours. Si vous êtes
prudent, vous avez déjà une disquette de ce genre prête à l'emploi.
Sinon, vous pouvez en trouvez sur le Net (mini distributions ou
systèmes
de secours) ou sur la page d'accueil du présent site (lien "Systèmes de
secours").
Vous pouvez aussi utiliser un CD d'installation: au démarrage, on vous
proposera le choix "rescue". Allez-y ! Dans un cas comme dans l'autre,
vous vous trouverez aux commandes d'un système Linux minimal, mais avec
les programmes nécessaires pour effectuer une réparation. Normalement,
vous serez automatiquement logué sous root sans avoir eu à saisir de
mot de passe.
D'autres solutions existent.
Par exemple le CD Démolinux de Roberto Di Cosmo (qui m'a permis de récupérer une fois mon système -merci Roberto) ou le CD Knoppix.
La disquette de secours de Suse a une option "Démarrer le système installé" qui est très pratique et très simple.
Si vous avez un autre système Linux sur votre PC (par exemple une Debian et une Mandriva) et que vous arrivez à en démarrer un, il vous servira pour réinstaller un lilo qui pourra démarrer le second système (celui qui ne démarre pas). Vous me suivez ?
Si vous avez Windows et que vous avez installé loadlin, vous pouvez démarrer Windows si vous avez une disquette de dépannage Windows (comment ça, vous n'en avez pas ? Tâchez de trouver un PC avec Windows pour en fabriquer une) en tapant, sous DOS, la commande fdisk /mbr (n'ayez pas peur, ça ne touchera pas vos partitions). Ça réinstalle un MBR standard pour démarrer Windows. Sous XP, il faut taper fixmbr. Ensuite, vous pourrez vous débrouiller avec loadlin.
Bon, enfin vous avez votre disquette (ou votre CD) de
secours ? Démarrez-le. Normalement, vous allez vous trouver aux
commandes d'un linux tout petit (mais efficace !) en mode texte (bah,
oui, désolé) et logué sous root. Donc attention
de ne rien casser en plus.
Vous devez disposer de programmes comme
ls, cp, mv, vi (comme éditeur de texte), tar,
bzip2,...
D'abord, si vous faites ls /, vous allez retrouver une
arborescence, mais c'est celle de votre disquette ! PAS de votre
disque dur. Si vous voulez lire votre disque dur, (et
particulièrement le fichier lilo.conf) il faudra le monter dans
l'arborescence du système de secours. Certains systèmes
de secours le font automatiquement, d'autres non. Vous devez savoir
sur quelle partition il se trouve. Tapez fdisk -l /dev/xxx (xxx
correspond au disque dur: ce peut être hda, hdb, ou sxx pour un
scsi) et repérez son nom. Si par exemple, c'est hda6, vous
allez créer un point de montage, c'est à dire un
répertoire de préférence dans le répertoire
/mnt et de préférence avec un nom expressif, (mais vous
pourrez l'appeler comme bon vous semblera). Par exemple, vous pouvez
utiliser linux_cassé ou bien le nom de la partition (ici hda6)
Pour la suite de l'explication choisissons
linux_cassé comme nom.
mkdir /mnt/linux_cassé
Vérifiez en tapant ls /mnt et vous devriez voir une
ligne:
/mnt/linux_cassé
Petit rappel, vous avez créé
le répertoire linux_cassé (ou /mnt/hda6) dans l'arborescence de votre
système de secours, PAS dans celui de votre Linux
"principal".
Faites ls /mnt/linux_cassé
Rien! Normal, la partition n'est pas montée (accrochée)
Montez-la avec:
mount /dev/hda6 /mnt/linux_cassé
Maintenant,
si vous faites ls /mnt/linux_cassé, vous verrez l'arborescence de votre
système linux "principal" (ou habituel si vous
préférez), sauf qu'il ne commence pas à /,
mais qu'il commence à /mnt/linux_cassé/. À partir
de là, vous pouvez vous promener dans son arborescence avec
les commandes cd, ls,.. et votre répertoire personnel. Vous pourrez
donc lire le répertoire de l'utilisateur "toto" en faisant:
ls /mnt/linux_cassé/home/toto/
D'habitude, vous auriez fait ls /home/toto/
Vous pourrez aussi lire les répertoires perso des autres utilisateurs!
Normal, vous êtes logué sous root...
On pourra trouver que
c'est un peu déroutant de chercher /home/toto/ dans
/mnt/linux_cassé/home/toto/ ; on peut utiliser alors la
commande chroot (changer le répertoire racine). Tapez chroot
/mnt/linux_cassé et alors vous aurez votre /home/toto/ en
tapant ls /home/toto/
Bien sûr, si le répertoire /home est sur une partition séparée (ce qui
est une bonne chose), par exemple hda8, il faudra aussi la monter
pour pouvoir la lire en faisant :
mount /dev/hda8 /mnt/linux_cassé/home/
Revenons à notre lilo. Vous devez
l'avoir sur votre système de secours (sinon, c'est pas la
peine...). Il est configuré par défaut pour installer
le chargeur de démarrage en fonction des indications qui sont
écrites dans le fichier lilo.conf, et ce fichier est dans le
répertoire /etc. Donc, en temps normal, pas de problème.
Mais là, vous êtes sur le système de secours, et
si vous tapez la commande lilo, il va chercher le /etc/lilo.conf qui
n'existe surement pas, et qui de toute façon ne sera pas celui
qui est sur votre disque dur. Le bon lilo.conf, il est
là :
/mnt/linux_cassé/etc/lilo.conf
Vous pouvez le
lire avec :
less /mnt/linux_cassé/etc/lilo.conf
ou
l'éditer avec vi (faites une copie avant !)
Donc,
maintenant, comment dire à la commande lilo de lire le
lilo.conf en question pour s'exécuter correctement ? Deux
possibilités :
Utilisez la commande chroot comme tout à l'heure
chroot /mnt/linux_cassé
lilo
2. Utilisez directement la commande lilo, mais en lui précisant (grâce à l'option -r) de prendre un lilo.conf situé ailleurs que dans /etc
(qui est le chemin par défaut). (D'après le man, lilo effectue lui-même un chroot avant de faire sa manoeuvre). Dans notre exemple, il faut faire :
lilo -r /mnt/linux_cassé/
Si il n'y a pas de message d'erreurs, c'est bon.
Vous
allez pouvoir rebouter pour vérifier que ça démarre,
mais avant, il vous FAUT DÉMONTER la(les) partition(s) (le système
"principal" le fait automatiquement, le système
de secours pas toujours)
Faites umount /mnt/linux_cassé
et reboot.
(et croisez les doigts)
Normalement, quand vous installez lilo, vous devez avoir un message de ce type:
Added linux-Mandrake *
Added linux-Suse
Added linux-Red-Hat
Added linux-Debian
Added windows
Explications : c'est un PC où il y a quatre versions de Linux (!) et un Windows. Le * indique que lilo est paramétré pour démarrer linux-Mandrake par défaut.
Au démarrage, l'invite lilo vous proposera ces cinq entrées. Elles sont écrites dans le fichier /etc/lilo.conf
Vous avez installé lilo, il n'y a aucun message d'erreur. C'est super ! Sauf qu'au redémarrage, ça ne marche pas. Il se peut que l'installation ne se soit pas fait dans le MBR. Regardez la première ligne du fichier /etc/lilo.conf Elle ressemble à ça :
boot=/dev/fd0 -->lilo va s'installer sur une disquette (fd0)
boot=/dev/hda6 --> lilo va s'installer sur la partition hda6 (deuxième partition logique du premier disque dur)
boot=/dev/hdb --> lilo va s'installer sur le MBR du deuxième disque dur (hdb)
boot=/dev/hda --> lilo va s'installer sur le MBR du premier disque dur (hda)
Vous l'avez sans doute deviné, c'est la dernière ligne (boot=/dev/hda) qu'il faudra mettre en début de votre fichier /etc/lilo.conf
Ensuite, vous pourrez apprendre à utiliser
l'autre chargeur de démarrage: le grub. Il vous permettra de
vous sortir de ce genre de problème encore plus facilement. En
effet, si les menus de démarrage ne fonctionnent plus, vous
vous retrouvez face à un shell (avec auto-complètement!)
qui vous permettra de démarrer le système de votre DD
Cet
article
est soumis à la licence LGPL. Vous pouvez le copier et le
diffuser comme bon vous semble à condition de ne pas l'altérer
et de laisser intacte la présente notice. Il a été
écrit avec l'aide de plusieurs membres de la communauté
du logiciel libre que je remercie au passage.
Mis à jour le 23 novembre 2004
Claude MICOUIN