Was ist frühe kdump-Unterstützung?
In früheren Versionen von CentOS/RHEL (5/6/7) startete der kdump-Dienst sehr spät in der Startsequenz. Daher gehen Informationen zu frühen Abstürzen während des Bootens verloren. Ab CentOS/RHEL 8 wurde ein neuer kdump-Mechanismus namens „early kdump support“ eingeführt, um dieses Problem anzugehen. Early Kdump speichert die vmlinuz und initramfs des Crash-Kernels innerhalb der initramfs des bootenden Kernels und lädt sie während der frühen Boot-Phase direkt in den reservierten Speicher (crashkernel).
Das „kexec-tools“-Paket hat jetzt 2 zusätzliche Module, um den Crash-Kernel und initramfs so früh wie möglich während der Boot-Sequenz zu laden, um den Kernel-Crash-Dump des bootenden Kernels zu erfassen.
/usr/lib/dracut/modules.d/99earlykdump/early-kdump.sh /usr/lib/dracut/modules.d/99earlykdump/module-setup.sh
# dracut --list-modules | grep earlykdump earlykdump
Standardmäßig ist die frühe kdump-Unterstützung deaktiviert und wir müssen sie manuell aktivieren. Es unterstützt auch alle Dump-Ziele und Konfigurationsparameter, die von den früheren kdump-Konfigurationen in CentOS/RHEL 5,6,7 unterstützt wurden.
Kdump-Dienst konfigurieren
1. Lesen Sie den folgenden Post zur kdump-Konfiguration, um kdump zu konfigurieren und sicherzustellen, dass der kdump-Dienst ausgeführt wird.
CentOS / RHEL 7 :So konfigurieren Sie 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. Listen Sie die Early-Dump-Module auf, die im System verfügbar sind
# dracut --list-modules | grep earlykdump earlykdump
3. Hängen Sie den Parameter rd.earlykdump an zu kernelopts Zeile in /boot/grub2/grubenv Datei:
# 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 ################################################################################################### ################################################################################################### ###################################################################################################
iniramfs neu erstellen
1. Der nächste Schritt besteht nun darin, initramfs neu zu erstellen, um frühe kdump-Module hinzuzufügen:
# lsinitrd | grep -i early
# dracut -f --add earlykdump
Zum Beispiel:
# 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. Starten Sie die Box neu, um die Änderungen zu laden
# reboot
3. Sobald der Server wieder online ist, prüfen Sie den Status von 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
Testen von frühem kdump
Lassen Sie uns nun den frühen kdump mit benutzerdefinierten systemd-Unit-Dateien testen und die Panik mit SysRq zum Absturz bringen.
1. Erstellen Sie einen Unit-Dateinamen /etc/systemd/system/test_early_kdump.service .
# touch /etc/systemd/system/test_early_kdump.service
2. Stellen Sie die entsprechenden Berechtigungen bereit:
# chmod 664 /etc/systemd/system/test_early_kdump.service
Die Unit-Datei sollte wie folgt aussehen:
# 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. Erstellen Sie dann ein weiteres Skript /usr/local/test_early_kdump.sh Datei, um den sysrq-Absturzbefehl zu übergeben:
# cat /usr/local/test_early_kdump.sh #!/bin/bash /usr/bin/echo c > /proc/sysrq-trigger
4. Geben Sie dem Skript die Ausführungsberechtigung:
# chmod +x /usr/local/test_early_kdump.sh
5. Laden Sie den systemd-Daemon neu:
# systemctl daemon-reloadWICHTIG :Starten Sie den Dienst test_early_kdump.service (Testabsturz) nicht, sonst stürzt das System sofort ab.
6. Aktivieren Sie diesen test_early_kdump-Dienst auf Boot-Ebene:
# systemctl enable test_early_kdump.service
7. Starten Sie das System neu:
# rebootHinweis :Während das System gemäß dem benutzerdefinierten Testskript hochfährt, wird es einen Absturz auslösen und immer wieder neu starten.
8. Deaktivieren Sie die benutzerdefinierten Unit- und Skriptdateien und entfernen Sie sie nach dem Test. Booten Sie das System im Rettungsmodus mit „systemd.unit=rescue.target“. “ und deaktivieren Sie den Dienst „test_early_kdump“ beim Booten.
# systemctl disable test_early_kdump.service
Der obige Befehl deaktiviert die benutzerdefinierte Einheitendatei. Beim nächsten Mal bootet das System normal.
So booten Sie in CentOS/RHEL 7 und 8 über Systemd in den Rettungsmodus oder Notfallmodus9. Entfernen Sie die benutzerdefinierten Einheitendateien und die Absturzskriptdatei, wenn der TEST-Absturz abgeschlossen ist:
# 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. Prüfen Sie /var/crash/ Ordner gemäß der für den vmcore genannten kdump.conf (Pfad /var/crash):
# 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