So verwenden Sie den dmesg-Befehl unter Linux

Eintauchen in die Tiefen des Linux-Kernels mit `dmesg`

Der Befehl dmesg eröffnet einen Einblick in die oft verborgenen Vorgänge beim Systemstart unter Linux. Er erlaubt es, Meldungen von Hardwaregeräten und Treibern zu prüfen und zu überwachen, die im Ringpuffer des Kernels gespeichert sind. Dieser „Freund der Fehlersuche“ hilft, Probleme aufzuspüren.

Wie der Ringpuffer von Linux funktioniert

In Linux und ähnlichen Betriebssystemen sind Boot- und Startvorgänge zwei unterschiedliche Abschnitte der Ereigniskette, die beim Einschalten des Computers ablaufen.

Der Bootvorgang (durchgeführt von BIOS oder UEFI, MBR und GRUB) initialisiert das System bis zu dem Punkt, an dem der Kernel in den Arbeitsspeicher geladen und mit der initialen RAM-Disk verbunden wird (initrd oder initramfs). Danach übernimmt systemd.

Die Startprozesse schließen die Betriebssysteminitialisierung ab. In dieser sehr frühen Phase sind Logging-Dienste wie syslogd oder rsyslogd noch nicht aktiv. Um zu verhindern, dass wichtige Fehler und Warnungen verloren gehen, speichert der Kernel diese in einem Ringpuffer.

Ein Ringpuffer ist ein Speicherbereich für Meldungen, der eine feste Größe hat. Wenn der Puffer voll ist, werden älteste Meldungen durch neue ersetzt. Man kann sich dies als eine Art „Schlange“ von Nachrichten vorstellen.

Der Kernel-Ringpuffer speichert Initialisierungsmeldungen von Gerätetreibern, Hardwaremeldungen und Meldungen von Kernelmodulen. Aufgrund dieser niedrigen Ebene ist er ein ausgezeichneter Ausgangspunkt für die Fehlersuche bei Hardwareproblemen oder Startfehlern.

Dabei hilft der Befehl dmesg.

Der `dmesg` Befehl im Detail

Mit dmesg können die im Ringpuffer gespeicherten Nachrichten eingesehen werden. In der Regel ist sudo erforderlich.

sudo dmesg

Alle Nachrichten werden im Terminalfenster angezeigt.

Um die Menge der Informationen besser zu verarbeiten, empfiehlt sich die Weiterleitung an less:

sudo dmesg | less

Nun ist es möglich, die Nachrichten zu durchsuchen und nach relevanten Einträgen zu suchen.

Mit der Suchfunktion von less (Taste „/“) können gezielt Begriffe gefunden und hervorgehoben werden.

`sudo` für `dmesg` entfernen

Um die Verwendung von sudo zu vermeiden, kann folgender Befehl genutzt werden. Es sollte jedoch beachtet werden, dass dadurch jeder Benutzer des Systems dmesg ohne sudo ausführen kann.

sudo sysctl -w kernel.dmesg_restrict=0

Farbausgabe erzwingen

Standardmäßig ist dmesg oft farbig formatiert. Falls dies nicht der Fall ist, kann es mit -L (für Farbe) erzwungen werden.

sudo dmesg -L

Um die farbige Ausgabe permanent zu aktivieren, kann folgender Befehl benutzt werden:

sudo dmesg --color=always

Verständliche Zeitstempel

Standardmäßig zeigt dmesg Zeitstempel in Sekunden und Nanosekunden seit Kernelstart an. Mit der Option -H (human) werden sie benutzerfreundlicher dargestellt.

sudo dmesg -H

Dies führt zu zwei Änderungen:

Die Ausgabe wird automatisch an less weitergeleitet. Die Zeitstempel zeigen Datum und Uhrzeit in Minutenauflösung, während Nachrichten innerhalb der Minute durch Sekunden und Nanosekunden gekennzeichnet werden.

Noch lesbarere Zeitstempel

Wer keine Nanosekunden-Genauigkeit braucht, kann mit -T (human-readable) noch lesbarere Zeitstempel erhalten. (Verwirrend ist, dass -H die „human“ und -T die „human-readable“ Option ist.)

sudo dmesg -T

Die Zeitstempel werden als Standarddatum und -zeit dargestellt, jedoch auf Minutengenauigkeit reduziert.

Alle Ereignisse innerhalb einer Minute haben denselben Zeitstempel. Diese Option leitet die Ausgabe nicht automatisch an less weiter.

Live-Ereignisse beobachten

Mit der Option --follow (auf Nachrichten warten) können Meldungen des Kernel-Ringpuffers live verfolgt werden. Auch wenn der Ringpuffer hauptsächlich während des Starts verwendet wird, können Meldungen auch während des laufenden Betriebs auftauchen.

Jegliche Änderung der Hardware führt zu Einträgen im Ringpuffer. So beispielsweise das Hinzufügen oder Aktualisieren von Kernelmodulen, das Anschließen von USB-Laufwerken oder Bluetooth-Geräten. Auch virtuelle Hardware wie beim Starten einer virtuellen Maschine verursacht neue Meldungen.

sudo dmesg --follow

Es wird nicht zur Eingabeaufforderung zurückgekehrt, sondern neue Meldungen werden am Ende des Fensters angezeigt.

Selbst das Einhängen einer CD-ROM führt zu Einträgen, da deren Inhalte in das Dateisystem eingebunden werden.

Mit Strg+C wird der Echtzeit-Feed beendet.

Die letzten zehn Nachrichten abrufen

Mit dem Befehl tail kann eine bestimmte Anzahl von Nachrichten abgerufen werden. Im folgenden Beispiel sind es die letzten zehn:

sudo dmesg | tail -10

Die letzten zehn Nachrichten werden im Terminal angezeigt.

Nach bestimmten Begriffen suchen

Die Ausgabe von dmesg kann durch grep geleitet werden, um nach bestimmten Mustern zu suchen. Die Option -i (Groß- und Kleinschreibung ignorieren) ermöglicht eine Suche ohne Beachtung der Groß- und Kleinschreibung:

sudo dmesg | grep -i usb

Die Ergebnisse werden hervorgehoben, unabhängig von Groß- und Kleinschreibung.

Meldungen mit Bezug auf die erste SCSI Festplatte (meistens sda für SATA– oder USB-Laufwerke) können isoliert werden:

sudo dmesg | grep -i sda

Alle Meldungen, die „sda“ enthalten, werden angezeigt.

Um nach mehreren Begriffen gleichzeitig zu suchen, kann die Option -E (erweiterte reguläre Ausdrücke) mit einer Liste der Suchbegriffe verwendet werden, getrennt durch |.

sudo dmesg | grep -E "memory|tty|dma"

Jede Meldung mit einem der Suchbegriffe wird im Terminal aufgelistet.

Protokollebenen verwenden

Jeder Meldung im Kernel-Ringpuffer ist eine Protokollebene zugeordnet, die ihre Bedeutung angibt. Folgende Level existieren:

emerg System ist unbrauchbar
alert Sofortige Maßnahmen erforderlich
crit Kritische Bedingungen
err Fehlerbedingungen
warn Warnbedingungen
notice Normaler, aber signifikanter Zustand
info Information
debug Debug-Meldungen

Mit dmesg -l (Level) können Meldungen einer bestimmten Ebene abgerufen werden. Beispielsweise zeigt folgender Befehl nur Meldungen der Ebene „info“ an:

sudo dmesg -l info

Die Ausgabe zeigt ausschließlich Informationsmeldungen.

Mehrere Protokollebenen lassen sich kombinieren:

sudo dmesg -l debug,notice

Die Ausgabe ist eine Mischung von Meldungen beider Protokollebenen.

Die Anlagenkategorien

dmesg-Meldungen sind in Kategorien, sogenannten „Einrichtungen“, eingeteilt. Die Liste dieser Einrichtungen lautet:

kern Kernel-Nachrichten
user Benutzerebene-Nachrichten
mail E-Mail-System
daemon System-Dienste
auth Sicherheits-/Autorisierungsmeldungen
syslog Interne syslogd-Meldungen
lpr Zeilendrucker-Subsystem
news Netzwerk-Nachrichten-Subsystem

Mit dmesg -f (Einrichtung) können Meldungen einer bestimmten Einrichtung gefiltert werden:

sudo dmesg -f daemon

Hier werden nur Nachrichten bezüglich der „Dämon“-Einrichtung aufgelistet.

Auch hier können mehrere Einrichtungen kombiniert werden:

sudo dmesg -f syslog, daemon

Die Ausgabe enthält nun Meldungen aus Syslog und Daemon.

Kombination von Einrichtung und Ebene

Die Option -x (decode) sorgt dafür, dass dmesg die Einrichtung und Ebene als Präfix für jede Zeile ausgibt:

sudo dmesg -x

Am Anfang jeder Zeile werden Einrichtung und Ebene angezeigt.

Im ersten hervorgehobenen Abschnitt steht z.B. eine „Kernel“-Meldung der „Notice“-Ebene, im zweiten Abschnitt eine „Kernel“-Meldung der „Info“-Ebene.

Wozu das Ganze?

Kurz gesagt: Fehlersuche.

Wenn Hardware nicht erkannt wird oder sich nicht ordnungsgemäß verhält, liefert dmesg wertvolle Hinweise.

dmesg kann verwendet werden, um Meldungen von den höchsten bis zu den niedrigsten Ebenen nach Fehlern oder Warnungen zu durchsuchen, die mit der Hardware zusammenhängen könnten. Mit der Suche nach bestimmten Einrichtungen können relevante Meldungen isoliert werden. Mit grep kann gezielt nach Herstellern, Modellnummern oder allgemeine Begriffe wie „gpu“ oder „memory“ gesucht werden. Auch Begriffe wie „failed“, „error“ oder „unable“ können Hinweise geben. Mit der Option --follow können Echtzeitmeldungen beobachtet werden.

Viel Erfolg bei der Fehlersuche!