24.5. Personnalisation du fichier de configuration GRUB 2
Les scripts GRUB 2 effectuent des recherches dans l'ordinateur de l'utilisateur et créent un menu de démarrage basé sur les systèmes d'exploitation trouvés par les scripts. Pour refléter les options de démarrage système les plus récentes, le menu de démarrage est automatiquement régénéré lorsque le noyau est mis à jour ou lorsqu'un nouveau noyau est ajouté.
Cependant, les utilisateurs pourraient souhaiter générer un menu contenant des entrées spécifiques ou pour que les entrées se trouvent dans un ordre particulier. GRUB 2 permet d'effectuer une personnalisation de base du menu de démarrage afin de donner aux utilisateurs contrôle de ce qui s'affiche à l'écran.
GRUB 2 utilise une série de scripts pour générer le menu ; ces scripts se trouvent dans le répertoire
/etc/grub.d/
. Les fichiers suivants sont inclus :
00_header
, qui charge les paramètres GRUB 2 du fichier/etc/default/grub
.01_users
, qui lit le mot de passe du superutilisateur dans le fichieruser.cfg
. Dans Red Hat Enterprise Linux 7.0 et 7.1, ce fichier n'a été créé que lorsque le mot de passe boot a été défini dans le fichier kickstart au moment de l'installation, et il inclut le mot de passe défini en texte brut.10_linux
, qui localise les noyaux dans la partition par défaut de Red Hat Enterprise Linux.30_os-prober
, qui génère des entrées pour les systèmes d'exploitations trouvés sur d'autres partitions.40_custom
, un modèle pouvant être utilisé pour créer des entrées de menu supplémentaires.
Les scripts du répertoire
/etc/grub.d/
sont lus en ordre alphabétique et peuvent ainsi être renommés pour modifier l'ordre de démarrage d'entrées spécifiques du menu.
Important
Avec la clé
GRUB_TIMEOUT
définie sur 0
dans le fichier /etc/default/grub
, GRUB 2 n'affiche pas la liste des noyaux démarrables lorsque le système est démarré. Pour afficher cette liste pendant le démarrage, appuyez continuellement sur n'importe quelle touche alphanumérique lorsque les informations BIOS sont affichées, GRUB 2 vous présentera le menu GRUB.
24.5.1. Changer l'entrée de démarrage par défaut
Par défaut, la clé de la directive
GRUB_DEFAULT
dans le fichier /etc/default/grub
est le mot « saved
». Cela ordonne à GRUB 2 de charger le noyau spécifié par la directive « saved_entry
» dans le fichier d'environnement GRUB 2, qui se trouve dans /boot/grub2/grubenv
. Vous pouvez également définir un autre enregistrement GRUB par défaut en utilisant la commande grub2-set-default
, qui met à jour le fichier d'environnement GRUB 2.
Par défaut, la valeur
saved_entry
est définie avec le nom du noyau installé le plus récent du type de paquet kernel. Ceci est défini dans /etc/sysconfig/kernel
par les directives UPDATEDEFAULT
et DEFAULTKERNEL
. Le fichier peut être affiché par l'utilisateur root
comme suit :
~]# cat /etc/sysconfig/kernel
# UPDATEDEFAULT specifies if new-kernel-pkg should make
# new kernels the default
UPDATEDEFAULT=yes
# DEFAULTKERNEL specifies the default kernel package type
DEFAULTKERNEL=kernel
La directive DEFAULTKERNEL
spécifie quel type de paquet sera utilisé par défaut. Installer un paquet de type kernel-debug ne changera pas le noyau par défaut tant que DEFAULTKERNEL
est défini sur les paquets de type kernel.
GRUB 2 prend en charge une valeur numérique comme clé pour que la directive
saved_entry
change l'ordre par défaut dans lequel les systèmes d'exploitation sont chargés. Pour spécifier quel système d'exploitation doit être chargé en premier, veuillez inclure son numéro dans la commande grub2-set-default
. Exemple :
~]#grub2-set-default
2
Remarquez que la position d'une entrée de menu dans la liste est dénotée par un nombre commençant par zéro. Ainsi, dans l'exemple ci-dessus, la troisième entrée sera chargée. Cette valeur sera remplacée par le nom du prochain noyau devant être installé.
Pour forcer un système à toujours utiliser une entrée de menu particulière, veuillez utiliser le nom de l'entrée du menu comme clé de la directive
GRUB_DEFAULT
dans le fichier /etc/default/grub
. Pour répertorier les entrées du menu disponibles, veuillez exécuter la commande suivante en tant qu'utilisateur root
:
~]# awk -F\' '$1=="menuentry " {print $2}' /etc/grub2.cfg
Le nom de fichier /etc/grub2.cfg
est un lien symbolic qui mène au fichier grub.cfg
, dont l'emplacement dépendra de l'architecture. Pour des raisons de fiabilité, le lien symbolic n'est pas utilisé dans d'autres exemples dans ce chapitre. Il vaut mieux utiliser des chemins absolus quand on écrit dans un fichier, surtout quand on le répare.
Les changements apportés à
/etc/default/grub
requièrent de régénérer le fichier grub.cfg
comme suit :
- Sur les machines basées BIOS, exécutez la commande suivante en tant qu'utilisateur
root
:~]#
grub2-mkconfig -o /boot/grub2/grub.cfg
- Sur les machines basées UEFI, veuillez exécuter la commande suivante en tant qu'utilisateur
root
:~]#
grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfg
24.5.2. Modifier une entrée de menu
Si vous devez préparer un nouveau fichier GRUB 2 avec des paramètres différents, modifier les valeurs de la clé
GRUB_CMDLINE_LINUX
dans le fichier /etc/default/grub
. Remarquez que vous pouvez spécifier plusieurs paramètres pour la clé GRUB_CMDLINE_LINUX
, similairement à l'ajout de paramètres dans le menu de démarrage GRUB 2. Exemple : GRUB_CMDLINE_LINUX="console=tty0 console=ttyS0,9600n8", où
console=tty0
est le premier terminal virtuel et console=ttyS0
est le terminal série à utiliser.
Les changements apportés à
/etc/default/grub
requièrent de régénérer le fichier grub.cfg
comme suit :
- Sur les machines basées BIOS, exécutez la commande suivante en tant qu'utilisateur
root
:~]#
grub2-mkconfig -o /boot/grub2/grub.cfg
- Sur les machines basées UEFI, veuillez exécuter la commande suivante en tant qu'utilisateur
root
:~]#
grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfg
24.5.3. Ajouter une nouvelle entrée
Lors de l'exécution de la commande
grub2-mkconfig
, GRUB 2 recherche des noyaux Linux et d'autres systèmes d'exploitation basés sur les fichiers situés dans le répertoire /etc/grub.d/
. Le script /etc/grub.d/10_linux
recherche les noyaux Linux installés sur la même partition. Le script /etc/grub.d/30_os-prober
recherche d'autres systèmes d'exploitation. Des entrées du menu sont également automatiquement ajoutées au menu de démarrage lors de la mise à jour du noyau.
Le fichier
40_custom
situé dans le répertoire /etc/grub.d/
est un modèle pour les entrées personnalisées et ressemble à ce qui suit :
#!/bin/sh exec tail -n +3 $0 # This file provides an easy way to add custom menu entries. Simply type the # menu entries you want to add after this comment. Be careful not to change # the 'exec tail' line above.
Ce fichier peut être modifié ou copié. Remarquez qu'une entrée du menu valide doit inclure au minimum :
menuentry "<Title>"{ <Data> }
24.5.4. Créer un menu personnalisé
Si vous ne souhaitez pas que les entrées du menu soient mises à jour automatiquement, vous pouvez créer un menu personnalisé.
Important
Avant de continuer, effectuez une copie de sauvegarde du contenu du répertoire
/etc/grub.d/
au cas où vous devriez annuler les changement ultérieurement.
Note
Remarquez que la modification du fichier
/etc/default/grub
n'a aucun effet sur la création de menus personnalisés.
- Sur les machines basées BIOS, copiez le contenu de
/boot/grub2/grub.cfg
, ou le contenu de/boot/efi/EFI/redhat/grub.cfg
sur les machines UEFI. Ajoutez le contenu degrub.cfg
dans le fichier/etc/grub.d/40_custom
sous les lignes d'en-tête. La partie exécutable du script40_custom
doit être préservée. - Dans le contenu intégré au fichier
/etc/grub.d/40_custom
, seuls les blocsmenuentry
sont nécessaires à la création d'un menu personnalisé. Les fichiers/boot/grub2/grub.cfg
et/boot/efi/EFI/redhat/grub.cfg
peuvent contenir des spécifications de fonctions ainsi que d'autres contenus au-dessus et au-dessous des blocsmenuentry
. Si vous avez inclus ces lignes non nécessaires dans le fichier40_custom
dans l'étape précédente, veuillez les supprimer.Voici un exemple de script40_custom
personnalisé :#!/bin/sh exec tail -n +3 $0 # This file provides an easy way to add custom menu entries. Simply type the # menu entries you want to add after this comment. Be careful not to change # the 'exec tail' line above. menuentry 'First custom entry' --class red --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.10.0-67.el7.x86_64-advanced-32782dd0-4b47-4d56-a740-2076ab5e5976' { load_video set gfxpayload=keep insmod gzio insmod part_msdos insmod xfs set root='hd0,msdos1' if [ x$feature_platform_search_hint = xy ]; then search --no-floppy --fs-uuid --set=root --hint='hd0,msdos1' 7885bba1-8aa7-4e5d-a7ad-821f4f52170a else search --no-floppy --fs-uuid --set=root 7885bba1-8aa7-4e5d-a7ad-821f4f52170a fi linux16 /vmlinuz-3.10.0-67.el7.x86_64 root=/dev/mapper/rhel-root ro rd.lvm.lv=rhel/root vconsole.font=latarcyrheb-sun16 rd.lvm.lv=rhel/swap vconsole.keymap=us crashkernel=auto rhgb quiet LANG=en_US.UTF-8 initrd16 /initramfs-3.10.0-67.el7.x86_64.img } menuentry 'Second custom entry' --class red --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-0-rescue-07f43f20a54c4ce8ada8b70d33fd001c-advanced-32782dd0-4b47-4d56-a740-2076ab5e5976' { load_video insmod gzio insmod part_msdos insmod xfs set root='hd0,msdos1' if [ x$feature_platform_search_hint = xy ]; then search --no-floppy --fs-uuid --set=root --hint='hd0,msdos1' 7885bba1-8aa7-4e5d-a7ad-821f4f52170a else search --no-floppy --fs-uuid --set=root 7885bba1-8aa7-4e5d-a7ad-821f4f52170a fi linux16 /vmlinuz-0-rescue-07f43f20a54c4ce8ada8b70d33fd001c root=/dev/mapper/rhel-root ro rd.lvm.lv=rhel/root vconsole.font=latarcyrheb-sun16 rd.lvm.lv=rhel/swap vconsole.keymap=us crashkernel=auto rhgb quiet initrd16 /initramfs-0-rescue-07f43f20a54c4ce8ada8b70d33fd001c.img }
- Supprimez tous les fichier du répertoire
/etc/grub.d/
sauf les fichiers suivants :00_header
,40_custom
,01_users
(s'il existe),- et
README
.
Alternativement, si vous souhaitez conserver les fichiers dans le répertoire/etc/grub2.d/
, rendez-les non exécutables par la commandechmod
.a-x
<file_name> - Modifiez, ajoutez, ou supprimez des entrées de menu dans le fichier
40_custom
comme vous le souhaitez. - Créez à nouveau le fichier
grub.cfg
en exécutant la commandegrub2-mkconfig
:-o
- Sur les machines basées BIOS, exécutez la commande suivante en tant qu'utilisateur
root
:~]#
grub2-mkconfig -o /boot/grub2/grub.cfg
- Sur les machines basées UEFI, veuillez exécuter la commande suivante en tant qu'utilisateur
root
:~]#
grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfg