Changer de kernel l'esprit tranquil
Par Chojin, mercredi 17 janvier 2007 à 00:47 :: [Dédiés] Noyaux :: #152 :: rss
Vous venez de compiler un Kernel aux petits oignons, vous mettez à jour la configuration de votre bootloader puis vous rebootez, et là c'est le drame: vous avez oublié LE module indispensable au démarrage du système, le driver de la carte raid par exemple, et du coup le serveur ne boot pas.
Dans ces cas là, le système fait un Kernel Panic et seule une intervention humaine peut le remettre en route.
Je me suis souvent mis dans cette situation et j'ai fini par trouver une solution, que je vous explique ici.
Nous venons donc de compiler un noyau, on l'a installé dans /boot et on l'ajoute dans la configuration de lilo:
image=/boot/vmlinuz-2.6.18.6 append="devfs=nomount noapic nolapic" label=linux-2.6.18.6 read-only optional
Ensuite on met ce noyau comme noyau par défaut à booter:
default=linux-2.6.18.6
Et on lance lilo pour qu'il prenne en compte nos changements:
lilo -v
Si notre noyau fonctionne, cette procédure ne pose aucun problème. Par contre si le serveur ne reboot pas il faudra que quelqu'un soit physiquement présent devant le serveur pour sélectionner un noyau qui fonctionne. Nous allons donc mettre dans la variable default un noyau dont on est sûr qu'il fonctionne, notre noyau actuel par exemple, sans oublier de lancer lilo après une modification de sa configuration.
Pour que lilo boot quand même sur le nouveau noyau au prochain démarrage, on va utiliser l'option -R. Cette option dit à lilo de booter sur un noyau au prochain démarrage, puis sur le noyau par défaut au démarrage suivant:
lilo -R linux-2.6.18.6
Si le serveur boot normalement on peut mettre à jour la valeur de la variable default dans la configuration de lilo. Sinon, il suffit d'utiliser la fonction reboot d'urgence de sivit.fr/admin et lilo sélectionnera cette fois le noyau indiqué dans la variable default, qui lui fonctionne bien :)
Et on peut même se passer du reboot d'urgent grâce à l'option panic du noyau, qui va indiquer au bout de combien de temps le noyau redémarrera de lui même après un kernel panic:
append="devfs=nomount noapic nolapic panic=30"
Avec ceci, si notre noyau fait un kernel panic il redémarrera au bout de 30 secondes, et lilo sélectionnera cette fois votre ancien noyau qui fonctionne :)
Vous pouvez mettre la valeur que vous voulez dans cet argument sachant que la valeur par défaut 0 désactive le reboot automatique.
Les mêmes manipulations pour Grub :
ATTENTION --- Ne pas effectuer cette manipulation avec du hostraid (/dev/mapper/*)
Editez votre fichier /boot/grub/menu.lst
changez la ligne : default 0
par : default saved
Enregistrez et quittez.
Nous avons donc reconfiguré Grub afin de ne plus booter sur un noyau fixe dans la liste, mais sur celui enregistré.
Nous allons maintenant enregistrer le noyau par défaut de Grub :
grub
> savedefault 2
> savedefault --once 0
> quit
avec :
Pour rappel :
* 0 -> Le nouveau kernel
* 1 -> Le nouveau kernel en mode rescue
* 2 -> L'ancien kernel
* 3 -> L'ancien kernel en mode rescue
Si le serveur redémarre sans problèmes, vous pourrez mettre le kernel 0 par défaut :
grub
> savedefault 0
> quit
Auteur: noch
Commentaires
1. Le vendredi 21 septembre 2007 à 14:51, par Bertrand
Ajouter un commentaire