Qu'est-ce que la prise en charge anticipée de kdump ?
Dans les versions précédentes de CentOS/RHEL (5/6/7), le service kdump démarrait très tard dans la séquence de démarrage. Ainsi, les premières informations sur les plantages sont perdues lors du démarrage. À partir de CentOS/RHEL 8, un nouveau mécanisme de kdump appelé "prise en charge précoce de kdump" a été introduit pour résoudre ce problème. Early Kdump stocke les vmlinuz et initramfs du noyau de plantage dans les initramfs du noyau de démarrage et les charge directement dans la mémoire réservée (crashkernel) au début de la phase de démarrage.
Le package "kexec-tools" dispose désormais de 2 modules supplémentaires pour charger le noyau du crash et initramfs le plus tôt possible pendant la séquence de démarrage pour capturer le vidage du noyau du noyau de démarrage.
/usr/lib/dracut/modules.d/99earlykdump/early-kdump.sh /usr/lib/dracut/modules.d/99earlykdump/module-setup.sh
# dracut --list-modules | grep earlykdump earlykdump
Par défaut, la prise en charge précoce de kdump est désactivée et nous devons l'activer manuellement. Il prend également en charge toutes les cibles de vidage et les paramètres de configuration pris en charge par les configurations kdump antérieures dans CentOS/RHEL 5,6,7.
Configurer le service kdump
1. Reportez-vous à la publication de configuration de kdump ci-dessous pour configurer kdump et vous assurer que le service kdump est en cours d'exécution.
CentOS / RHEL 7 :Comment configurer kdump# systemctl enable --now kdump.service
# systemctl status kdump.service ● kdump.service - Crash recovery kernel arming Loaded: loaded (/usr/lib/systemd/system/kdump.service; enabled; vendor preset: enabled) Active: active (exited) since Mon 2019-08-19 23:42:11 IST; 16h ago Main PID: 1255 (code=exited, status=0/SUCCESS) Tasks: 0 (limit: 26213) Memory: 0B CGroup: /system.slice/kdump.service Aug 19 23:42:09systemd[1]: Starting Crash recovery kernel arming... Aug 19 23:42:11 kdumpctl[1255]: Kdump already running: [WARNING] Aug 19 23:42:11 systemd[1]: Started Crash recovery kernel arming.
2. Listez les modules de vidage anticipé disponibles dans le système
# dracut --list-modules | grep earlykdump earlykdump
3. Ajoutez le paramètre rd.earlykdump aux kernelopts ligne dans /boot/grub2/grubenv fichier :
# cat /boot/grub2/grubenv # GRUB Environment Block saved_entry=4eb68bf18e86437d9c957ff4863a3288-4.18.0-80.el8.x86_64 kernelopts=root=/dev/mapper/ol-root ro crashkernel=auto resume=/dev/mapper/ol-swap rd.lvm.lv=ol/root rd.lvm.lv=ol/swap rd.earlykdump boot_success=0 ################################################################################################### ################################################################################################### ###################################################################################################
Recréer iniramfs
1. L'étape suivante consiste maintenant à recréer initramfs pour ajouter les premiers modules kdump :
# lsinitrd | grep -i early
# dracut -f --add earlykdump
Par exemple :
# lsinitrd |grep -i early Arguments: -f --add 'earlykdump' earlykdump -rwxr-xr-x 1 root root 1940 Jun 17 10:29 usr/lib/dracut/hooks/cmdline/00-early-kdump.sh
2. Redémarrez la box pour charger les modifications
# reboot
3. Une fois le serveur remis en ligne, vérifiez le statut de early-kdump :
# journalctl -x |grep -i early-kdump Aug 20 16:08:09 [HOSTNAME] dracut-cmdline[196]: early-kdump is enabled. Aug 20 16:08:10 [HOSTNAME] dracut-cmdline[196]: kexec: loaded early-kdump kernel
Tester le premier kdump
Testons maintenant le early-kdump en utilisant des fichiers unitaires systemd personnalisés et faisons planter SysRq dans la panique.
1. Créez un nom de fichier d'unité /etc/systemd/system/test_early_kdump.service .
# touch /etc/systemd/system/test_early_kdump.service
2. Fournissez les autorisations appropriées :
# chmod 664 /etc/systemd/system/test_early_kdump.service
Le fichier d'unité devrait ressembler à ceci :
# cat /etc/systemd/system/test_early_kdump.service [Unit] Description=test_early_kdump Service Before=kdump.service [Service] ExecStart=/usr/local/test_early_kdump.sh Type=simple [Install] WantedBy=default.target
3. Créez ensuite un autre script /usr/local/test_early_kdump.sh fichier pour passer la commande sysrq crash :
# cat /usr/local/test_early_kdump.sh #!/bin/bash /usr/bin/echo c > /proc/sysrq-trigger
4. Fournissez une autorisation exécutable pour le script :
# chmod +x /usr/local/test_early_kdump.sh
5. Rechargez le démon systemd :
# systemctl daemon-reloadIMPORTANT :Ne démarrez pas le service test_early_kdump.service (test crash) sinon le système plantera immédiatement.
6. Activez ce service test_early_kdump au niveau du démarrage :
# systemctl enable test_early_kdump.service
7. Redémarrez le système :
# rebootRemarque :Lors du démarrage du système selon le script de test personnalisé, il déclenchera un plantage et continuera à redémarrer.
8. Désactivez les fichiers d'unité et de script personnalisés et supprimez-les après avoir testé. Démarrez le système en mode de secours en utilisant 'systemd.unit=rescue.target ' et désactiver le service 'test_early_kdump' au démarrage.
# systemctl disable test_early_kdump.service
La commande ci-dessus désactive le fichier d'unité personnalisé. La prochaine fois, le système démarrera normalement.
Comment démarrer en mode de secours ou en mode d'urgence via Systemd dans CentOS/RHEL 7 et 89. Supprimez les fichiers d'unité personnalisés et le fichier de script de plantage lorsque le plantage TEST est terminé :
# rm /etc/systemd/system/test_edump.service rm: remove regular file '/etc/systemd/system/test_edump.service'? y
# rm /usr/local/test_early_kdump.sh
10. Vérifiez le /var/crash/ dossier selon le kdump.conf (chemin /var/crash) mentionné pour le vmcore :
# ls -l /var/crash/127.0.0.1-2019-08-20-17:09:23 total 56648 -rw-------. 1 root root 57959829 Aug 20 17:09 vmcore -rw-r--r--. 1 root root 41452 Aug 20 17:09 vmcore-dmesg.txt