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


linux/grub_fallback_ou_comment_rebooter_sur_un_autre_quenelle_si_on_se_loupe.txt · Last modified: 2010/01/12 13:29 (external edit)