Activer Kdump sous Linux : dumps de kernel panic
Niveau : Intermédiaire / Senior
Temps estimé : ~30 minutes
Objectif : Configurer la capture de vidage sur incident (crash dump) kdump sous Linux pour les paniques du noyau, permettant une analyse post-mortem fiable des défaillances en production. Ce guide explique comment activer kdump sous Linux, couvrant toute la configuration du vidage sur incident Linux, de la réservation de mémoire à l'analyse du vmcore.
Introduction
Une panique du noyau (kernel panic) arrête le système, et sans vidage sur incident, vous n'avez aucune donnée avec laquelle travailler. Kdump, le framework standard de vidage sur incident du noyau Linux, résout ce problème : il précharge un noyau de capture dans la mémoire réservée, et lorsque le noyau principal panique, kexec démarre ce noyau de capture pour écrire une image complète de la mémoire (vmcore) sur le disque. Dans ce tutoriel, vous apprendrez comment activer kdump sous Linux pour la capture de vidage sur incident de panique du noyau Linux sur les systèmes Ubuntu, Debian et basés sur RHEL. Nous vous montrerons exactement comment activer les systèmes kdump requis par Linux, avec les étapes d'analyse post-mortem du vmcore sous Linux incluses.
Qu'est-ce que Kdump ?
Kdump est un mécanisme de vidage sur incident du noyau qui utilise kexec pour démarrer un noyau de capture secondaire à partir d'une région de mémoire réservée chaque fois que le noyau principal panique. Le noyau de capture s'exécute avec une mémoire limitée (définie par le paramètre de démarrage crashkernel) et écrit l'image mémoire du noyau défaillant sur le disque sous forme de vmcore, un fichier de vidage mémoire complet qui peut être analysé avec l'utilitaire crash ou gdb. Le service kdump (kdump.service sur les systèmes basés sur RHEL ou kdump-tools.service sur les systèmes basés sur Debian) gère le chargement du noyau de capture au moment du démarrage.
Composants clés :
- Kexec : l'appel système et l'outil en espace utilisateur qui charge le noyau de capture dans la mémoire réservée.
- Crashkernel : le paramètre de démarrage qui indique au noyau principal combien de RAM réserver pour l'opération kdump sous Linux (par exemple,
crashkernel=256M). - Vmcore : le fichier de sortie contenant le vidage mémoire complet, écrit dans
/var/crashpar défaut. - /var/crash : le répertoire par défaut où kdump stocke les fichiers vmcore après une panique du noyau.
Prérequis
Avant de commencer, assurez-vous que les conditions suivantes sont remplies :
- Système d'exploitation : Ubuntu 22.04/24.04 LTS, Debian 12/13, ou RHEL/CentOS/AlmaLinux 9/10 (Testé et vérifié sur Ubuntu 24.04, Debian 13 et AlmaLinux 10).
- Accès : Accès
sudoou root au serveur. - RAM : Minimum 2 Go au total. Kdump réserve une partie de la mémoire système (généralement 256 Mo) pour le noyau de capture ; les systèmes à faible mémoire peuvent ne pas avoir assez de marge.
- Espace disque : Au moins autant d'espace libre dans
/var/crashque votre système a de RAM (un vmcore peut être aussi grand que la mémoire physique). - Connaissances requises : utilisation maîtrisée de la ligne de commande Linux, édition de base de fichiers et familiarité avec les paramètres de démarrage GRUB.
- Fenêtre de redémarrage : La configuration du paramètre
crashkernelnécessite un redémarrage pour prendre effet.
Étape 1 : Installer les paquets kdump et kexec
Kdump s'appuie sur kexec-tools (le composant en espace utilisateur de kexec/kdump sous Linux) et sur des assistants spécifiques à la distribution.
Ubuntu/Debian :
sudo apt update && sudo apt install kdump-tools kexec-tools crash -y
Lors d'une installation interactive sur Ubuntu, une invite debconf peut apparaître pour demander de configurer automatiquement le paramètre crashkernel. Sélectionnez Oui si on vous le demande. Si l'invite n'apparaît pas (par exemple, en mode non interactif), crashkernel est configuré automatiquement via un fichier drop-in. Si vous devez ajuster la valeur plus tard, l'Étape 2 couvre la configuration manuelle.
RHEL/CentOS/AlmaLinux :
sudo dnf install kexec-tools crash -y
Sur les systèmes basés sur RHEL, le paquet kexec-tools fournit tout ce qui est nécessaire : le binaire kexec, le service kdump et les fichiers de configuration par défaut.
Sur les versions modernes comme AlmaLinux 9 et 10, kexec-tools est généralement préinstallé et le service kdump.service est déjà actif par défaut. Vous pouvez le vérifier en exécutant cat /sys/kernel/kexec_crash_loaded ; s'il renvoie 1, les Étapes 2 et 4 peuvent être safely ignorées.
Le paquet crash est l'outil standard sous Linux pour l'analyse du vmcore. L'installer maintenant vous fera gagner du temps lorsque vous devrez réellement inspecter un vidage.
Étape 2 : Configurer le paramètre de démarrage crashkernel
Le paramètre crashkernel indique au noyau combien de mémoire réserver pour kdump sous Linux au moment du démarrage. Sans cette réservation, le noyau de capture n'a nulle part où s'exécuter. Comprendre comment configurer correctement les valeurs du paramètre crashkernel est essentiel : trop peu et le noyau de capture ne démarrera pas ; trop et vous gaspillerez de la RAM de production.
2.1 Vérifier la configuration actuelle
Tout d'abord, vérifiez si crashkernel est déjà défini :
cat /proc/cmdline | grep crashkernel
Si la sortie contient une entrée crashkernel=, le paramètre est déjà configuré. Vous pouvez vérifier la quantité réservée et passer à l'Étape 3 si elle répond à vos besoins.
2.2 Configurer le paramètre crashkernel sur les systèmes basés sur GRUB
Ubuntu/Debian :
Avant de modifier la configuration principale de GRUB, vérifiez si un fichier drop-in existe déjà :
cat /etc/default/grub.d/kdump-tools.cfg
Si le paquet a déjà configuré crashkernel ici, modifiez ce fichier à la place pour éviter les entrées en double dans grub.cfg. Sinon, ouvrez le fichier des valeurs par défaut principal de GRUB :
sudo nano /etc/default/grub
Trouvez la ligne GRUB_CMDLINE_LINUX_DEFAULT et ajoutez le paramètre crashkernel. Pour la plupart des serveurs de production avec 4 Go ou plus de RAM, 256 Mo sont suffisants pour réserver de la mémoire pour kdump sous Linux :
GRUB_CMDLINE_LINUX_DEFAULT="quiet crashkernel=256M"
Si la ligne contient déjà d'autres paramètres, ajoutez crashkernel=256M après un espace - ne remplacez pas les valeurs existantes.
Pour les serveurs avec moins de 4 Go de RAM, utilisez crashkernel=128M. Pour les systèmes avec 64 Go ou plus, envisagez crashkernel=512M. Vous pouvez également utiliser la syntaxe de mise à l'échelle automatique crashkernel=1G-4G:192M,4G-64G:256M,64G-:512M pour configurer dynamiquement les valeurs du paramètre crashkernel en fonction de la RAM installée.
Enregistrez et fermez le fichier, puis régénérez la configuration GRUB :
sudo update-grub
RHEL/CentOS/AlmaLinux :
Pour RHEL/AlmaLinux 8+, le paramètre crashkernel se trouve dans GRUB_CMDLINE_LINUX (sans _DEFAULT). Cependant, sur les systèmes modernes utilisant BLS (Boot Loader Specification), la méthode la plus sûre et recommandée pour mettre à jour la ligne de commande du noyau consiste à utiliser grubby au lieu de modifier directement /etc/default/grub :
sudo grubby --update-kernel=ALL --args="crashkernel=256M"
Si vous devez le modifier manuellement via les configurations GRUB, éditez /etc/default/grub et mettez à jour GRUB_CMDLINE_LINUX. Ensuite, régénérez la configuration (les chemins varient selon le mode de démarrage) :
# Pour les systèmes BIOS legacy : sudo grub2-mkconfig -o /boot/grub2/grub.cfg # Pour les systèmes UEFI (par exemple, AlmaLinux) : sudo grub2-mkconfig -o /boot/efi/EFI/almalinux/grub.cfg
Une mauvaise configuration de GRUB peut rendre le système impossible à démarrer. Vérifiez vos entrées deux fois. Si vous avez un accès à la console (IPMI/KVM), gardez-le prêt.
2.3 Redémarrer pour appliquer la réservation crashkernel
La réservation de mémoire crashkernel ne prend effet qu'après un redémarrage :
sudo reboot
Après le redémarrage du système, vérifiez que la réservation est active :
cat /proc/cmdline | grep crashkernel
La sortie attendue inclut :
crashkernel=256M
Confirmez également que la mémoire a été réellement réservée :
sudo dmesg | grep -i "crashkernel reserved"
Vous devriez voir une ligne comme :
crashkernel reserved: 0x... - 0x... (NNN MB)
Si la réservation a échoué (le message indique "crashkernel reservation failed"), vous devrez peut-être augmenter ou diminuer la valeur. C'est une étape courante de dépannage des paniques du noyau Linux : le noyau n'a pas pu trouver un bloc contigu de la taille demandée.
Étape 3 : Configurer les paramètres du service kdump sous Linux
La mémoire étant réservée, configurez où et comment kdump stocke le vmcore.
3.1 Configuration RHEL/CentOS/AlmaLinux
Le fichier de configuration principal est /etc/kdump.conf. Ouvrez-le :
sudo nano /etc/kdump.conf
Les directives critiques :
path /var/crash core_collector makedumpfile -l --message-level 7 -d 31
path /var/crash: définit le répertoire cible du vmcore. Tous les vidages sur incident atterrissent ici.core_collector makedumpfile: compresse le vidage et filtre les pages inutiles. L'indicateur-d 31exclut les pages zéro, le cache, les données utilisateur et les pages libres, réduisant généralement un vmcore à 10-20 % de la RAM totale.
Le chemin par défaut /var/crash est relatif au système de fichiers racine. Si votre partition racine est petite, envisagez de pointer ceci vers une partition dédiée ou un point de montage externe avec suffisamment d'espace.
3.2 Configuration Ubuntu/Debian
Sur les systèmes basés sur Debian, la configuration de kdump-tools se trouve dans /etc/default/kdump-tools. Ouvrez-le :
sudo nano /etc/default/kdump-tools
Assurez-vous que ces lignes sont définies :
USE_KDUMP=1 KDUMP_COREDIR="/var/crash" KDUMP_CORE_COLLECTOR="makedumpfile -l --message-level 7 -d 31"
USE_KDUMP=1 active le service kdump. Sans cela, le noyau de capture ne sera pas chargé au démarrage.
Étape 4 : Activer et démarrer le service kdump
C'est la dernière étape pour savoir comment activer kdump sous Linux. Activez le service kdump afin que le noyau de capture se charge automatiquement à chaque démarrage, complétant la configuration kexec/kdump sous Linux.
Ubuntu/Debian :
sudo systemctl enable kdump-tools sudo systemctl start kdump-tools
RHEL/CentOS/AlmaLinux :
sudo systemctl enable kdump sudo systemctl start kdump
Vérifiez que le service est en cours d'exécution :
Ubuntu/Debian :
sudo systemctl status kdump-tools
RHEL/CentOS/AlmaLinux :
sudo systemctl status kdump
La sortie attendue inclut :
Active: active (exited)
L'état "exited" (sorti) est normal : le service kdump charge le noyau de capture dans la mémoire réservée, puis se termine. Il ne s'exécute pas comme un démon persistant.
Si le service ne parvient pas à démarrer, exécutez journalctl -xeu kdump (ou kdump-tools sur les systèmes basés sur Debian) pour voir pourquoi. La cause la plus courante est une réservation crashkernel manquante ou insuffisante ; revenez à l'Étape 2.
Étape 5 : Vérification et test
5.1 Vérifier que kdump est prêt
Confirmez que le noyau de capture est chargé et prêt à se déclencher en cas de panique du noyau :
cat /sys/kernel/kexec_crash_loaded
Sortie attendue :
1
Une valeur de 1 signifie que le noyau de capture est chargé. Un 0 signifie que kdump n'est pas opérationnel ; revenez en arrière et vérifiez l'état du service et la réservation crashkernel.
Vous pouvez également inspecter combien de mémoire a été mise de côté pour réserver de la mémoire pour kdump sous Linux :
cat /sys/kernel/kexec_crash_size
Cela renvoie la réservation en octets.
5.2 Déclencher un crash de test
La commande suivante provoque une panique du noyau immédiate. Le système va planter, capturer un vmcore et redémarrer. N'exécutez jamais cela sur un serveur de production pendant les heures de bureau sans une fenêtre de maintenance. Assurez-vous que tous les services critiques sont soit vidés, soit que le serveur est hors de la rotation du répartiteur de charge.
Activez les déclencheurs SysRq, puis forcez un crash :
echo 1 | sudo tee /proc/sys/kernel/sysrq echo c | sudo tee /proc/sysrq-trigger
Le système va paniquer. Si kdump est correctement configuré, le noyau de capture démarre, écrit le vmcore dans /var/crash et le système redémarre automatiquement.
Votre session SSH sera instantanément interrompue. Attendez 3 à 5 minutes que le vidage soit écrit et que le système redémarre complètement avant de tenter de vous reconnecter.
5.3 Confirmer que le vmcore a été capturé
Après le redémarrage, vérifiez /var/crash pour le vidage :
ls -lh /var/crash/
Sortie attendue (le format varie selon la distribution) :
Famille RHEL (AlmaLinux/CentOS) :
drwxr-xr-x 2 root root 4.0K May 23 14:00 127.0.0.1-2026-05-23-14:00:01/
À l'intérieur de ce répertoire horodaté, vous trouverez vmcore (le vidage mémoire) et vmcore-dmesg.txt (le journal du noyau).
Famille Debian (Ubuntu/Debian) :
drwxr-xr-x 2 root root 4.0K May 23 14:00 202605231400/
À l'intérieur de ce répertoire, les fichiers sont généralement nommés dump.<horodatage> et dmesg.<horodatage>.
Vérifiez à l'intérieur du répertoire :
ls -lh /var/crash/*/
Voir ces fichiers confirme que votre pipeline de vidage sur incident du noyau Linux est entièrement opérationnel.
Étape 6 : Analyser un fichier vmcore
Capturer un vidage sur incident n'est utile que si vous pouvez le lire. L'utilitaire crash est l'outil standard sur lequel les administrateurs Linux s'appuient pour l'analyse du vmcore et le dépannage des paniques du noyau Linux.
6.1 Installer le noyau de débogage
L'outil crash nécessite les symboles de débogage de la version exacte du noyau qui a paniqué.
Ubuntu :
echo "deb http://ddebs.ubuntu.com $(lsb_release -cs) main restricted universe multiverse deb http://ddebs.ubuntu.com $(lsb_release -cs)-updates main restricted universe multiverse" | sudo tee /etc/apt/sources.list.d/ddebs.list sudo apt install ubuntu-dbgsym-keyring sudo apt update sudo apt install linux-image-unsigned-$(uname -r)-dbgsym
Pour les noyaux signés, les symboles de débogage se trouvent dans le paquet unsigned.
Debian :
echo "deb http://deb.debian.org/debian-debug/ $(lsb_release -cs)-debug main" | sudo tee /etc/apt/sources.list.d/debian-debug.list sudo apt update sudo apt install linux-image-$(uname -r)-dbg
Vous devez installer la compilation exacte des symboles de débogage. Si le paquet n'est pas trouvé, mettez à jour votre noyau vers la dernière version disponible et redémarrez.
RHEL/CentOS/AlmaLinux :
sudo dnf --enablerepo='*-debuginfo' install -y kernel-debuginfo-$(uname -r)
Alternativement, vous pouvez utiliser sudo dnf debuginfo-install -y kernel-$(uname -r) si le plugin debuginfo-install est disponible.
6.2 Ouvrir le vmcore avec crash
Avant d'exécuter crash, vérifiez que les symboles de débogage sont installés et correspondent à votre version du noyau afin de ne pas l'exécuter à l'aveugle :
# RHEL/Debian : ls -lh /usr/lib/debug/lib/modules/$(uname -r)/vmlinux # Ubuntu : ls -lh /usr/lib/debug/boot/vmlinux-$(uname -r)
Naviguez vers le répertoire de vidage sur incident et ouvrez le vmcore (la commande exacte varie selon l'OS) :
RHEL/CentOS/AlmaLinux :
sudo crash /usr/lib/debug/lib/modules/$(uname -r)/vmlinux /var/crash/*/vmcore
Debian :
sudo crash /usr/lib/debug/lib/modules/$(uname -r)/vmlinux /var/crash/*/dump.*
Ubuntu :
sudo crash /usr/lib/debug/boot/vmlinux-$(uname -r) /var/crash/*/dump.*
L'utilitaire crash se charge et vous plonge dans un shell interactif. Commandes clés pour le triage initial :
bt # trace arrière (backtrace) de la tâche ayant déclenché la panique log # tampon du journal du noyau (identique à dmesg au moment de la panique) ps # liste des processus au moment du crash mod # modules du noyau chargés sys # informations système
Tapez exit ou quit pour quitter le shell crash.
Commencez par bt pour voir la pile d'appels exacte qui a déclenché la panique. Dans la plupart des cas, cela pointe immédiatement vers le module ou le pilote du noyau fautif : la technique de dépannage des paniques du noyau Linux la plus directe disponible.
Annulation (Rollback)
Pour annuler la configuration kdump et récupérer la mémoire réservée :
1. Arrêter et désactiver le service kdump :
Ubuntu/Debian :
sudo systemctl disable --now kdump-tools
RHEL/CentOS/AlmaLinux :
sudo systemctl disable --now kdump
2. Supprimer le paramètre crashkernel :
Ubuntu/Debian :
Ouvrez le fichier de configuration drop-in :
sudo nano /etc/default/grub.d/kdump-tools.cfg
Supprimez le paramètre crashkernel (si vous l'avez ajouté manuellement à /etc/default/grub, éditez ce fichier à la place).
RHEL/CentOS/AlmaLinux :
Ouvrez le fichier des valeurs par défaut de GRUB :
sudo nano /etc/default/grub
Supprimez crashkernel=256M de la ligne GRUB_CMDLINE_LINUX ou GRUB_CMDLINE_LINUX_DEFAULT.
Régénérer GRUB :
Ubuntu/Debian :
sudo update-grub
RHEL/CentOS/AlmaLinux :
sudo grub2-mkconfig -o /boot/grub2/grub.cfg
3. Redémarrer pour libérer la mémoire réservée :
sudo reboot
4. Supprimer les paquets (optionnel) :
Ubuntu/Debian :
sudo apt remove --purge kdump-tools kexec-tools crash -y
RHEL/CentOS/AlmaLinux :
sudo dnf remove kexec-tools crash -y
La suppression de kdump signifie que le système ne capturera plus de vidages sur incident lors des paniques du noyau. Les fichiers vmcore existants dans /var/crash ne sont pas supprimés ; archivez-les ou supprimez-les manuellement si vous avez besoin d'espace disque.
Dépannage
Le service kdump ne parvient pas à démarrer
Vérifiez le journal pour connaître la raison :
journalctl -xeu kdump
Causes courantes :
- Aucune réservation crashkernel. Vérifiez avec
cat /proc/cmdline | grep crashkernel. S'il manque, répétez l'Étape 2. - Mémoire réservée insuffisante. Le noyau de capture a besoin de suffisamment de RAM pour s'initialiser et écrire le vidage. Essayez d'augmenter la valeur (par exemple,
crashkernel=512M). - Conflit avec Secure Boot. Certaines configurations de Secure Boot empêchent kexec de charger des noyaux non signés. Signez le noyau de capture ou désactivez Secure Boot dans le BIOS.
Le vmcore n'est pas écrit après une panique
- Espace disque. Vérifiez que
/var/crashdispose de suffisamment d'espace libre. Un vmcore peut approcher la taille de la RAM physique (avant la compressionmakedumpfile). - Mauvais chemin. Confirmez que
pathdans/etc/kdump.conf(ouKDUMP_COREDIRdans/etc/default/kdump-tools) pointe vers un système de fichiers monté et accessible en écriture. - Refus SELinux. Sur les systèmes basés sur RHEL, vérifiez
ausearch -m avc -ts recentpour les refus liés à kdump.
Le système se fige au lieu de capturer le vidage
Cela indique généralement un problème matériel ou de pilote empêchant la transition kexec/kdump sous Linux. Essayez d'ajouter irqpoll nr_cpus=1 reset_devices à la ligne de commande du noyau kdump dans /etc/sysconfig/kdump (RHEL) ou /etc/default/kdump-tools (Debian) en tant que KDUMP_CMDLINE_APPEND.
Conclusion
C'est tout. Crashkernel réserve la mémoire, le service kdump charge le noyau de capture au démarrage, et lors d'un vidage sur incident de panique du noyau Linux, le vmcore atterrit dans /var/crash, prêt pour une configuration de vidage sur incident Linux en laquelle vous pouvez réellement avoir confiance. Vous disposez maintenant d'une configuration fonctionnelle pour activer automatiquement la capture de vidage sur incident kdump sous Linux ; pour un dépannage plus approfondi des paniques du noyau Linux, alimentez le vmcore à crash et commencez par la trace arrière.
Version du document : 1.0
Dernière mise à jour : Mai 2026
Propriétaire : Équipe de Documentation Technique