Bootmeldungen anzeigen/analysieren
 

Auch wenn es für Otto-Normaluser hübsch aussieht ein nettes Bild oder eine nette Animation beim Starten des Linux-Systems anzeigen zu lassen, ist es für Linux-Administratoren wie mich weitaus wichtiger die Boot-Meldungen beim Start zu sehen, denn dank farblicher Kennzeichnung durch ein grünes "Ok" oder ein rotes "Failed" sieht man sofort wenn etwas nicht stimmt mit dem System. Da die Boot-Meldungen allerdings bei heutigen superschnellen SSDs ziemlich schnell über den Bildschirm huschen und dann auch schnell wieder weg sind, wenn die grafische Oberfläche startet, zeige ich heute einen Weg wie man sie sich anzeigen lassen kann oder nach Fehlern suchen kann, die während des Boot-Vorgangs aufgetaucht sind. Doch zuvor erstmal zu den Grundlagen, wer eigentlich die Boot-Meldungen anzeigt.

1. Hintergrund: /var/log/boot.log (von bootlogd zu plymouth)

Früher (zu Zeiten von SysVinit) war der Dienst bootlogd dafür zuständig, die Meldungen beim Systemstart in eine Log-Datei zu schreiben. Dieser Dienst ist jedoch veraltet und wird auf modernen Systemen nicht mehr genutzt.

Heutzutage übernimmt diese Aufgabe in der Regel Plymouth (der Boot-Splash- Daemon). Bei der Installation einer grafischen Oberfläche wie KDE Plasma wird Plymouth über Paketabhängigkeiten (u. a. über Task- und Desktop-Metapakete) automatisch mitinstalliert.

Wie entstehen eigentlich Boot-Meldungen? Mit Debian 8 (Jessie), als Debian offiziell von SysVinit auf systemd als Standard-Init-System umgestellt wurde, hat systemd die Ausgabe der Boot-Meldungen übernommen, wobei der Kernel dort auch eine Rolle spielt da er ohne die Angabe quiet als Kernelparameter in Grub2 hunderte Zeilen Hardware-, Treiber-, ACPI-, Speicher- und PCI-Initialisierungsmeldungen auf den Bildschirm ausgibt. Daher ist bei Grub2 standardmäßig quiet als Kernelparameter aktiv um diese Flut von Informationen (viele davon nicht benötigt) zu unterbinden. Wenn systemd aber keine eigenen Anweisungen für die Ausgabe bekommt, stellt es bei quiet auf show_status=auto und gibt im fehlerfreien Normalfall auch nichts aus. Folglich bleibt der Bildschirm beim booten einfach schwarz. Daher ist die Beste Kernelparameter-Kombi um die wirklich wichtigen, relevanten Informationen zu bekommen diese hier: quiet systemd.show_status=1. Damit werden überflüssige Kernel-Meldungen unterdrückt, aber wichtige, relevante Informationen durch systemd ausgegeben. Und hier kommt jetzt Plymouth ins Spiel, da es sich an die Konsole hängt und alle Textausgaben von systemd und dem Kernel im Hintergrund abfängt und sie nach /var/log/boot.log schreibt.

Anzeigen lassen kann man die Boot-Meldungen in der Konsole mit less:
# less -R /var/log/boot.log
Die Option -R ist hier wichtig, da die Log-Datei ANSI-Farbcodes enthält (damit das Ok auch grün aussieht) und mit der Option -R werden diese korrekt dargestellt.


2. Moderne Analyse mit systemd

Obwohl /var/log/boot.log praktisch ist, bietet das Init-System systemd deutlich mächtigere und präzisere Werkzeuge, um den Boot-Vorgang zu analysieren und gezielt nach Fehlern zu suchen. Daher hier eine Auflistung der wichtigsten Befehle:

A) Die wichtigsten Befehle zur Fehlersuche

  • Nur Fehler (Errors) des aktuellen Boot-Vorgangs anzeigen:
    # journalctl -b -p err
  • Fehler des VORHERIGEN Boot-Vorgangs analysieren (z. B. nach Absturz):
    # journalctl -b -1 -p err
  • Fehlgeschlagene Dienste sofort auflisten:
    # systemctl --failed
  • Fehler und Warnungen (Warning bis Emergency) anzeigen:
    # journalctl -b -p warning..emerg
  • Kernel-Fehler und Hardware-Probleme filtern:
    # dmesg -T --level=err,warn

B) Allgemeine Anzeige des Boot-Vorgangs (journalctl)

  • Gesamtes Log des aktuellen Boot-Vorgangs:
    # journalctl -b
  • Log des vorherigen Starts komplett durchblättern:
    # journalctl -b -1
  • Übersicht aller gespeicherten Boot-Vorgänge anzeigen:
    # journalctl --list-boots
  • Boot-Logs eines ganz bestimmten Dienstes anzeigen:
    # journalctl -b -u sddm.service
    # journalctl -b -u NetworkManager.service
  • Kernelmeldungen des aktuellen Starts:
    # journalctl -k -b
  • Kernelmeldungen des vorherigen Starts:
    # journalctl -k -b -1
  • Journal während des Betriebs verfolgen:
    # journalctl -b -f
  • Ausführliche Informationen zu einem Dienst anzeigen:
    # systemctl status NetworkManager.service
  • Die letzten Meldungen eines Dienstes anzeigen:
    # journalctl -u NAME.service -b

C) Performance-Analyse (Warum dauert der Start so lange?)

  • Dauer der einzelnen Phasen (Firmware, Kernel, Userspace):
    # systemd-analyze
  • Zeigt Dienste absteigend sortiert nach ihrer Startzeit (Top-Bremser):
    # systemd-analyze blame
  • Kritische Kette anzeigen (welcher Dienst hat auf welchen gewartet):
    # systemd-analyze critical-chain

Kurz-Übersicht: Schnelldiagnose bei Problemen
1. Gab es Dienste, die abgestürzt sind?-> systemctl --failed
2. Welche Fehlermeldungen gab es?-> journalctl -b -p err
3. Gab es Kernel-/Treiberprobleme?-> dmesg -T --level=err
4. Warum bootet das System langsam?-> systemd-analyze blame

journalctl löschen

Falls man die letzten Fehlermeldungen aus dem journal löschen möchte, folgenden Befehl verwenden:
# journalctl --rotate; journalctl --vacuum-time=200
Die Angabe 200 ist in Sekunden, also alles was älter als 200 Sekunden ist, wird entfernt.


Legende

  • bootlogd
    • ältere SysV-Methode, heute meist veraltet
  • Plymouth
    • Bootanimation und Bootprotokollierung
    • mögliche Datei: /var/log/boot.log
  • systemd-journald
    • moderne und umfassende Protokollierung
    • wichtigste Befehle: journalctl und systemctl