Qui ne s'est jamais retrouvé dans une situation où, lors d'une bidouille sur le noyau avec compilation et tout le tralala, la machine ne démarre plus après un reboot.
Toi, oui toi, qui recompiles ton noyau avec des patchs par ci et par là, n'as-tu jamais eu la petite goutte de sueur lors d'un “shutdown -r now” et bien sûr sur une machine distante ?
Alors, afin d'éviter de devoir redémarrer sur un mode de secours, il est possible avec grub de redémarrer automatiquement sur un autre noyau qui fonctionnait correctement ! Pourquoi ne pas en profiter !?
Ingrédients nécessaires à la démonstration:
- un grub
- un noyau qui marche pas
- un noyau qui marche
On édite le fichier de conf grub /boot/grub/menu.lst
:
# Boot automatically after 10 secs. timeout 10 # By default, boot the first entry. default saved #important # Fallback to the second entry. fallback 2 #indique en cas de problème sur le boot de précédent, sur quel noyau retourner title Debian GNU/Linux, kernel 2.6.23.1-rsbac02 root (hd0,0) kernel /vmlinuz-2.6.23.1-rsbac02 root=/dev/md2 ro initrd /initrd.img-2.6.23.1-rsbac02 savedefault fallback #important title Debian GNU/Linux, kernel 2.6.23.1-rsbac02 (single-user mode) root (hd0,0) kernel /vmlinuz-2.6.23.1-rsbac02 root=/dev/md2 ro single initrd /initrd.img-2.6.23.1-rsbac02 savedefault title Debian GNU/Linux, kernel 2.6.18-6-686 root (hd0,0) kernel /vmlinuz-2.6.18-6-686 root=/dev/md2 ro initrd /initrd.img-2.6.18-6-686 savedefault title Debian GNU/Linux, kernel 2.6.18-6-686 (single-user mode) root (hd0,0) kernel /vmlinuz-2.6.18-6-686 root=/dev/md2 ro single initrd /initrd.img-2.6.18-6-686 savedefault
On voit dans ma configuration, que mon noyau de secours est “Debian GNU/Linux, kernel 2.6.18-6-686” en troisième position dans la liste, soit fallback 2 (le premier élément de la liste est 0).
On indique ensuite à grub quel est le noyau à booter par défaut, avec le parametre suivant :
default saved
Oui, mais comment lui indiquer le “saved” ?
En shell sous root:
#grub-set-default 0
Donc à partir de la, grub bootera par défaut sur mon noyau “Debian GNU/Linux, kernel 2.6.23.1-rsbac02” qui en l'occurrence ne marche pas à cause d'une erreur configuration de RSBAC.
Après quelques minutes d'attente, je vais donc me rendre dans l'interface de management de mon serveur dédié et je vais lancer un reboot.
Et la, comme par magie, grub va automatiquement retourner sur mon noyau de backup à savoir “Debian GNU/Linux, kernel 2.6.18-6-686”
Grub continuera à booter sur le noyau de secours tant qu'on ne lui dira de changer de noyau par défaut.
donc, apres avoir corrigé le probleme on retape la commande kivabien :
#grub-set-default 0
Pour savoir quelle est la configuration actuelle, un petit
cat /boot/grub/default
Ceci vous indiquera le numéro retenu par grub et donc le “saved”.
Il est bien sûr possible de spécifier plusieurs noyaux de fallback à grub, pour cela il faut ajouter les numeros séparés par un exemple à la liste “fallback”, exemple:
fallback 2 4 6
Ajouter aussi “fallback” au “sauvedefault” de chaque liste de noyau, sauf le dernier !
title Debian GNU/Linux, kernel 2.6.23.1-rsbac02 root (hd0,0) kernel /vmlinuz-2.6.23.1-rsbac02 root=/dev/md2 ro initrd /initrd.img-2.6.23.1-rsbac02 savedefault fallback #important
Voila, tu peux maintenant patcher, compiler les yeux fermés, du moment que tu gardes un noyau qui marche !
Attention : Apres chaque boot, infructueux ou non, la valeur du default saved est toujours incrémenté à la valeur supérieure, donc même apres un boot réussi, ne pas oublié un petit
#grub-set-default 0