Wie kann man nach dem Booten alle Bootmeldungen in Linux anzeigen?

17067
AttributedTensorField

Relevante Fragen sind:

Wo legt Linux die Boot-Nachrichten ab?

Name der Protokolldatei, in der der Startvorgang protokolliert wird

Diese beantworten diese Frage jedoch nicht. Bei dieser Frage geht es darum, wie alle Bootnachrichten angezeigt werden können.

Dies ist für Gentoo, OpenRC, moderne Kernel, 4.9.6, wenn Sie spezifisch werden wollen. Eine generische Lösung, die für alle Distributionen geeignet ist, wäre jedoch vorzuziehen.

Das Problem ist, dass manchmal ein Fehler oder eine Warnung so schnell durchlaufen wird, dass sie nicht gesehen werden kann. Es ist auch nicht immer möglich, aus zwei Gründen einfach nach oben zu scrollen (selbst mit --noclear in inabab): Wenn Sie zum Framebuffer wechseln, blättern Sie bis zu dem Punkt, an dem der Schalter zu platzieren nicht mehr möglich ist, und zweitens, nachdem X gestartet wurde. Wenn Sie zur Konsole wechseln und einen Bildlauf nach oben ausführen, ist ein Bildlauf erst möglich, wenn dem Puffer neuer Text hinzugefügt wird. Manchmal werden bestimmte Nachrichten einfach nicht in dmesg oder in / var / log / messages gefunden.

Wie kann ich alle Nachrichten anzeigen?

Ich sehe hier jemanden, https://www.linuxquestions.org/questions/linux-newbie-8/please-how-to-pause-scrolling-messages-at-boot-323772/, der darauf hindeutet, dass das Drücken der Scroll-Sperre die Wiedergabe anhalten könnte. Dies ist jedoch im besten Fall eine nicht sehr elegante Lösung - einige Meldungen werden zu schnell durchlaufen, und Systeme können beim Starten plötzlich sehr viel Text ausgeben.

Das möchte ich idealerweise:

  • Ein dmesg | wenn möglich, eine weniger artige Lösung oder eine andere Möglichkeit, den Startvorgang durchzugehen.
  • Eine Möglichkeit, um sicherzustellen, dass alles, was auf dem Bildschirm gedruckt wird, auch protokolliert wird.

Gibt es einen einfachen Weg, um eines davon zu erreichen?

Ich kenne eine Lösung:

CONFIG_BOOT_PRINTK_DELAY: Verzögern Sie jede Boot Printk-Nachricht um N Millisekunden

Seltsamerweise scheint es mir nicht einmal erlaubt zu sein, BOOT_PRINTK_DELAY in meinem menuconfig auszuwählen. Ich kann es bei der Suche finden, aber unter Kernel-Hacking -> printk und dmesg options -> habe ich nur "Timing-Informationen auf Printks anzeigen" und "Default" Meldungsprotokollebene ". Wo ist die Option für die Verzögerung von Printk? Muss ich zuerst etwas anderes aktivieren, um es sichtbar zu machen? Was? Es wäre schön, dies als Teil einer Antwort zu haben, wenn es jemand weiß.

Aber trotzdem erfordert dies eine Neukompilierung des Kernels, die diesen hässlichen und invasiven Hack für eine scheinbar banale Aufgabe macht. Eine richtige Vorgehensweise wäre sehr willkommen.

6
welche Verteilung? sysvinit oder systemd (oder anderes)? Kernelversion? quixotic vor 7 Jahren 1
Frage bearbeitet AttributedTensorField vor 7 Jahren 0
Nun, dmesg ist der Ort dieser Datei. Wenn es beim Boot nicht vorhanden ist, wird es erstellt. Wenn Sie also möchten, dass Ihr Start eine Zeile in die init.d enthält, wird dies in eine andere Datei verschoben. Ich bin sicher, Sie könnten den Befehlssatz wiederverwenden, der die Standardprotokollrotation für diese Datei ausführt, und dann die letzten N-Iterationen beibehalten. Die einzigen Meldungen, die Sie nicht sehen können, führen dazu, dass grub nicht startet. Wenn dies der Fall ist, wird kein großer Stapel Text auf dem Bildschirm angezeigt. Rowan Hawkins vor 7 Jahren 0
Wenn Sie stattdessen versuchen, den Text zu erfassen, bevor das BIOS die Steuerung an den Boot-Sektor der Festplatte übergeben hat, müssten Sie über ein serielles Verwaltungs-Port oder ein ipmi ein Dienstprogramm für die Bildschirmaufzeichnung verfügen. Beide erfordern Hardware der Server-Klasse. Rowan Hawkins vor 7 Jahren 0

3 Antworten auf die Frage

6
grawity

Ihre Konsole verfügt also über zwei Arten von Nachrichten:

  • vom Kernel generiert (via printk);
  • generiert durch den Userspace (normalerweise Ihr Init-System).

Kernel-Nachrichten werden immer im kmsg-Puffer abgelegt, sichtbar über dmesg. Sie werden häufig auch in Ihr Syslog kopiert. (Dies gilt auch für Benutzermeldungen, in die geschrieben /dev/kmsgwird, diese sind jedoch eher selten.)

In der Zwischenzeit schreibt Userspace seinen fantastischen Boot-Status-Text in /dev/consoleoder oder /dev/tty1wird überhaupt nicht gespeichert. Es geht einfach auf den Bildschirm und das war's. Ich denke also, dass praktisch jede Lösung - außer für Rowans seriellen Konsolenvorschlag - entweder sehr distrusspezifisch sein wird (da jedes init-System die Protokollierung anders ausführt) oder ein "invasiver Hack", der Strace- oder Kernel-Hacking oder ähnliches beinhaltet.

Im besten Fall, Ihr Init - System wird sich alle wichtigen Ereignisse protokollieren zum syslog (/ var / log / messages oder so). Zum Beispiel:

systemd[1]: Starting BIRD routing daemon... bird[478296]: /etc/bird.conf, line 2: syntax error systemd[1]: bird.service: Control process exited, code=exited status=1 systemd[1]: Failed to start BIRD routing daemon. 

(systemd und upstart protokollieren auch die Dienste stdout / stderr der Dienste; viele andere init-Systeme leiten sie einfach an die Konsole oder nirgendwo weiter.)

Ich muss Linux "netconsole" erwähnen, aber ich habe es noch nicht recherchiert. grawity vor 7 Jahren 0
Wie grubboots vor dem Kernel kann es vielleicht einen Listener auf / dev / tty1 lassen? Eine Art Low-Level-Bildschirmschreiber. WinEunuuchs2Unix vor 5 Jahren 0
1
Rowan Hawkins

Grawitys Antwort ist besser zu beschreiben, als ich es für diese Phase im Boot hätte tun können.

Bei der physischen Umleitungsmethode muss Ihr BIOS dies unterstützen. Server-Geared-Boards tun dies normalerweise. Die Intel-, IBM- und SuperMicro-Systeme verfügen normalerweise über eine Konsolenumleitungsoption unter der Hauptüberschrift des BIOS. Sie kann nicht verwendet werden, wenn Ihr Motherboard keinen physischen seriellen Port hat, z. B. nur USB. Möglicherweise müssen Sie einen physischen Port an die Pins des Motherboards anschließen, falls vorhanden.

Die Konsolenumleitung kann zu Verwirrung führen, wenn Sie zu dem Punkt gelangen, an dem das Betriebssystem versucht, den seriellen Anschluss für etwas anderes zu verwenden. Ich würde sagen, es wird hauptsächlich für das Debuggen in einem bestimmten Fall und nicht für die ständige Verwendung verwendet.

Um sie verwenden zu können, müssen Sie die entsprechenden Anschlusseinstellungen für den Com-Port des Empfängers festlegen, der möglicherweise auf USB basiert. Anschließend müssen Sie die beiden Geräte mit einem Nullmodemkabel verbinden, das die Sende- und Empfangspins zwischen den Geräten austauscht.

Das empfangende Gerät muss vollständig eingeschaltet sein und während des Startvorgangs des Quellensystems auf die Kommunikation achten. Das empfangende System erhält alle textbasierten Ausgaben.

Wenn Ihr Betriebssystem während des Startvorgangs Text über ein grapicales Konstrukt anstatt als Text anzeigt, wird das empfangende System Kauderwelsch bekommen.

Ich füge hinzu, dass dies ein Kommentar ist, da er sich nicht direkt auf die Antwort bezieht. Serielle 9-Pin-Anschlüsse sind technisch nicht Bestandteil der seriellen Spezifikation. Die ursprüngliche serielle Spezifikation umfasste nur den 25-Pin-Port und einen fast nie benutzten 15-Pin-Port. Der 9-Pin, den wir heute überall sehen, ist ein Hack des 15-Pin-Steckverbinders in einen kleineren Formfaktor. Rowan Hawkins vor 7 Jahren 0
1
Devuan

Ein Vorschlag ist, einen anderen Laptop auf dem Boot-Bildschirm mit hoher Auflösung und Bildraten zu filmen und dann das Ergebnis langsam abzuspielen ( MOV-MP4-AVI ) - vielleicht nicht die beste Lösung, sondern einfach einzusetzen und sein Debuggen sowieso richtig? Nur eine Idee ...