Kernel-Panics und Crash Dumps analysieren mit kdump
AI generated
$
/etc
Linux · Kernel · Debugging · Systemadministration
Kernel-Panics und Crash Dumps analysieren
mit kdump, kexec und dem crash-Utility

Wenn ein Server nach einem Kernel-Panic einfach neu startet, bleibt die eigentliche Ursache im Dunkeln, bis derselbe Absturz erneut passiert. kdump erzeugt beim Kernel-Panic automatisch einen vollständigen Speicherabzug, und das crash-Utility macht diesen vmcore lesbar, mit Backtrace, Prozesszustand und der Stelle im Kernel-Code, an der es geknallt hat.

19 Min. Lesezeit kdump · kexec · vmcore · crash · Backtrace Debian/Ubuntu · RHEL-Familie

1. Was ein Kernel-Panic ist und warum Crash Dumps zählen

Ein Kernel-Panic ist der Moment, in dem der Linux-Kernel einen Zustand erreicht, aus dem er sich nicht mehr sicher erholen kann, etwa eine ungültige Speicherreferenz im Kernel-Space oder eine verletzte interne Invariante. Anders als ein abstürzender Userspace-Prozess kann der Kernel diesen Fehler nicht einfach mit einem Prozess-Kill behandeln, weil er selbst die Instanz ist, die für Speicherverwaltung und Scheduling zuständig ist. Die Konsequenz ist ein sofortiger, kontrollierter Stillstand oder Neustart des gesamten Systems, oft ohne jede Vorwarnung für laufende Dienste.

Ohne einen Crash Dump bleibt nach einem Kernel-Panic nur eine Zeile im seriellen Log oder ein Blackscreen, aus dem sich keine Ursache ableiten lässt. Genau hier setzt kdump an: Es fängt den Absturz ab, sichert den kompletten Arbeitsspeicherinhalt in eine Datei namens vmcore und ermöglicht damit eine forensische Analyse im Nachhinein. Für Produktivserver mit Datenbanken, PHP-FPM-Pools oder virtualisierten Workloads ist ein eingerichteter Crash-Dump-Mechanismus der Unterschied zwischen Rätselraten und einer belastbaren Root-Cause-Analyse.

2. kdump verstehen: kexec, Reserve-Speicher und Crash-Kernel

kdump basiert auf zwei Bausteinen, die zusammen einen sauberen Absturz-Workflow ermöglichen. Der erste Baustein ist kexec, ein Kernel-Feature, das einen neuen Kernel direkt aus einem laufenden Kernel heraus startet, ohne den vollständigen Firmware- und Bootloader-Weg über BIOS oder UEFI zu durchlaufen. Der zweite Baustein ist ein reservierter Speicherbereich, der beim Systemstart per Kernel-Parameter abgetrennt wird und für den regulären Betrieb unsichtbar bleibt.

Tritt ein Kernel-Panic ein, bootet kexec sofort einen minimalen Crash-Kernel in diesen reservierten Speicherbereich. Dieser Crash-Kernel hat Zugriff auf den kompletten Speicherinhalt des abgestürzten Systems und schreibt ihn als vmcore-Datei auf die Platte oder ins Netzwerk, bevor der Server regulär neu bootet. Der entscheidende Vorteil gegenüber einem klassischen Reboot über die Firmware: Der Speicherzustand zum exakten Zeitpunkt des Kernel-Panics bleibt vollständig erhalten, inklusive aller Prozess-Stacks, Locks und Kernel-Datenstrukturen.

3. kdump installieren und konfigurieren

Die Einrichtung von kdump erfordert zwei zusammenhängende Schritte: reservierten Speicher per Kernel-Parameter festlegen und den kdump-Dienst konfigurieren. Der Kernel-Parameter crashkernel bestimmt, wie viel RAM für den Crash-Kernel abgezweigt wird, üblicherweise zwischen 128 und 512 Megabyte je nach Serverspeicher und geladenen Modulen. Ohne ausreichend reservierten Speicher kann der Crash-Kernel selbst nicht sauber starten, wodurch der gesamte Mechanismus wirkungslos bleibt.


# Debian/Ubuntu: install kdump tools
sudo apt install linux-crashdump kdump-tools

# RHEL/Rocky family: install kdump
sudo dnf install kexec-tools

# Reserve memory for the crash kernel via GRUB kernel parameter
sudo sed -i 's/GRUB_CMDLINE_LINUX="/GRUB_CMDLINE_LINUX="crashkernel=256M /' \
  /etc/default/grub
sudo update-grub
sudo systemctl reboot

# Verify the crash kernel memory was actually reserved
cat /proc/cmdline | grep crashkernel
grep -i crashk /var/log/dmesg

# Configure the vmcore storage location (Debian/Ubuntu)
sudo sed -i 's|^KDUMP_KERNEL_PARAMS.*|KDUMP_KERNEL_PARAMS=""|' \
  /etc/default/kdump-tools
echo 'path /var/crash' | sudo tee -a /etc/kdump-tools.conf

# Enable and start the kdump service
sudo systemctl enable --now kdump-tools    # Debian/Ubuntu
sudo systemctl enable --now kdump          # RHEL family
sudo kdumpctl status                       # RHEL family status check

Nach der Installation zeigt cat /sys/kernel/kexec_crash_loaded mit dem Wert 1 an, dass ein Crash-Kernel erfolgreich geladen wurde und im Ernstfall bereitsteht. Wird dieser Wert nie auf 1 gesetzt, funktioniert kdump im Notfall nicht, egal wie sorgfältig die restliche Konfiguration aussieht. Dieser Check gehört deshalb in jede Server-Grundausstattung, in der ein Kernel-Panic mit belastbarer Diagnose beantwortet werden soll.

4. Einen Kernel-Panic gezielt auslösen und testen

Eine kdump-Konfiguration, die nie getestet wurde, ist keine funktionierende Absicherung, sondern eine Annahme. Der Linux-Kernel bietet mit SysRq einen eingebauten Mechanismus, um kontrolliert einen Kernel-Panic auszulösen, ohne echte Hardware- oder Softwarefehler abwarten zu müssen. Dieser Test sollte ausschließlich auf einem Staging-System oder außerhalb der Geschäftszeiten erfolgen, da er den Server tatsächlich zum Absturz bringt.


# Enable the SysRq trigger mechanism (root required)
echo 1 | sudo tee /proc/sys/kernel/sysrq

# Deliberately crash the kernel on a test system to validate kdump
echo c | sudo tee /proc/sysrq-trigger

# After reboot, confirm the crash kernel captured a vmcore
ls -lh /var/crash/*/vmcore

# If no vmcore appears, check the kdump service logs for the failure
journalctl -u kdump-tools --no-pager | tail -50   # Debian/Ubuntu
journalctl -u kdump --no-pager | tail -50         # RHEL family

Ein erfolgreicher Test bestätigt zwei Dinge gleichzeitig: dass der reservierte Speicher ausreicht und dass der Crash-Kernel unter realen Bedingungen bootet. Fehlt danach die vmcore-Datei, liegt das Problem meist an zu wenig reserviertem crashkernel-Speicher oder an fehlenden Storage-Treibern im Crash-Kernel, ein häufiges Problem bei ungewöhnlichen RAID- oder NVMe-Konfigurationen.

5. Die vmcore-Datei mit crash analysieren

Die vmcore-Datei allein ist ein reiner Binär-Dump und für sich genommen nicht lesbar. Das crash-Utility kombiniert diesen Dump mit den Debug-Symbolen des exakt passenden Kernels und stellt daraus eine interaktive Analyseumgebung her, die stark an gdb erinnert. Damit lassen sich Kernel-Datenstrukturen, Prozesslisten und Speicherbereiche zum Zeitpunkt des Kernel-Panics direkt inspizieren, statt auf reine Logzeilen angewiesen zu sein.


# Install the crash utility and matching debug symbols
sudo apt install crash linux-image-$(uname -r)-dbgsym   # Debian/Ubuntu
sudo dnf install crash kernel-debuginfo                 # RHEL family

# Open the vmcore with the matching vmlinux debug image
sudo crash /usr/lib/debug/boot/vmlinux-$(uname -r) \
           /var/crash/202607301400/vmcore

# Inside the crash shell, common first commands:
crash> sys                 # basic system information at crash time
crash> log                 # kernel ring buffer as captured in the dump
crash> bt                  # backtrace of the crashing CPU/task
crash> ps | head -20       # process list at the moment of the panic

Der Befehl log innerhalb der crash-Sitzung liefert oft den entscheidenden Hinweis, weil er den Kernel-Ringpuffer exakt so zeigt, wie er zum Absturzzeitpunkt aussah, inklusive der letzten Meldung vor dem Kernel-Panic. In Kombination mit bt für den Backtrace lässt sich meist schon nach wenigen Minuten eingrenzen, ob ein Treiber, ein Dateisystem oder ein Hardwarefehler die Ursache war.

6. Backtrace und Prozesszustand zum Absturzzeitpunkt

Der Backtrace zeigt die Aufrufkette der Kernel-Funktionen, die unmittelbar vor dem Kernel-Panic aktiv waren, von der auslösenden Funktion bis zurück zum Systemaufruf, der sie ursprünglich angestoßen hat. Taucht in dieser Kette ein Treibername auf, etwa ein Netzwerk- oder Storage-Modul, ist das ein starker Hinweis auf eine fehlerhafte Drittanbieter-Komponente statt eines generischen Kernel-Bugs.

Zusätzlich zum Backtrace liefert crash Befehle wie foreach bt, um Backtraces aller laufenden Prozesse gleichzeitig zu erzeugen, und files, um offene Dateideskriptoren eines bestimmten Prozesses zum Absturzzeitpunkt zu sehen. Bei einem Kernel-Panic, der im Zusammenhang mit hoher Systemlast auftrat, zeigt diese Kombination häufig, welcher Prozess gerade wie viel Speicher oder wie viele Dateideskriptoren belegt hat, bevor der Kernel aufgab.

7. Automatisierte Auswertung und Alarmierung

In produktiven Umgebungen soll ein Kernel-Panic nicht erst auffallen, wenn ein Kunde sich meldet. Ein einfaches Skript, das beim Systemstart prüft, ob eine neue vmcore-Datei existiert, kann automatisch eine Benachrichtigung auslösen und die wichtigsten Metadaten des Crashs extrahieren, noch bevor jemand manuell in die crash-Shell einsteigt.


#!/usr/bin/env bash
# check-new-crash.sh — run via a systemd unit at boot
set -euo pipefail

CRASH_DIR="/var/crash"
STATE_FILE="/var/lib/kdump-alert/last-seen"
mkdir -p "$(dirname "$STATE_FILE")"

latest=$(find "$CRASH_DIR" -maxdepth 1 -type d -name '2*' | sort | tail -1)
[[ -z "$latest" ]] && exit 0

last_seen=$(cat "$STATE_FILE" 2>/dev/null || echo "")
if [[ "$latest" != "$last_seen" ]]; then
  summary=$(crash -s "$latest/vmcore" 2>/dev/null <<< "sys; bt" || true)
  echo "New kernel panic detected: $latest" | \
    mail -s "[ALERT] Kernel panic on $(hostname)" ops@example.com
  echo "$summary" >> "$latest/summary.txt"
  echo "$latest" > "$STATE_FILE"
fi

Diese Art der Automatisierung stellt sicher, dass jeder Kernel-Panic dokumentiert und gemeldet wird, unabhängig davon, ob ein Administrator gerade wach ist oder nicht. In Kombination mit einem Monitoring-System lässt sich die Prüfung auch als eigener Check einbinden, der bei jedem neuen Crash-Verzeichnis einen Alarm mit erhöhter Priorität auslöst.

8. Typische Ursachen für Kernel-Panics in Produktion

In der Praxis lassen sich die meisten Kernel-Panics auf wenige wiederkehrende Ursachen zurückführen. Fehlerhafte oder inkompatible Kernel-Module, oft nach einem Kernel-Versionsupgrade ohne vorherige Kompatibilitätsprüfung, stehen an erster Stelle. Auch Hardwaredefekte im Arbeitsspeicher zeigen sich häufig zuerst als sporadischer Kernel-Panic, bevor sie durch andere Symptome auffallen.


# Search past crash summaries for the responsible module or function
grep -A5 '^PID:' /var/crash/*/summary.txt

# Cross-check crash timestamps against recent module or driver changes
for d in /var/crash/*/; do
  echo "=== $d ==="
  crash -s "$d/vmcore" <<< "sys" 2>/dev/null | grep -E 'PANIC|DATE'
done

# Rule out memory errors as a root cause on suspicious hardware
sudo apt install memtester
sudo memtester 1024 1     # test 1 GB of RAM for one pass, offline test preferred

Ein weiterer häufiger Auslöser sind Out-of-Memory-Situationen in Kombination mit fehlerhaftem Swap- oder Cgroup-Setup, bei denen der Kernel selbst in einen inkonsistenten Zustand gerät, statt dass nur der OOM-Killer einen einzelnen Prozess beendet. Auch Firmware-Bugs auf Storage-Controllern und veraltete Netzwerktreiber tauchen in Backtraces von Kernel-Panics überdurchschnittlich oft auf, besonders auf älteren Serverplattformen ohne aktuelle Firmware-Updates.

9. kdump im Vergleich zu anderen Diagnosemethoden

kdump ist nicht die einzige Methode, um Systemabstürze zu untersuchen, aber die einzige, die den vollständigen Speicherzustand zum Zeitpunkt des Kernel-Panics sichert. Andere Werkzeuge liefern ergänzende, aber weniger vollständige Informationen.

Methode Datentiefe Zeitpunkt der Erfassung Geeignet für
kdump / vmcore Vollständiger RAM-Zustand Exakt zum Panic-Zeitpunkt Root-Cause-Analyse von Kernel-Panics
dmesg / Kernel-Log Nur Textmeldungen Bis kurz vor Absturz Erste Einordnung, schnelle Triage
Serielle Konsole / IPMI SOL Bildschirmausgabe Live, falls beobachtet Sofortige Sichtprüfung, kein Nacherfassen
ftrace / perf Detaillierte Ereignisspur Muss vorher aktiv sein Performance-Analyse, nicht primär Crashes
Hardware-Logs (SEL, SMART) Nur Hardware-Ereignisse Unabhängig vom Kernel Ausschluss von Hardwaredefekten

In der Praxis ergänzen sich diese Methoden. Ein Kernel-Panic wird zuerst über dmesg oder die serielle Konsole bemerkt, dann liefert kdump die vollständige forensische Grundlage, und Hardware-Logs schließen am Ende aus oder bestätigen einen physischen Defekt als Ursache. Wer nur eine dieser Quellen nutzt, riskiert eine unvollständige oder falsche Diagnose.

Mironsoft

Systemdiagnose, Kernel-Debugging und Server-Stabilität

Server stürzen ab und keiner weiß warum?

Wir richten kdump auf euren Servern ein, analysieren vorhandene vmcore-Dateien mit dem crash-Utility und liefern eine belastbare Root-Cause-Analyse statt Vermutungen beim nächsten Kernel-Panic.

kdump-Setup

Reservierten Speicher, Crash-Kernel und Storage-Pfad korrekt konfigurieren

vmcore-Analyse

Backtrace, Prozesszustand und Ursache mit dem crash-Utility bestimmen

Alarmierung

Automatisierte Benachrichtigung bei jedem neuen Kernel-Panic

10. Zusammenfassung

Ein Kernel-Panic ohne Crash Dump bleibt ein ungelöstes Rätsel, das jederzeit erneut auftreten kann. kdump löst dieses Problem, indem es beim Absturz sofort über kexec einen minimalen Crash-Kernel startet, den vollständigen Speicherinhalt als vmcore sichert und damit eine echte forensische Analyse ermöglicht. Das crash-Utility macht diesen Dump lesbar und liefert Backtrace, Prozessliste und Kernel-Log genau zum Zeitpunkt des Absturzes.

Wichtig ist, kdump nicht erst nach dem ersten Kernel-Panic einzurichten, sondern präventiv auf jedem Produktivserver, inklusive eines echten Tests über SysRq auf einem Staging-System. Automatisierte Alarmierung bei neuen vmcore-Dateien und ein systematischer Blick auf wiederkehrende Ursachen wie fehlerhafte Treiber oder Hardwaredefekte verwandeln einen einmaligen Vorfall in einen wiederholbaren, gut dokumentierten Diagnoseprozess.

Kernel-Panics und Crash Dumps — Das Wichtigste auf einen Blick

kdump-Mechanismus

kexec startet beim Kernel-Panic sofort einen Crash-Kernel in reserviertem Speicher und sichert den Zustand als vmcore.

crash-Utility

Kombiniert vmcore mit Debug-Symbolen, liefert bt, log und ps für die gdb-ähnliche Analyse.

Testpflicht

SysRq-Trigger echo c auf Staging-Systemen validiert, dass kdump im Ernstfall wirklich funktioniert.

Häufige Ursachen

Fehlerhafte Kernel-Module, Speicherdefekte und Firmware-Bugs stehen an erster Stelle bei realen Kernel-Panics.

11. FAQ: Kernel-Panics und Crash Dumps

1Was ist ein Kernel-Panic?
Eine nicht behebbare interne Inkonsistenz des Kernels, die zu einem kontrollierten Stopp oder Neustart des Systems führt.
2Was macht kdump?
Startet via kexec sofort einen Crash-Kernel in reserviertem Speicher und sichert den vollständigen RAM als vmcore.
3Wie viel Speicher für crashkernel?
Meist 128 bis 512 Megabyte, abhängig von Serverspeicher und geladenen Modulen.
4Wie kdump testen?
SysRq-Trigger echo c auf einem Staging-System auslösen, danach vmcore in /var/crash prüfen.
5Was braucht crash zum Öffnen der vmcore?
Ein exakt passendes vmlinux-Debug-Image derselben Kernel-Version für Symbole und Datenstrukturen.
6Was zeigt bt?
Den Backtrace der Kernel-Aufrufe vor dem Absturz, hilfreich um den auslösenden Treiber zu finden.
7Kann Hardware Kernel-Panics auslösen?
Ja, Speicherdefekte und Firmware-Bugs sind häufige Ursachen, oft zuerst als sporadischer Absturz erkennbar.
8Wie neue Crash Dumps automatisch melden?
Ein Skript beim Boot prüft das Crash-Verzeichnis und löst bei neuen Einträgen eine Benachrichtigung aus.
9kdump vs. dmesg für Diagnose?
dmesg zeigt nur Textmeldungen, kdump sichert den vollständigen Speicherzustand inklusive Prozesslisten.
10Lohnt sich kdump auf kleinen Servern?
Ja, der Speicher-Overhead ist gering, der Diagnosewert im Ernstfall dagegen erheblich.