Mise à jour : Debian 10.8
la présentation générale du menu affichée par Grub lors du démarrage (image de fond, fonte, couleurs du texte)
la méthode de lancement des entrées de menu (temps d'attente avant lancement automatique, sélection par défaut du dernier système lancé)
la présentation et le contenu des entrées (intitulés, positions respectives, paramètres de lancement)
Le terme "entrée de menu " ou "entrée" désigne le système d'exploitation à lancer.
Sommaire
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
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
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.
GRUB_DISABLE_RECOVERY="true"
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
GRUB_CMDLINE_LINUX=""
GRUB_DISABLE_SUBMENU="y"
Noter que les valeurs true ou yes ou y sans guillemets ne fonctionnent pas!
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
GRUB_DISABLE_OS_PROBER=true
$ sudo update-grub
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
# 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
La première étape s'effectue dans le contexte (variables root, prefix, modules, ...) du menu général grub.
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
# 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
# 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
}
# 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
}
# 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
}
# 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
}
# 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
}
GRUB_ENABLE_CRYPTODISK=y
# update-grub