Démarrer sur une entrée précise de GRUB au prochain boot

Il y a quelques mois j’ai dû compiler/tester différents noyaux avec les bons modules activés pour faire fonctionner un programme. Ça m’a rapidement gonflé de devoir sélectionner le noyau sur lequel je souhaitais booter durant les quelques secondes offertes au démarrage (serveur distant). Du coup j’ai cherché une solution.

Afficher votre menu d’amorçage GRUB

Pour rappel GRUB permet l’amorçage des systèmes GNU/Linux ou Windows sur un pc/serveur. L’entrée par défaut est la première ligne avec par exemple : Linux Mint 19.1 Xfce ou Debian GNU/Linux.

Voici le menu GRUB de mon pc fixe.

Linux Mint 19.1 Xfce
Options avancées pour Linux Mint 19.1 Xfce
Memory test (memtest86+)
Memory test (memtest86+, serial console 115200)
Windows 10 (sur /dev/sdc1)

Voici le menu GRUB sur un serveur.

Debian GNU/Linux
Advanced options for Debian GNU/Linux

Voici comment je le récupère : grep -E '^(menuentry|submenu)' /boot/grub/grub.cfg | cut -d "'" -f2
grep -E '^(menuentry|submenu)' # On récupère les lignes qui commencent par menuentry ou (|) submenu. Pour rappel ^ désigne le début de la ligne, on utilise -E (--extended-regexp) parce que je trouve ça plus élégant mais on pourrait s’en passer, grep -E '^(menuentry|submenu)' donne le même résultat que grep '^menuentry\|^submenu'
/boot/grub/grub.cfg # Le fichier utilisé par GRUB lors du démarrage, il ne doit pas être édité directement, il est généré par grub-mkconfig (voir man update-grub)
cut -d "'" -f2 # On récupère le contenu entre les single quotes ', le delimiter est donc la single quote -d "'" et on sélectionne le champs (field) 2 -f2

Démarrer sur l’entrée désirée au prochain boot (uniquement)

La commande grub-reboot est assez peu connue, tiré du man : Set the default boot menu entry for GRUB, for the next boot only. On peut l’utiliser de différentes manières soit avec le MENU_ENTRY (un numéro), le menu item title ou le menu item identifier. On va privilégier le MENU_ENTRY car nettement plus simple avec la commande qu’on a vu précédemment suivie de nl -v0 qui numérote les lignes (man nl) à partir de zéro (-v0).

grep -E '^(menuentry|submenu)' /boot/grub/grub.cfg | cut -d "'" -f2 | nl -v0

     0	Linux Mint 19.1 Xfce
     1	Options avancées pour Linux Mint 19.1 Xfce
     2	Memory test (memtest86+)
     3	Memory test (memtest86+, serial console 115200)
     4	Windows 10 (sur /dev/sdc1)

Si je veux démarrer sur Windows la prochaine fois c’est-à-dire que l’entrée sélectionnée par défaut au prochain démarrage soit Windows 10 alors je ferai sudo grub-reboot '4'. Ça c’était la partie simple.

Remarquez la ligne « Options avancées pour Linux Mint 19.1 Xfce », elle correspond à un sous-menu dans lequel vous pourrez choisir le noyau sur lequel vous voulez démarrer.

Sur mon pc fixe grep $'\tmenuentry' /boot/grub/grub.cfg | cut -d "'" -f2 | nl -v0

     0	Linux Mint 19.1 Xfce, avec Linux 4.15.0-46-generic
     1	Linux Mint 19.1 Xfce, with Linux 4.15.0-46-generic (recovery mode)
     2	Linux Mint 19.1 Xfce, avec Linux 4.15.0-45-generic
     3	Linux Mint 19.1 Xfce, with Linux 4.15.0-45-generic (recovery mode)
     4	Linux Mint 19.1 Xfce, avec Linux 4.15.0-20-generic
     5	Linux Mint 19.1 Xfce, with Linux 4.15.0-20-generic (recovery mode)

grep $'\tmenuentry' # On récupère les lignes qui commencent par une tabulation suivie de menuentry, ça correspond aux entrées dans un sous-menu (submenu)

Si je souhaite redémarrer sur « Linux Mint 19.1 Xfce, avec Linux 4.15.0-20-generic » alors je ferai sudo grub-reboot '1>4' correspondant à l’entrée 1 du menu GRUB (Options avancées pour Linux Mint 19.1 Xfce) puis l’entrée 4 du sous-menu (Linux Mint 19.1 Xfce, avec Linux 4.15.0-20-generic).

Donc voici la ligne de commandes que j’utilisais par exemple : sudo grub-reboot '1>2'; sudo reboot.

Démarrer sur la dernière entrée démarrée

GRUB peut se souvenir de la dernière entrée démarrée et l’utiliser comme entrée de démarrage par défaut pour la prochaine fois, utile si vous avez plusieurs noyaux ou systèmes d’exploitation. Éditez /etc/default/grub et modifiez ainsi : GRUB_DEFAULT=saved. Ceci garantit que GRUB passe par défaut à l’entrée sauvegardée. Pour activer la sauvegarde de l’entrée sélectionnée, ajoutez : GRUB_SAVEDEFAULT=true.

sudo sed -i 's/GRUB_DEFAULT=0/GRUB_DEFAULT=saved\nGRUB_SAVEDEFAULT=true/' /etc/default/grub; sudo update-grub

Honteusement pompé sur l’excellente page du Wiki Archlinux.fr : https://wiki.archlinux.fr/GRUB/Trucs_et_Astuces

Voilà vous avez tout ce qu’il vous faut pour démarrer exactement sur l’entrée du menu GRUB que vous voulez. Moi je démarre pas Windows, c’est Madame ;)

Déjà un avis pertinent dans Démarrer sur une entrée précise de GRUB au prochain boot :

  • Un autre avantage de cette configuration : si Windows redémarre pendant votre absence (les pauvres Windowsiens ne connaissent que trop ça), vous n’avez pas la surprise de le voir sous Linux quand vous revenez 🙂

Les commentaires sont fermés.