Mein Raspberry Pi 3 arbeitet seit einem Jahr stabil als kopfloser Server. Im letzten Monat stürzt es häufig ab (alle zwei Tage). Ich kann einen Monitor anschließen und feststellen, dass eine Kernel-Panik aufgetreten ist. Ich bin mir jedoch nicht sicher, wie ich die Ausgabe interpretieren soll, es gibt keine Protokolle und die Ausgabe auf dem Bildschirm wurde fortgesetzt.
Hier sind Fotos von zwei verschiedenen Kernel-Paniken. (Entschuldigung für die Fotos; es gibt keine Textprotokolle.)
Gibt es eine Möglichkeit, die gesamten Protokolle anzuzeigen, und wie kann ich Kernel-Paniken beheben?
(Es ist auch offensichtlich, wo das Problem bei diesen Fotos liegt. Als Hintergrund tritt dies häufig um 3 Uhr morgens auf, wenn die automatisierten rsync-Backups (Backintime-Backups) durchgeführt werden. Dies hängt möglicherweise mit der Festplatten-E / A zusammen. Ich habe versucht, sie auszutauschen um ein neues RPi 3 zu verwenden, fsck
-ing Volumes und den Kernel von auf 4.4.35-v7+
zu aktualisieren 4.9.65-v7+
, mit rpi-update
.)
rsync
würde auf einen SD-Kartenfehler hinweisen. Sie haben eine begrenzte Anzahl von R / W-Vorgängen, und ein Jahr starker Beanspruchung könnte dies bewirken. Selbst wenn Sie externe Laufwerke für Daten verwenden, ist es dennoch möglich, dass eine Beschädigung / ein Ausfall der SD-Karte dies verursacht. Andere Hardwaremöglichkeiten sind schlechter Arbeitsspeicher und andere Fehler.Antworten:
Auf Ihrem Raspberry Pi ist normalerweise eine serielle Konsole auf einem der integrierten UARTs aktiviert (oder kann so konfiguriert werden, dass eine serielle Konsole vorhanden ist), die an den GPIO-Pins 14 und 15 freigelegt ist. Mit dem entsprechenden Kabel (wie diesem ) können Sie dies verbinden bis zu einem anderen Computer und protokollieren Sie die gesamte Ausgabe in einer Datei. Dies erleichtert das Anzeigen / Kopieren / Einfügen usw. erheblich.
In diesem Dokument wird erläutert, wie Sie die serielle Konsole in neueren Versionen von Raspbian aktivieren.
Auf dieser Seite werden die seriellen Schnittstellen ausführlicher beschrieben.
Das ist eine schwarze Kunst, für die ich kein besonderer Experte bin.
quelle
Adressierungspunkt 2
Eine Kernel-Panik ist nur ein Absturz im Kernel. Ein Absturz, der durch eine beliebige Anzahl normaler Software- oder Hardwarefehler verursacht wird.
Das Debuggen des Kernels unterscheidet sich nicht von jeder anderen Software. Eine Kombination von
Eine zusätzliche Option für Kernel
/proc/
und/sys/
angezeigt. Dies kann Ihnen beispielsweise dabei helfen, Trends zu verfolgen (z. B. die Anzahl der Ausnahmen steigt vor einem Absturz, die CPU-Auslastung steigt, viele Swap- / Kontextwechsel). Dies ist jedoch eine sehr qualitative und "nicht in Echtzeit" Debugging-Information.Da der Kernel das System ausführt, ist es leider schwieriger, an Ort und Stelle zu debuggen als User Space Code. Protokollnachrichten sind so ziemlich alles, was Sie wirklich haben
Es ist möglich, Ihren eigenen Kernel-Code vor Ort zu debuggen , wenn Sie wissen, was er tut und wo er falsch läuft, indem Sie ausführliche Protokollierung und anderes logarithmisches Debuggen in Ihrem benutzerdefinierten Modul / Kernel durchführen, aber zeitweise Abstürze in einem vorkompilierten Code diagnostizieren Release-Kernel kommt so gut wie nicht in Frage. Sie werden nichts Besseres tun, als ohne zusätzliche Hardware zu protokollieren
Sie benötigen eine Hardwareschnittstelle, um das Debugging auszuführen. In der eingebetteten Welt wird dies als
In Circuit Emulation
( ICE ) bezeichnet und wird üblicherweise mithilfe derJTAG
Schnittstelle erreichtSie müssen nämlich
JTAG
eine Hardware-Debugging-Schnittstelle verwenden. Dies ermöglicht es, Haltepunkte zu setzen und die CPU mit externer Hardware zu unterbrechen.Bei korrekter Einrichtung können Sie
JTAG
problemlosgdb
auf einem Host-PC laufen, um eingebettete Linux-Kernel zu debuggen. Die Verwendung ist identisch mit der Verwendunggdb
mit anderen Anwendungen, die Schnittstelle ist jedoch Hardware.Sie würden dieses Setup verwenden
Gutes Ressourcen-Tutorial: https://www.elinux.org/Debugging_The_Linux_Kernel_Using_Gdb
Beachten Sie, dass selbst dies möglicherweise nicht ausreicht. Es gibt viele Probleme, die nur auftreten, wenn Dinge "mit Geschwindigkeit" ausgeführt werden, dh das Einwerfen eines Debuggers oder sogar zusätzliche Protokollmeldungen können das System so stark verändern, dass der Fehler ausgeblendet oder maskiert wird.
Zusamenfassend
Ihr Protokoll ist tatsächlich abgeschnitten. Ich vermute, Sie haben einen Hardwarefehler, der eine nicht behandelte CPU-Ausnahme auslöst, die den Kernel-Absturz / die Panik verursacht.
Ein sehr häufiges Szenario ist intermittierender / fehlerhafter / beschädigter Speicher, der dazu führt, dass ein falscher Befehl in die CPU geladen wird, was eine Ausnahme verursacht.
quelle