C’est ce que je croyais…
On a dû changer de bus et/ou d’emplacement le disque root d’un serveur ? Qu’à cela ne tienne, on modifie le disque de boot dans le BIOS, on édite les options de grub au démarrage, puis une fois le système booté on va dans /boot/grub/menu.lst
pour rendre les changements définitifs. Il y a alors deux lignes par noyau à changer, du type :
root **(hd0,0)**
kernel /boot/vmlinuz-2.6.18-6-486 root=**/dev/hda1** ro
À chaque fois, il convient de mettre la bonne partition : ici hd0,0
ou /dev/hda1
, selon la convention choisie.
Bien, bien. On reboote la machine, pour valider la chose. Elle boote comme un charme, pas de problème. On va donc la remettre à son emplacement de « production », au hasard au fond d’un placard, sans clavier ni écran bien entendu. Encore un boot, tout se passe bien, on en profite pour appliquer les dernières mises à jour, puis la machine vit sa vie.
Un jour, la machine reboote pour une raison quelconque, et là, perte de contact réseau ! Bien qu’elle soit headless, on se rend vite compte que Debian n’a pas booté. On l’extrait de son placard, on la connecte à un écran et un clavier, et là stupeur, on constate que grub cherche à booter sur l’ancien emplacement de la partition racine… À se taper la tête contre les murs.
Explication
Parmi les mises à jour effectuées, il y avait eu une mise à jour du noyau. Or lors des mises à jour du noyau, les sections par défaut de menu.lst
(celles qui sont repérées par les BEGIN/END AUTOMAGIC KERNELS LIST
) sont écrasées par un script qui s’appelle update-grub
. Les modifications faites à la main sont donc perdues. Il ne faut donc pas faire comme expliqué ci-dessus sous Debian, mais au contraire, modifier directement les paramètres qui sont utilisés par update-grub
. Ces paramètres sont donnés directement dans le fichier menu.lst
, sous forme de commentaires spéciaux. Il y en a deux qui nous intéressent :
# kopt=root=**/dev/hda1** ro
# groot=**(hd0,0)**
Ce sont donc ces deux lignes qu’il faut modifier, puis pour appliquer les modifications aux lignes « réelles » du fichier de configuration, il suffit d’appeler update-grub
.