Grub2 - Configuration - Entrées de menu

Mise à jour : Debian 10.8

Le terme "entrée de menu " ou "entrée" désigne le système d'exploitation à lancer.

Attention : Avant toute modification des fichiers de configuration de Grub, il est recommandé de savoir redémarrer un système sur lequel Grub n'est plus fonctionnel

Sommaire

1 - Entrée par défaut

Parmi les entrées disponibles dans le menu, Grub se positionne par défaut sur la première entrée et, si l'utilisateur n'a pas d'action sur le clavier, la lance automatiquement après 5 secondes. Il est possible de modifier le temps d'attente et la sélection par défaut de la première entrée

1.1 - Temps d'attente

Pour modifier la valeur du temps d'attente avant le lancement automatique, changer, dans le fichier /etc/default/grub, la valeur du paramètre

GRUB_TIMEOUT=5

Puis mettre à jour le fichier grub.cfg avec update-grub.

Note : Si la valeur est négative, le lancement automatique n'a pas lieu et le menu reste affiché jusqu'à ce que l'opérateur valide une entrée.

La valeur choisie apparaît dans le fichier grub.cfg :

$ cat /boot/grub/grub.cfg |grep "set timeout="
set timeout=-1
set timeout=4
set timeout=4

1.2 - Sélection de la dernière entrée utilisée

Pour que Grub mémorise la dernière entrée utilisée et la sélectionne au démarrage suivant, ajouter / remplacer dans le fichier /etc/default/grub les lignes suivantes :

GRUB_DEFAULT=saved
GRUB_SAVEDEFAULT=true

Mettre à jour grub.cfg

$ sudo update-grub

Les lignes du menu suivies de la commande "savedefault" seront mémorisées :

$ cat /boot/grub/grub.cfg |grep -A1 "menuentry "
menuentry 'Debian GNU/Linux' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-01b8371d-5c59-4bfb-8316-6ad493618513' {
savedefault
--
menuentry 'Debian GNU/Linux, avec Linux 3.16.0-4-amd64' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.16.0-4-amd64-advanced-01b8371d-5c59-4bfb-8316-6ad493618513' {
savedefault
--
menuentry 'Debian GNU/Linux, with Linux 3.16.0-4-amd64 (recovery mode)' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.16.0-4-amd64-recovery-01b8371d-5c59-4bfb-8316-6ad493618513' {
load_video

Après redémarrage, on peut vérifier que la dernière entrée est stockée dans le fichier grubenv :

$ cat /boot/grub/grubenv |head -2
# GRUB Environment Block
saved_entry=gnulinux-simple-01b8371d-5c59-4bfb-8316-6ad493618513

2 - Entrées générées automatiquement

2.1 - Entrées du système actif

Le script /etc/grub.d/10_linux génère les entrées correspondant aux noyaux linux installés sur le système d'où est lancé la commande grub- update.

2.1.1 Entrées de récupération

GRUB_DISABLE_RECOVERY="true"

2.1.2 Paramètres de la ligne de commande linux

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
GRUB_CMDLINE_LINUX=""

2.1.3 Sous-menus

GRUB_DISABLE_SUBMENU="y"

Noter que les valeurs true ou yes ou y sans guillemets ne fonctionnent pas!

2.1.4 Suppression 10_linux

Pour empêcher la génération des entrées linux de la partition courante, ôter au script 10_linux les droits d'exécution :

$ sudo chmod -x /etc/grub.d/10_linux 

2.2 - Entrées détectées sur les autres partitions

GRUB_DISABLE_OS_PROBER=true
$ sudo update-grub

2.3 - Entrée Firmware uefi

Si une plate-forme UEFI est détectée, le script /etc/grub.d/30_uefi-firmware génère une entrée de menu permettant d'accéder au firmware (Bios) de l'uefi

3 - Entrées définies par l'utilisateur

3.1 - Définition

# Linux Debian sur partition 2, label "jessie"

menuentry "Linux Debian Jessie" {
savedefault
insmod ext2
insmod part_msdos

search --set=root --label jessie --hint hd0,msdos2

echo "chargement de linux"
linux /vmlinuz set root=LABEL=jessie ro quiet
echo "chargement de initrd.img"
initrd /initrd.img
}

La suite d'instructions peut généralement être partagé en trois étapes, comme dans l'exemple ci-dessus

3.1.1 - Première étape - Préparation

La première étape s'effectue dans le contexte (variables root, prefix, modules, ...) du menu général grub.

3.1.2 - Deuxième étape - Définition du chemin

La deuxième étape consiste à définir dans la variable root l'identifiant disque grub de la partition (ou du disque) sur laquelle se trouve les fichiers à charger dans l'étape suivante (noyau linux par exemple). Si la variable root est déjà correctement positionnée, il n'est pas nécessaire de la redéfinir.

# Partition sur disque msdos
set root='hd0,msdos3'

# Partition sur disque gpt
set root='hd1,gpt2'

# Disque mémoire
set root=(memdisk)

# Boucle de montage
set root=(loop)
# Conversion à partir de l'identifiant de partition uuid
search --set=root --fs-uuid 06691408-551e-4155-89c7-75aa1db6f1af
# Equivalent à
search -s -u 06691408-551e-4155-89c7-75aa1db6f1af

# Conversion à partir de l'étiquette de partition
search --set=root --label Buster --hint hd1,gpt2
# Equivalent à
search -s -l Buster -h hd1,gpt2

3.1.3 - Chargement

# Partition racine définie par son identifiant linux
root=/dev/sdb2

# Partition racine définie par son uuid
root=UUID=xxxxxxxxxxxx

# Partition racine définie par son étiquette
root=LABEL=Buster

3.2 - Prise en compte

4 - Exemples d'entrée

4.1 - OS Debian

# OS Debian
# Noyau sur partition boot /dev/nvme01p2 - uuid=f948cd31-18b2-4144-91f4-7840e122dfa7
# / sur partition buster /dev/nvme01p3 - uuid=06f0c737-9cc2-4959-be25-03db609d983e

menuentry 'Buster' {
insmod part_gpt
insmod ext2

search --no-floppy --fs-uuid --set=root f948cd31-18b2-4144-91f4-7840e122dfa7 --hint hd1,gpt2

echo 'Chargement de Linux 5.10.0-0.bpo.3-amd64…'
linux /vmlinuz-5.10.0-0.bpo.3-amd64 root=UUID=06f0c737-9cc2-4959-be25-03db609d983e ro abcde quiet splash
echo 'Chargement du disque mémoire initial…'
initrd /initrd.img-5.10.0-0.bpo.3-amd64
}

4.2 - Menu GRUB

# Menu Grub
# Fichier grub.cfg sur partition boot /dev/nvme01p2 - uuid=f948cd31-18b2-4144-91f4-7840e122dfa7

menuentry 'Menu grub'{

search --fs-uuid --set=root f948cd31-18b2-4144-91f4-7840e122dfa7 --hint hd1,gpt2

configfile /grub/grub.cfg
}

4.3 - Installateur Debian (chargement hd-media)

# Installateur Debian
# Iso debian à la racine d'une partition quelconque du système
# Noyau hd-media sur partition /dev/sda3 - uuid=d551a9a4-e742-423e-aa28-ef930869714a


menuentry 'Installateur hd-media' {
insmod part_gpt
insmod ext2

search --fs-uuid --set=root d551a9a4-e742-423e-aa28-ef930869714a --hint hd0,gpt3

echo "Chargement de l'installateur"
linux /hd-media/vmlinuz language=fr country=FR locale=fr_FR.UTF-8 keymap=fr(latin9)
initrd /hd-media/initrd.gz
}

# Installateur Debian avec fichier preseed
# Iso debian à la racine d'une partition quelconque du système
# Noyau hd-media sur partition /dev/sda3 - uuid=d551a9a4-e742-423e-aa28-ef930869714a

# Fichier preseed.cfg impérativement sur la même partition que l'iso debian
# par exemple à la racine de cette partition

menuentry 'Installateur hd-media avec fichier preseed' {
insmod part_gpt
insmod ext2

search --fs-uuid --set=root d551a9a4-e742-423e-aa28-ef930869714a --hint hd0,gpt3

echo "Chargement de l'installateur"
linux /hd-media/vmlinuz auto file=/media/preseed.cfg \
tasks=standard \
language=fr country=FR locale=fr_FR.UTF-8 keymap=fr(latin9) \
suite=buster d-i:netcfg/hostname=buster \
d-i:netcfg/choose_interface=auto \
d-i:netcfg/get_hostname=buster d-i:netcfg/get_domain=unassigned-domaine \
d-i:netcfg/wireless_show_essids="SFR-fcc8" d-i:netcfg/wireless_security_type=wpa d-i:netcfg/wireless_wpa="DKMXRYPW25TW" \
d-i:apt-setup/use_mirror=true d-i:mirror/country="manual" d-i:mirror/protocol=https d-i:mirror/https/proxy="" d-i:mirror/https/country="manual" \
d-i:mirror/https/hostname="deb.debian.org" d-i:mirror/https/directory="/debian"
initrd /hd-media/initrd.gz
}

4.3 - Debian live

# Debian live
# Iso debian à la racine de la partition /dev/sda3 - uuid=d551a9a4-e742-423e-aa28-ef930869714a

menuentry 'Debian live' {
loopback loop (hd0,gpt3)/debian-live-10.8.0-amd64-standard+nonfree.iso

set root=(loop)
set iso_path=/debian-live-10.8.0-amd64-standard+nonfree.iso
export iso_path

configfile /boot/grub/loopback.cfg
loopback --delete loop
}

4.5 - Application efi (non testé)

# Tetris.efi
# Fichier Tetris.efi sur la partition ESP /dev/sda1 - uuid=8C15-DE92

menuentry "EFI application" {

search -s -u 8C15-DE92

chainloader /EFI/tetris/Tetris.efi
}

5 - Divers - Partition de boot chiffrée

GRUB_ENABLE_CRYPTODISK=y
# update-grub