Für das Debugging von Kernel-Crashes wird das Tool Kdump verwendet.
Grundsätzlich ist das Vorgehen gut dokumentiert, aber in einer
Netboot-Umgebung gilt es dazu einige kleine Hindernisse zu umgehen:
- Beim Starten des Services (systemctl start kdump) wird
getestet, ob die initrd*kdump.img in /boot noch aktuell ist, d.h. nicht
älter als /etc/kdump.conf. Wenn nicht, versucht der Service eine neue initrd
zuerstellen und in /boot ablegen, was nicht möglich ist, da das
NFS-Laufwerk nur lesend eingebunden ist. In der Folge bricht der Service
ab und startet nicht.
- Bei der Erstellung der initrd werden die Boot-Parameter des
aktuellen Kernels übernommen. Bei Netboot ist das Root-Dateisystem ein
NFS-Laufwerk. Standardmässig wird aber keine Unterstützung für NFS in
die initrd eingebunden, so dass der Bootvorgang misslingt.
- Abweichend von der kdump-Dokumentation muss genügend RAM
reserviert werden, 512M ist ein Wert, mit dem auch ein Debug-Kernel
arbeiten kann.
Vor der Erstellung der initrd müssen die Einstellungen in der kdump.conf innerhalb des Netboot-Trees
vorgenommen werden, da die darin vorgenommenen Konfigurationen in
die initrd eingebaut werden. Spätere Änderungen werden nicht
ausgewertet. Die Möglichkeiten der Speicherung des Dump-Files sind in
der Kdump-Dokumentation gut beschrieben und auch in kdump.conf mit
Beispielen vorhanden. Vorsicht bei der Verwendung von gemounteten
Laufwerken: nach dem Crash wird neu gebootet, von Hand vorgängig
gemountete Laufwerke sind dann nicht mehr vorhanden. Hier überlässt man
das Mounten am besten kdump, mit einer Option wie ext4 /dev/sda1.
Nun muss die initrd in der Netboot-Umgebung, d.h. in einer mit dem
aktuellen Kernel gebooteten Maschine, manuell an einem beschreibbaren
Ort und mit einer zusätzlichen Option für dracut erstellt werden:
mkdumprd -a nfs /tmp/initramfs-3.8.11-200.fc18.x86_64kdump.img
Wichtig:
- Die Kernel-Version muss der aktuell verwendeten entsprechen.
- Eine in kdump.conf als Dump-Ziel eingetragene Disk muss zum Zeitpunkt der Erstellung der initrd gemountet sein.
Die generierte initrd wird anschliessend in das NFS-Verzeichnis in den Ordner, der den Clients als /boot bereit gestellt wird kopiert.
In der Boot-Umgebung muss noch aktiviert werden, dass der Kdump-Service
beim Booten automatisch startet, ansonsten muss dies manuell mit systemctl start kdump erfolgen. Mit systemctl status kdump kann überprüft werden, ob der Service läuft. Probleme wie eine nicht aktuelle initrd werden hiermit angezeigt.