Kexec

Introduction

Kexec est une fonctionnalité du noyau Linux permettant de redémarrer le noyau sans passer par le POST du BIOS et le chargeur de démarrage. Vous l’aurez compris, Kexec permet de redémarrer très rapidement le système d’exploitation puisque l’on évite toute la partie matérielle. Cela peut s’avérer un gros gain de temps sur les configurations serveur ou les grosses configurations poste de travail, lors de mise à jour noyau par exemple … De plus, comme vous le constaterez plus loin, son utilisation s’avère très simple.

Installation

Gentoo Linux étant une distribution formidable ;-) , il vous suffit de tapper la commande suivante pour intaller le paquet kexec-tools :

emerge -av sys-apps/kexec-tools

Configuration

La configuration comprend une option du noyau et le service assurant le reboot.

Le Noyau

Si vous utilisez un noyau genkernel alors l’option ci-dessous est activée, en revanche, si vous compilez vous-même votre noyau, vous devez vous assurer que votre noyau supporte kexec :

Processor type and features --->
 [*] kexec system call

Vérifiez si l’option est active dans le noyau en cours :

zgrep -i kexec /proc/config.gz
CONFIG_KEXEC=y

Le service

Le comportement par défaut est de charger le noyau et l’initrd en mémoire pendant la séquence d’arrêt du système d’exploitation. Si vous souhaitez qu’il soit effectué au démarrage, vous devez éditer le fichier /etc/conf.d/kexec et y placer la variable suivante :

LOAD_DURING_SHUTDOWN="no"

Le script d’init Gentoo va effectuer l’autodetection du noyau et de l’initrd en cours d’utilisation s’ils se nomment de la manière suivante:

  • seront détectés les noyaux dont le nom commence par bzImage, kernel, kernel-genkernel,
  • seront détectés les initrd dont le nom commence par initrd.img, initrd et initramfs-genkernel.

Afin de vous assurer par vous même les noms supportés, éditez le fichier /etc/init.d/kexec.

Ajoutez le service au niveau boot du démarrage :

rc-update add kexec boot

Démarrez le service :

/etc/init.d/kexec start

A partir de là, votre prochain reboot sera effectué via kexec avec le noyau en cours au moment du démarrage du service.

Utilisation

Il y a une chose importante à appréhender dés le départ, une fois le paquet kexec installé, si vous avez un noyau chargé en mémoire, alors le reboot se fera sur celui-ci via kexec. Comme vous le verrez dans les exemples plus bas, chaque redémarrage physique nécessitera de vider le noyau en mémoire. Prenons le cas où vous venez d’installer un nouveau noyau sur lequel vous souhaitez démarrer. Il suffit de charger en mémoire le noyau, l’initrd/initramfs et la ligne de commande passée au noyau au démarrage :

mount -v /boot && \
kexec -l /boot/kernel-3.16.1-gentoo --reuse-cmdline --initrd=/boot/initramfs-3.16.1-gentoo && \
umount -v /boot

Exécutez le noyau fraîchement chargé :

kexec -e

Déchargez le noyau depuis la mémoire :

kexec -u

Pour redémarrer en mode normal afin de d’atteindre le BIOS par exemple :

kexec -u
shutdown -r now

Ou :

/etc/init.d/kexec stop
kexec -u
reboot

Liens


Merci @Mirsal