Utiliser Fedora, Red Hat et dérivées

Regénérer avec dracut les entrées rescue du noyau Linux

Table des matières

Introduction



Lorsque le système est installé pour la première fois, on a une entrée rescue qui est créée en plus des différents noyaux :

kernel-rescue



Cette entrée 0-rescue est conçue pour démarrer le système avec une version spéciale du noyau et une image initramfs qui sont optimisées pour la récupération. Cela permet aux sysadmins de démarrer dans un environnement minimal, avec plein d'outils, même si le système principal ne parvient pas à démarrer correctement.

Par exemple, sur mon système Fedora Linux 41, on constate que le initramfs "rescue" généré pour le noyau 6.11.8 est bien plus volumineux que le initramfs "classique" :
Code TEXT :
-rw-------. 1 root root 160214517 13 mars   2024 initramfs-0-rescue-5d9f7c30b5e7463fa6e43eef4bb4cdad.img
-rw-------  1 root root  36084561 27 nov.  11:01 initramfs-6.11.8-300.fc41.x86_64.img


Cet initramfs (et son noyau associé) ne sont pas regénérés en mode rescue lorsque le noyau est mis à jour.

Lorsqu'on met à niveau notre système (RHEL, Fedora Linux, ou autre distribution), il est nécessaire de penser à regénérer de temps en temps le noyau et le initramfs en mode rescue. Cela permet de l'avoir à jour.

Ces manipulations fonctionnent aussi bien pour Fedora Linux que pour Red Hat Enterprise Linux (et ses dérivées telles qu'Alma Linux)

Prérequis



Cet article s'applique aux disitributions Linux utilisant dracut pour générer les images initramfs.

Il faudra supprimer le noyau rescue actuel ainsi que son initramfs :
Code BASH :
rm /boot/vmlinuz-*rescue* /boot/initramfs-*rescue*


Il se peut que la commande nécessaire ne soit pas livrée avec le paquet dracut (c'est le cas sur RHEL, Fedora et dérivées). Dans ce cas, installer le paquet dracut-config-rescue :
Code BASH :
dnf install dracut-config-rescue


Regénération de l'image rescue



Après avoir démarré sur un kernel fonctionnel, on peut repérer sur quoi GRUB bootait en mode rescue :
Code BASH :
grep ^title /boot/loader/entries/*rescue*


Ce qui renvoie chez moi une entrée vieille de Fedora 30 :
Code TEXT :
title Fedora (0-rescue-331ba5795dcb4a0c84115c80b34d1098) 30 (Workstation Edition)


On va générer un nouveau kernel et son image initrd associée :
Code BASH :
/usr/lib/kernel/install.d/51-dracut-rescue.install add "$(uname -r)" /boot "/boot/vmlinuz-$(uname -r)"


On peut vérifier que le kernel est bien regénéré ainsi que son initrd :
Code BASH :
ls -lh /boot/*rescue*


Ce qui renvoie :
Code TEXT :
-rw-------. 1 root root 167M  4 nov.  17:05 /boot/initramfs-0-rescue-331ba5795dcb4a0c84115c80b34d1098.img
-rwxr-xr-x. 1 root root  16M  4 nov.  17:04 /boot/vmlinuz-0-rescue-331ba5795dcb4a0c84115c80b34d1098


On pourra vérifier que les entrées de GRUB sont à jour maintenant :
Code BASH :
grep ^title /boot/loader/entries/*rescue*


Ce qui renvoie chez moi une entrée pour ma Fedora 41 actuelle :
Code TEXT :
title Fedora Linux (0-rescue-331ba5795dcb4a0c84115c80b34d1098) 41 (Workstation Edition)


On pourra inspecter le contenu de l'initrd avec la commande suivante et voir que le noyau et les modules inclus dans cette image sont bien les actuels :
Code BASH :
lsinitrd /boot/initramfs-*rescue*.img |  grep "$(uname -r)"


Cette page a été vue 145 fois