Chapitre 24. Utiliser le chargeur de démarrage GRUB 2

Red Hat Enterprise Linux 7 est distribué avec la version 2 du chargeur de démarrage GNU GRUB (« GRand Unified Boot loader »), qui permet à l'utilisateur de sélectionner un système d'exploitation ou un noyau à charger pendant le démarrage système. GRUB 2 permet également à l'utilisateur de passer des arguments au noyau.

24.1. Introduction à GRUB 2

GRUB 2 lit sa configuration dans le fichier /boot/grub2/grub.cfg pour les machines traditionnelles basées BIOS et dans le fichier /boot/efi/EFI/redhat/grub.cfg pour les machines UEFI. Ce fichier contient des informations de menu.
Le fichier de configuration GRUB 2, grub.cfg, est généré en cours d'installation, ou bien, en invoquant l'utilitaire /usr/sbin/grub2-mkconfig, et est mis à jour par grubby automatiquement à chaque fois qu'un nouveau noyau est installé. Quand il est regénéré manuellement par grub2-mkconfig, le fichier est regénéré selon les fichiers de modèle qui se trouvent dans /etc/grub.d/, et les paramètres de configuration personnalisés du fichier /etc/default/grub. Les changements apportées à grub.cfg seront perdues à chaque fois que grub2-mkconfig est utilisé pour regénérer le fichier, donc il faut faire refléter les changements manuels dans le fichier /etc/default/grub également.
Les opérations normales de grub.cfg, comme la suppression ou le rajout de nouveaux noyaux, doivent être effectuées par l'outil grubby et pour les scripts, par l'outil new-kernel-pkg. Si vous utilisez grubby pour changer le noyau par défaut, les changements seront hérités quand vous installerez des nouveaux noyaux. Pour plus d'informations sur grubby, voir Section 24.4, « Effectuer des Changements persistnats à un menu GRUB 2 par l'outil grubby ».
Le fichier /etc/default/grub est utilisé par l'outil grub2-mkconfig, utilisé lui-même par anaconda quand on crée grub.cfg au cours du processus d'installation, et il peut être utilisé en cas d'échec du système, comme par exemple, au cas où les configurations du chargeur de démarrage ont besoin d'être créées à nouveau. En général, il n'est pas conseillé de remplacer le fichier grub.cfg en exécutant grub2-mkconfig manuellement, sauf en cas de dernier recours. Notez que tout changement manuel à /etc/default/grub entraîne la création à nouveau du fichier grub.cfg.

Entrées de menu dans grub.cfg

Parmi les divers snippets et directives, le fichier de configuration grub.cfg contient un ou plusieurs bloc(s) menuentry, qui représentent chacun une entrée unique du menu de démarrage GRUB 2. Ces blocs commencent toujours par le mot-clé menuentry suivi d'un titre, d'une liste d'options, et d'une accolade d'ouverture, et se terminant avec une accolade de fermeture. Tout ce qui se trouve entre l'accolade d'ouverture et l'accolade de fermeture doit être indenté. Par exemple, ci-dessous figure un exemple de bloc menuentry pour Red Hat Enterprise Linux 7 avec le noyau Linux 3.8.0-0.40.el7.x86_64 :
menuentry 'Red Hat Enterprise Linux Server' --class red --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-c60731dc-9046-4000-9182-64bdcce08616' {
        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-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1 --hint='hd0,msdos1'  19d9e294-65f8-4e37-8e73-d41d6daa6e58
        else
          search --no-floppy --fs-uuid --set=root 19d9e294-65f8-4e37-8e73-d41d6daa6e58
        fi
        echo    'Loading Linux 3.8.0-0.40.el7.x86_64 ...'
        linux16   /vmlinuz-3.8.0-0.40.el7.x86_64 root=/dev/mapper/rhel-root ro rd.md=0 rd.dm=0 rd.lvm.lv=rhel/swap crashkernel=auto rd.luks=0 vconsole.keymap=us rd.lvm.lv=rhel/root rhgb quiet
        echo    'Loading initial ramdisk ...'
        initrd  /initramfs-3.8.0-0.40.el7.x86_64.img
}
Chaque bloc menuentry qui représente un noyau Linux installé contient linux sur 64 bits IBM POWER Series, linux16 sur systèmes basés BIOS x86_64, et linuxefi sur systèmes basés UEFI. Puis les directives initrd suivies par le chemin vers le noyau et l'image initramfs, respectivement. Si une autre partition /boot a été créée, les chemins vers le noyau et l'image initramfs sont relatifs à /boot. Dans l'exemple ci-dessus, la ligne initrd /initramfs-3.8.0-0.40.el7.x86_64.img signifie que l'image initramfs est en fait située sur /boot/initramfs-3.8.0-0.40.el7.x86_64.img lorsque le système de fichiers root est monté, et de même pour le chemin du noyau.
Le numéro de version du noyau donné sur la ligne linux16 /vmlinuz-kernel_version doit correspondre au numéro de version de l'image initramfs donnée sur la ligne initrd /initramfs-kernel_version.img de chaque bloc menuentry. Pour obtenir des informations supplémentaires sur la manière de vérifier l'image du disque RAM initial, veuillez consulter la Section 25.5, « Vérifier l'image de disque RAM initial ».

Note

Dans les blocs menuentry, la directive initrd doit indiquer l'emplacement (relatif au répertoire /boot s'il se trouve sur une autre partition) du fichier initramfs correspondant à la même version du noyau. Cette directive est appellée initrd car l'outil précédant, qui avait créé les images de disque RAM initial, mkinitrd, créait des fichiers nommés des fichiers initrd. La directive grub.cfg reste initrd afin de rester compatible avec d'autres outils. La convention de dénomination de fichiers des systèmes utilisant l'utilitaire dracut pour créer l'image du disque RAM initial est comme suit : initramfs-kernel_version.img.
Pour obtenir des informations sur l'utilisation de Dracut, veuillez consulter la Section 25.5, « Vérifier l'image de disque RAM initial ».