Utiliser Fedora, Red Hat et dérivées

Redémarrer rapidement avec kexec-tools (Fedora, Red Hat et dérivées)

Table des matières

Introduction



kexec est une fonctionnalité du noyau Linux qui permet de charger et d'exécuter un noyau Linux (le même ou une version différente) sans avoir besoin de redémarrer le système.
Ainsi, au lieu de passer par le processus de redémarrage classique, kexec permet d'éviter le cycle d'amorçage BIOS/UEFI, et chargeur d'amorçage GRUB ce qui accélère le processus.

Installation



Si cela n'est pas encore fait, installer le paquet kexec-tools :
Code BASH :
dnf install kexec-tools

Et voila :)

Paramétrer le noyau



Par défaut, quand vous redémarrerez la machine avec la commande
Code BASH :
reboot

kexec-tools n'entrera pas en action.

Il faut exécuter la commande suivante (en root) pour charger le kernel en cours à nouveau :
Code BASH :
kexec -l /boot/vmlinuz-$(uname -r) --initrd=/boot/initramfs-$(uname -r).img --reuse-cmdline


Pour redémarrer avec un nouveau kernel, il faut bien penser à utiliser le nouveau kernel.
Voici un exemple avec un 3.10.0-327.28.3.el7.x86_64 nouvellement installé au moment de la rédaction de cet article :
Code BASH :
kexec -l /boot/vmlinuz-3.10.0-327.28.3.el7.x86_64 --initrd=/boot/initramfs-3.10.0-327.28.3.el7.x86_64.img --reuse-cmdline


L'option --reuse-cmdline permet de réutiliser la ligne de commande du noyau actuel pour le nouveau noyau. Cela peut être utile si on a des options spécifiques.

Si on s'est trompé et qu'on souhaite décharger le noyau pour en charger un nouveau, on pourra utiliser cette commande :
Code BASH :
kexec -u


Redémarrer grâce à kexec-tools



Pour redémarrer sur ce noyau précédemment chargé, on exécutera :
Code BASH :
kexec -e


Et voila, le système redémarre sans repasser par le BIOS/UEFI. :magic:

Troubleshooting



Sur Fedora 39 en mode station de travail, il m'arrive que certains périphériques ne fonctionnent pas correctement.
Sur le PC portable : Je n'ai plus le Wi-Fi
Sur le PC fixe : Je n'ai plus de son

Deux alternatives sont possibles :

La première est de déchanger le module du périphérique concerné avant le reboot via kexec :
Code BASH :
rmmod iwlwifi
kexec -e


La deuxième est d'invoquer le reboot via la cible kexec de systemd :
Code BASH :
systemctl kexec
Cette page a été vue 17823 fois