Kdump in einer Netboot Umgebung

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:

  1. 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.
  2. 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.
  3. 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:

  1. Die Kernel-Version muss der aktuell verwendeten entsprechen.
  2. 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.