Lorsque le mécanisme de vidage sur incident kdump est activé, le système est démarré à partir du contexte d'un autre noyau. Ce deuxième noyau réserve une petite quantité de mémoire et son seul but est de capturer l'image de vidage de mémoire en cas de plantage du système.
Le fait de pouvoir analyser le vidage mémoire aide considérablement à déterminer la cause exacte de la défaillance du système, et il est donc fortement recommandé d'activer cette fonctionnalité. Ce chapitre explique comment configurer, tester et utiliser le service kdump dans Red Hat Enterprise Linux, et fournit un bref aperçu de la façon d'analyser le vidage mémoire résultant à l'aide de l'utilitaire de débogage de plantage.
Installation du service kdump
Pour utiliser le service kdump sur votre système, assurez-vous d'avoir les kexec-tools paquet installé. Pour ce faire, saisissez ce qui suit à l'invite du shell en tant qu'utilisateur root :
# yum install kexec-tools
Configuration du service kdump
Configuration de l'utilisation de la mémoire
Pour configurer la quantité de mémoire à réserver pour le noyau kdump, modifiez le fichier /boot/grub/grub.conf fichier et ajoutez crashkernel=[size]M ou crashkernel=auto . Notez que l'option crashkernel=auto ne réserve la mémoire que si la mémoire physique du système est égale ou supérieure à :
- 2 Go sur les architectures x86 32 bits et 64 bits
Un exemple de fichier /boot/grub/grub.conf
# grub.conf generated by anaconda # # Note that you do not have to rerun grub after making changes to this file # NOTICE: You have a /boot partition. This means that # all kernel and initrd paths are relative to /boot/, eg. # root (hd0,0) # kernel /vmlinuz-version ro root=/dev/sda3 # initrd /initrd #boot=/dev/sda default=0 timeout=5 splashimage=(hd0,0)/grub/splash.xpm.gz hiddenmenu title Red Hat Enterprise Linux Server (2.6.32-220.el6.x86_64) root (hd0,0) kernel /vmlinuz-2.6.32-220.el6.x86_64 ro root=/dev/sda3 crashkernel=128M initrd /initramfs-2.6.32-220.el6.x86_64.img
Configuration du type de cible
Lorsqu'un plantage du noyau est capturé, le vidage de mémoire peut être stocké sous forme de fichier dans un système de fichiers local, écrit directement sur un périphérique ou envoyé sur un réseau à l'aide du protocole NFS (Network File System) ou SSH (Secure Shell). Une seule de ces options peut être définie pour le moment, et l'option par défaut consiste à stocker le fichier vmcore dans /var/crash/ répertoire du système de fichiers local. Pour changer cela, en tant que root, ouvrez le fichier de configuration /etc/kdump.conf dans un éditeur de texte et modifiez les options comme décrit ci-dessous.
Pour modifier le répertoire local dans lequel le vidage de mémoire doit être enregistré, supprimez le signe dièse ("#") au début de la ligne #path /var/crash et remplacez la valeur par le chemin de répertoire souhaité. Facultativement, si vous souhaitez écrire le fichier sur une autre partition, suivez également la même procédure avec la ligne #ext4 /dev/sda3 et modifiez à la fois le type de système de fichiers et le périphérique (un nom de périphérique, une étiquette de système de fichiers, et UUID sont tous pris en charge) en conséquence. Par exemple :
ext3 /dev/sda4 path /usr/local/cores
Pour écrire le vidage directement sur un périphérique, supprimez le signe dièse ("#") au début de la ligne #raw /dev/sda5 et remplacez la valeur par le nom de périphérique souhaité. Par exemple :
raw /dev/sdb1
Pour stocker le vidage sur une machine distante à l'aide du protocole NFS, supprimez le signe dièse ("#") au début de la ligne #net my.server.com:/export/tmp et remplacez la valeur par un nom d'hôte valide et le chemin du répertoire. Par exemple :
net penguin.example.com:/export/cores
Pour stocker le vidage sur une machine distante à l'aide du protocole SSH, supprimez le signe dièse ("#") au début de la ligne #net [email protected] et remplacez la valeur par un nom d'utilisateur et un nom d'hôte valides . Par exemple :
net [email protected]
Lors du transfert d'un fichier core vers une cible distante via SSH, le fichier core doit être sérialisé pour le transfert. Cela crée un fichier vmcore.flat dans le répertoire /var/crash/ sur le système cible, qui est illisible par l'utilitaire de blocage. Pour convertir vmcore.flat en un fichier de vidage lisible en cas de plantage, exécutez la commande suivante en tant qu'utilisateur root sur le système cible :
# /usr/sbin/makedumpfile -R */tmp/vmcore-rearranged* < *vmcore.flat*
Configuration du collecteur principal
Pour réduire la taille du fichier de vidage vmcore, kdump vous permet de spécifier une application externe (c'est-à-dire un collecteur principal) pour compresser les données et éventuellement omettre toutes les informations non pertinentes. Actuellement, le seul collecteur de base entièrement pris en charge est makedumpfile.
Pour activer le collecteur principal, en tant que root, ouvrez le fichier de configuration /etc/kdump.conf dans un éditeur de texte, supprimez le signe dièse ("#") au début du #core_collector makedumpfile -c --message-level 1 - d 31 et modifiez les options de ligne de commande comme décrit ci-dessous.
Pour activer la compression du fichier de vidage, ajoutez le paramètre -c. Par exemple :
core_collector makedumpfile -c
Pour supprimer à la fois les pages nulles et libres, utilisez ce qui suit :
core_collector makedumpfile -d 17 -c
Reportez-vous à la page de manuel de makedumpfile pour une liste complète des options disponibles.
Modification de l'action par défaut
Par défaut, lorsque kdump ne parvient pas à créer un vidage mémoire, le système de fichiers racine est monté et /sbin/init est exécuté. Pour modifier ce comportement, en tant qu'utilisateur root, ouvrez le fichier de configuration /etc/kdump.conf dans un éditeur de texte, supprimez le signe dièse ("#") au début de la ligne de shell #default et remplacez la valeur par l'action souhaitée. comme décrit ci-dessous :
Actions prises en charge
Option | Description |
---|---|
redémarrer | Redémarrez le système, en perdant le noyau dans le processus. |
arrêter | Arrêter le système. |
mise hors tension | Éteignez le système. |
shell | Exécutez la session msh à partir de l'initramfs, permettant à un utilisateur d'enregistrer le noyau manuellement. |
Par exemple :
default halt
Activation du service
Pour démarrer le démon kdump au démarrage, saisissez ce qui suit à l'invite du shell en tant qu'utilisateur root :
# chkconfig kdump on
Cela activera le service pour les niveaux d'exécution 2, 3, 4 et 5. De même, taper "chkconfig kdump off" le désactivera pour tous les niveaux d'exécution. Pour démarrer le service dans la session en cours, utilisez la commande suivante en tant que root :
# service kdump start
Tester la configuration
Les commandes ci-dessous feront planter le noyau. Soyez prudent lorsque vous suivez ces étapes et ne les utilisez en aucun cas sur une machine de production. Pour tester la configuration, redémarrez le système avec kdump activé et assurez-vous que le service est en cours d'exécution :
# service kdump status Kdump is operational
Tapez ensuite les commandes suivantes à l'invite du shell :
# echo 1 > /proc/sys/kernel/sysrq # echo c > /proc/sysrq-trigger
Cela forcera le noyau Linux à planter et le fichier address-YYYY-MM-DD-HH:MM:SS/vmcore sera copié à l'emplacement que vous avez sélectionné dans la configuration (c'est-à-dire vers /var/crash/ par par défaut).