# Kdump

kdump ist eine Funktion des Linux-Kernels, die Speicherauszüge im Fall eines Kernelabsturzes erzeugt. Sobald ausgelöst, exportiert kdump ein Speicherabbild (auch als vmcore bezeichnet), welches zur Bestimmung der Fehlerursache untersucht werden kann. Auf das ausgegebene Abbild des Hauptspeichers, das als ELF-Objekt exportiert wird, kann direkt über /proc/vmcore während der Bearbeitung des Kernelabsturzes zugegriffen werden. Es kann aber auch automatisch in ein lokal verfügbares Dateisystem, ein rohformatiertes Gerät oder ein entferntes System, das über das Netzwerk erreichbar ist, übertragen werden.

## Interna

Im Fall eines Kernelabsturzes bewahrt kdump die Systemkonsistenz durch das Booten eines anderen Linux-Kernels, der auch als dump-capture kernel bezeichnet wird, und verwendet diesen, um einen Speicherauszug zu exportieren und zu sichern. Dadurch startet das System in einer sauberen und verlässlichen Umgebung, anstatt sich auf einen bereits abgestürzten Kernel zu verlassen, der verschiedene weitere Probleme verursachen kann, wie beispielsweise Dateisystembeschädigung, während die Speicherauszugsdatei geschrieben wird. Um diesen Dual-Kernel-Zustand zu ermöglichen, verwendet kdump kexec zum Starten in den Dump-Capture-Kernel, sofort nachdem der ursprüngliche Kernel abgestürzt ist. Durch kexecs Fähigkeit „über“ den aktuell laufenden Kernel hinwegzustarten und dabei die Ausführung eines Bootloaders und der Hardwareinitialisierung, die von der System-Firmware (BIOS oder UEFI) durchgeführt wird, zu umgehen. Ein Dump-Capture-Kernel kann entweder ein separates Linuxkernelabbild sein, das speziell für diesen Zweck erstellt wurde, oder das primäre Kernelabbild kann, auf Architekturen die relokalisierbare Kernels unterstützen, erneut verwendet werden.$^{:5–6}$
Der Inhalt der Hauptspeichers (RAM) wird während des Startens und Ausführens des Dump-Capture-Kernels erhalten. Dies geschieht durch Reservieren eines kleinen Bereichs des RAMs im Voraus, in den der Dump-Capture-Kernel vorgeladen wird, so dass kein Bereich des RAMs, der vom primären Kernel verwendet wird, bei der Behebung des Kernelabsturzes überschrieben wird. Dieser reservierte RAM-Bereich wird allein vom Dump-Capture-Kernel verwendet und ist während des normalen Systembetriebs nicht in Benutzung. Einige Architekturen, einschließlich x86 und ppc64 erfordern einen kleinen festpositionierten Teil des RAMs, um einen Kernel starten zu können, unabhängig, von wo er geladen wird. In diesem Fall erzeugt kexec eine Kopie dieses RAM-Abschnitts, so dass dieser ebenfalls für den Dump-Capture-Kernel zugänglich ist. Größe und optionale Position des reservierten Hauptspeicherteils werden über die Kernel Bootparameter crashkernel festgelegt und das Befehlszeilenwerkzeug kexec wird benutzt, nachdem der primäre Kernel startet, um ein Dump-Capture-Kernelabbild und sein verknüpftes initrd-Abbild in den reservierten Bereich des RAMs vorzuladen.
Zusätzlich zur Funktionalität, die Teil des Linuxkernels ist, gibt es Werkzeuge im Userspace, die den kdump-Mechanismus unterstützen, einschließlich des zuvor genannten Werkzeugs kexec. Neben den offiziellen Werkzeugen, die als Patch zur kexec-Suite an Userspace-Werkzeugen geliefert werden, stellen einige Linux-Distributionen weitere Werkzeuge bereit, die die Konfiguration des kdump-Betriebs vereinfachen, einschließlich der Einrichtung des automatisierten Speicherns der Speicherauszug-Dateien. Erstellte Speicherauszug-Dateien können mittels GNU Debugger (gdb) oder Red Hats spezialisiertem Absturzwerkzeug untersucht werden.

## Geschichte

Die kdump-Funktionalität wurde, zusammen mit kexec, in den Linux-Kernel-Hauptzweig in die Kernelversion 2.6.13 aufgenommen, die am 29. August 2005 veröffentlicht wurde.