So ermitteln Sie genau, warum Systemd in den Notfallmodus wechselt

10

Mein Desktop-Computer mit Debian Jessie wurde bei jedem Start in eine Notfallmodus-Shell verschoben. Auf dem Bildschirm wird angezeigt, dass verwendet werden soll journalctl -xb, um den Grund zu ermitteln und systemctl defaultdas Booten fortzusetzen. Wenn ich ausführe systemctl default, bootet das System weiter und nach ein paar Wochen mit dem System ist anscheinend nichts mehr falsch.

Wenn man durchschaut journalctl -xb, ist nichts der Grund, warum man in eine Nothülle fällt. Gibt es eine einfache Möglichkeit, genau den Grund für die Entscheidung zu ermitteln, in den Notfallmodus zu wechseln? Gibt es andere Flags oder Startoptionen, die deutlich machen, wo das Problem liegt?

Jordanm
quelle
2
Es sollte im Journal sichtbar sein, aber mit den begrenzten Informationen, die Sie bereitstellen, gibt es keine Möglichkeit, Sie anzuleiten. Haben Sie eine Kopie davon, journalctl -xb wann es passiert ist?
Julie Pelletier
3
Booten Sie im ausführlichen Protokollierungsmodus systemd.log_level=debug systemd.log_target=kmsg log_buf_len=1Mfür Details auf forensischer Ebene ...
Jasonwryan
2
Bestehende Protokolle sollten Ihnen bereits den Grund geben. Es gibt so viele Gründe, dass es sehr schwer zu erraten ist.
Giacomo Catenazzi
1
Ich habe das gleiche Problem auf einer Instanz von Ubuntu 16.04. In den letzten 20 Jahren wurden viele Linux-Systeme installiert, verwendet und repariert. Nichts Besonderes auf dem Bildschirm und diesmal fällt nichts in den Protokollen auf. Der Bildschirm sagt Strg-D, um das Booten fortzusetzen, aber das führt erst nach einem Moment zur gleichen Eingabeaufforderung zurück. Ohne eine Ahnung. Frustrierend, nicht wahr?
Stéphane Gourichon
Haben Sie alle Schritte aus dem Abschnitt "Diagnose von Startproblemen" in Debugging systemd ausprobiert ?
Siosm

Antworten:

6

Der Fehler sollte [ FAIL ]auf der Konsole (anstelle von [ OK ]) rot angezeigt werden , daneben die Beschreibung des Geräts. In der Regel sind die ersten Fehler am wichtigsten. Verwenden Sie Shift + Pageup auf der Konsole, um nach oben zu scrollen und die letzten Bildschirmausgabe der Ausgabe anzuzeigen. Dies funktioniert möglicherweise nicht, wenn zu viel ausgegeben wird.

Dies funktioniert auch dann, wenn Sie normalerweise keine [ OK ]Nachrichten sehen, z. B. aufgrund quietder von Debian verwendeten Kernel-Befehlszeile. Beim ersten Fehler wechselt systemd in den ausführlichen Modus.

Ansonsten können Sie verwenden systemctl. Ohne Optionen wird eine umfangreiche Liste bekannter Einheiten angezeigt, deren Fehler rot hervorgehoben sind. Verwenden Sie systemctl --state=failedoder, um nur die fehlgeschlagenen anzuzeigen systemctl --failed.


Wenn Sie die Gerätedateien durchsuchen, gibt es nur sehr wenige Möglichkeiten, auf die der Boot zurückgreifen kann emergency.target. Dies ist normalerweise der .mountFall, wenn eine Einheit für ein lokales Dateisystem ausfällt und local-fs.targetausfällt. Oder wenn Ihr initramfs das Root-Dateisystem nicht bereitstellen kann, wenn Ihr initramfs systemd verwendet.

local-fs.targethat OnFailure=emergency.target. Und es schlägt fehl, weil Einheiten für lokale Dateisysteme automatisch zur Liste Erforderlich von local-fs.target hinzugefügt werden (sofern dies nicht der Fall ist DefaultDependencies=no).

$ systemctl show --property Requires local-fs.target
Requires=-.mount home.mount boot.mount boot-efi.mount
sourcejedi
quelle
2

Hin und wieder stoße ich auf eine Eingabeaufforderung für den "Wartungsmodus", und ich muss auch nach Fehlern in journald scrollen. Da journalctl weniger als Pager verwendet, sollten Sie in der Lage sein, weniger Verknüpfungen auf Ihre Suche anzuwenden.

Normalerweise würde ich mich auf die Suchfunktion (/) verlassen und nach etwas suchen, das "Fehler", "Warnung" oder "Fehler" entspricht. Und stellen Sie sicher, dass -i die Suche ohne Berücksichtigung der Groß- und Kleinschreibung erzwingt.

Meine Tastenanschläge sehen also normalerweise so aus:

-i (case insensitive)
g (move to start)
/error
nnnn (skip through results)
g (move to start)
/fail
nnnn (skip through results)
g (move to start)
/warn
nnnn (skip through results)

Es ist technisch gesehen keine erschöpfende oder genaue Suche nach dem genauen Problem, aber ich habe noch nie ein Boot-Problem auf diese Weise verpasst.

Einige verwandte weniger Tastaturkürzel unten:

http://www.thegeekstuff.com/2010/02/unix-less-command-10-tips-for-effective-navigation/

Madumlao
quelle
Ich glaube, es sollte auch möglich sein, schnell durchzublättern und nach den roten Nachrichten zu suchen (LOG_ERR und höher). systemdprotokolliert rote Nachrichten für Fehler beim Starten einer Serviceeinheit oder, was noch wichtiger ist, Fehler beim Mounten eines Dateisystems.
Sourcejedi