kdump

aus Wikipedia, der freien Enzyklopädie
Zur Navigation springen Zur Suche springen

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.[1][2]

Interna[Bearbeiten | Quelltext bearbeiten]

In einem Dual-Kernel-Layout, benutzt kdump kexec, um einen anderen Kernel zu starten und einen Speicherauszug zu erhalten.

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.[3][4][5]: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.[6][7][8] Erstellte Speicherauszug-Dateien können mittels GNU Debugger (gdb) oder Red Hats spezialisiertem Absturzwerkzeug untersucht werden.[9][10]

Geschichte[Bearbeiten | Quelltext bearbeiten]

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.[11]

Siehe auch[Bearbeiten | Quelltext bearbeiten]

  • debugfs – ein RAM-basiertes Linux-Kernel-Dateisystem, speziell zur Fehlersuche entworfen
  • kdump (BSD) – ein BSD-Werkzeug zum Betrachten von durch ktrace erzeugten Trace-Dateien
  • Linux kernel oops – eine potentiell nicht-fatale Abweichung vom korrekten Verhalten des Linux-Kernels

Einzelnachweise[Bearbeiten | Quelltext bearbeiten]

  1. Jonathan Corbet: Crash dumps with kexec. LWN.net, 27. Oktober 2004, abgerufen am 9. August 2014 (englisch).
  2. 13.2 About Kdump (Chapter 13: Support Diagnostic Tools). Oracle Corporation, abgerufen am 9. August 2014.
  3. Vivek Goyal, Eric W. Biederman: Kdump: A Kexec-based Kernel Crash Dumping Mechanism. (PDF) 14. Juni 2006, abgerufen am 9. August 2014.
  4. Linux kernel documentation: Documentation/kdump/kdump.txt. kernel.org, 12. August 2013, abgerufen am 9. August 2014.
  5. Takashi Iwai: Debugging using Kdump. (PDF) SUSE, 26. Juli 2006, abgerufen am 9. August 2014.
  6. 29.2.2. Using the Kernel Dump Configuration Utility (Red Hat Enterprise Linux 6 Deployment Guide). Red Hat, abgerufen am 9. August 2014.
  7. kexec and kdump: Basic kdump Configuration (System Analysis and Tuning Guide). SUSE, 25. April 2014, abgerufen am 9. August 2014.
  8. How to use kdump to debug kernel crashes. Fedora, 9. April 2014, abgerufen am 9. August 2014.
  9. David Anderson: White Paper: Red Hat Crash Utility. Red Hat, 27. August 2010, archiviert vom Original am 10. Dezember 2018; abgerufen am 9. August 2014.  Info: Der Archivlink wurde automatisch eingesetzt und noch nicht geprüft. Bitte prüfe Original- und Archivlink gemäß Anleitung und entferne dann diesen Hinweis.@1@2Vorlage:Webachiv/IABot/people.redhat.com
  10. kexec and kdump: Analyzing the Crash Dump (System Analysis and Tuning Guide). SUSE, 25. April 2014, abgerufen am 9. August 2014.
  11. Linux kernel 2.6.13. 29. August 2005, abgerufen am 9. August 2014.

Weblinks[Bearbeiten | Quelltext bearbeiten]