Ist tune2fs -l / dev / mmcblk0pN zuverlässig, um Dateisystemfehler zu überprüfen?

709
AnkurTank

Wir haben ein BBB-basiertes Custom-Board, es hat 256 MB RAM und 4 GB oder eMMC. Wir verwenden Linux-3.12 und auf eMMC haben wir ext4-Partitionen.

Ich schreibe ein Skript, das regelmäßig ausgeführt wird und nach Dateisystemfehlern sucht. Wenn keine Partitionen geladen sind, versuche ich, den Fehler mithilfe von e2fsck zu korrigieren.
Anfangs habe ich e2fsck -n /dev/mmcblk0pN (N is partition number)nach Fehlern in der Dateisystempartition gesucht.
Der obige Befehl gab jedoch ein falsches Ergebnis aus, wenn die Partition angehängt wurde und Dateien auf der Partition erstellt wurden.

Jetzt brauchte ich eine Alternative, um den Dateisystemfehler zu überprüfen.
Eine Option besteht darin, den tune2fs -lBefehl für das Filesystem stateFeld " Partition prüfen" zu verwenden.

Jetzt bin ich nicht sicher, ob dieses Feld zuverlässig zum Überprüfen von Dateisystemfehlern geeignet ist oder nicht. Und welche möglichen Werte kann dieses Feld haben? Ich habe seine Werte zu sehen clean, clean with errorsund not cleanaber ich habe nicht mehr Informationen von Mann - Seite.

Ist es tune2fs -l /dev/mmcblk0pN | grep “Filesystem state” | grep “error”zuverlässig, Dateisystemfehler zu erkennen? Gibt es eine andere bessere Möglichkeit, Dateisystemfehler in der Partition zu überprüfen?

Irgendwelche Vorschläge / Hinweise / Informationen?

0

1 Antwort auf die Frage

1
Theodore Ts'o

"Tune2fs -l" sagt Ihnen, ob der Kernel während seiner Ausführung auf Probleme mit dem Dateisystem aufmerksam geworden ist. Wenn Sie beispielsweise ext4 zum Löschen einer Datei auffordern und Ext4 feststellt, dass einige Blöcke in dieser Datei bereits als freigegeben markiert wurden, bedeutet dies, dass die Zuweisungsbitmap beschädigt ist. Beachten Sie, dass die Zuweisungsbitmap zum Zeitpunkt der Erkennung durch ext4 bereits beschädigt war. Tatsächlich könnte es seit Tagen oder Wochen beschädigt worden sein. Wenn Sie neue Dateien geschrieben haben, ist es möglich, dass ext4 Blöcke für neue Dateien zugewiesen hat, die für ältere Dateien verwendet wurden, und der Benutzer hat möglicherweise Daten verloren Ergebnis.

Die einzige Möglichkeit, zuverlässig zu sagen, ob ein Dateisystem konsistent ist oder nicht, ist die Ausführung von e2fsck. Dazu muss entweder das Dateisystem ausgehängt werden oder ein schreibgeschützter Snapshot erstellt werden. (Wenn Sie LVM verwenden, können Sie einen schreibgeschützten Snapshot erstellen, den schreibgeschützten Snapshot überprüfen. Wenn das Dateisystem beschädigt ist, können Sie entweder das System neu starten und das Dateisystem von e2fsck reparieren lassen. oder senden Sie eine E-Mail an den Systemadministrator, um Ausfallzeiten festzulegen, um das Dateisystem zu beheben.)

Alles in allem, wenn das Dateisystem beschädigt wurde, liegt dies wahrscheinlich an einem Hardwareproblem, das der häufigste Fall ist. Es ist möglich, dass es an einem Kernel-Fehler liegen könnte, obwohl ich regelmäßig Regressionstests auf den stabilen Kerneln durchführe, nicht nur beim Upstream, und wir haben seit langem kein Korruptionsproblem für fs gehabt. Es ist möglich, dass in einem Gerätetreiber ein Speicherbeschädigungsfehler aufgetreten ist und entweder (a) der Gerätetreiber nicht im Upstream-Modus ist und der Hardwarehersteller keine ordnungsgemäße Qualitätskontrolle durchgeführt hat oder (b) der Fehler im Upstream-Modus behoben wurde und sogar auf den neuesten stabilen Kernel getrieben, aber der Gerätekernel nahm keine Updates aus der stabilen Kernel-Serie.

Wenn Sie feststellen, ob das Dateisystem als fehlerhaft befunden wurde, weil der Kernel auf etwas offensichtlich Falsches gestoßen ist, müssen Sie nicht nur dmesg oder / var / log / messages scrape. Sie können auch versuchen, die Datei / sys / fs / ext4 // first_error_time zu lesen. Wenn diese Datei einen Wert ungleich Null enthält, wird Ihnen der Zeitpunkt (unter Verwendung der Unix-Epoche) mitgeteilt, zu dem eine Beschädigung des Dateisystems vom Kernel festgestellt wurde. Die Datei errors_count in diesem Verzeichnis sagt Ihnen, wie viele Dateisystembeschädigungen festgestellt wurden (dies kann jedoch nur der Fall sein, dass das System dasselbe Problem immer wieder auslöst). Wenn Sie testen möchten, wie Ihr System Dateisystemfehler behandelt, die vom Kernel erkannt werden, können Sie auch versuchen, einen String in die trigger_fs_error -Datei zu schreiben, z. B. Echo "test error">

Zum Schluss schauen Sie sich bitte den Fehlerverhalten-Knopf an, den Sie in tune2fs einstellen können. Wenn Sie wirklich sicherstellen möchten, dass nach dem Erkennen eines Dateisystemproblems kein größerer Schaden entsteht, können Sie das Dateisystem so konfigurieren, dass es sich selbst wieder schreibgeschützt meldet, wenn ein Problem gefunden wird. oder erzwingen Sie einfach einen Neustart, damit e2fsck während der Startsequenz ausgeführt werden kann, um ein Problem zu beheben, bevor (noch mehr) Benutzerdaten beschädigt werden oder verloren gehen.

Vielen Dank für die ausführliche Antwort von Theodore. Derzeit verwenden wir busybox SysVInit und es gibt keine inhärente `fsck`-Prüfung beim Booten. Wir haben keinen `filesystem_check`-Daemon wie` systemd`. Wir können also nur ein Skript schreiben und beim Start und in regelmäßigen Abständen während des normalen Systemlaufs ausführen. Beim Booten des Skripts wurden alle ext4-Partitionen geprüft und der Fehler mithilfe von `e2fsck -y (oder e2fsck -p)` überprüft und bei Bedarf neu gestartet. Bei normalem Betrieb würde er dasselbe tun, aber Fehler nicht korrigieren, sondern nur melden. AnkurTank vor 7 Jahren 0
Ich habe zwei Fragen: 1) Wie können wir Dateisystemfehler auf gemounteten nicht gemounteten Partitionen zuverlässig überprüfen? Wie Sie auch darauf hingewiesen haben, dass die Partition nicht gemountet werden sollte und ich auch getestet habe, wann die Partition gemountet ist und Schreibvorgänge darauf laufen, kann `e2fsck` nicht das richtige Ergebnis liefern. 2) Können nicht gemountete Partitionen Dateisystemfehler haben? (Hardware-Badblocks können schuld sein, aber ich kann mir keinen anderen Grund vorstellen). AnkurTank vor 7 Jahren 0
E2fsck kann bei der Überprüfung eines eingehängten Dateisystems kein zuverlässiges Ergebnis liefern. Die einzige Ausnahme ist, wenn Sie LVM verwenden und einen schreibgeschützten Snapshot erstellen. Diese schreibgeschützte Momentaufnahme kann zuverlässig überprüft werden (das laufende Dateisystem kann jedoch nicht repariert werden). All das habe ich oben beschrieben. Theodore Ts'o vor 7 Jahren 0
Nicht gemountete Dateisysteme können Fehler aufgrund von (a) Hardwareproblemen, (b) Kernel-Fehlern und (c) unreinen Herunterfahren aufweisen, wenn der Flash-Speicher nicht als Stromausfall zertifiziert ist. Nicht alle Flash-Geräte können garantiert das Richtige tun, wenn sie einen Stromausfall erhalten. Theodore Ts'o vor 7 Jahren 0
Vielen Dank für die Antwort Theodore. In diesem Fall, wie jemand Dateisystemfehler in gemounteten Partitionen überwacht und eine darauf basierende Aktion ausführt? kann es nicht überwacht werden? Wir möchten nicht, dass der Dateisystemfehler einen Zustand erreicht, in dem er als Readonly erneut bereitgestellt wird und der Benutzer keine Operation ausführen kann. Gibt es eine bestimmte Zertifizierung, die ich im eMMC-Datenblatt überprüfen muss, um festzustellen, ob es sich um einen Stromausfall handelt? AnkurTank vor 7 Jahren 0
Wenn Sie ein Mobiltelefonhersteller sind und Hunderttausende von Geräten von eMMC-Geräten gleichzeitig kaufen, können Sie Ihrem Anbieter normalerweise diese Fragen stellen, und die wirklich seriösen Anbieter führen ihre eigenen Stromausfallprüfungen durch. Sie können auch keine auswechselbaren Batterien verwenden und Ihr Gerät so konfigurieren, dass es bei einer niedrigen Stromzufuhr sauber heruntergefahren wird. Perfektion kann nicht billig gemacht werden. Dies bedeutet, dass ECC-Speicher verwendet wird, um zu verhindern, dass kosmische Strahlen den Speicher beschädigen, bevor Plattenpuffer geschrieben werden können usw. Was ist Ihr Anwendungsfall? Ist das Leben / Mission kritisch? Avionik? Selbstfahrendes Auto Theodore Ts'o vor 7 Jahren 0
Bei SSDs befinden sich diese Daten in den Datenblättern, und es ist der Unterschied zwischen SSDs für Consumer-Grade, die für einige hundert Dollar zu haben sind, und SSDs für Enterprise-Grade, die fast tausend Dollar oder mehr kosten könnten. Ich weiß nicht, wie viele eMMC-Geräte Stromausfall-zertifiziert sind. Es gibt eine unglückliche Tendenz, die als "Race to the Bottom" bezeichnet wird, bei der Hersteller versuchen, einen Bruchteil eines Pennys von ihren Stücklistenkosten (BOM-Kosten) zu sparen, was diese sehr unglückliche Tendenz hat, dass Qualität nicht unbedingt höchste Priorität hat. Ja, ich vergleiche die Einzelhandelspreise mit den Großhandelspreisen, aber .... Theodore Ts'o vor 7 Jahren 0
Beachten Sie auch, dass die meisten Hersteller von Mobilgeräten die Software-Engineering-Kosten einsparen, sodass sie nicht mit den neuesten Fehlerbehebungen der stabilen Kernel-Serie Schritt halten. Um fair zu sein, ist es also nicht nur ein Hardwareproblem. Deshalb frage ich, was Ihr Anwendungsfall ist. Es ist ungewöhnlich, dass sich Hersteller von Mobiltelefonen kümmern. Für viel zu viele von ihnen gilt leider, solange sie nicht in Flugzeugen Feuer fangen und explodieren, ein Gewinn ... (und es ist nicht nur ihre Schuld, die meisten Leute sind nicht bereit, dafür extra zu zahlen.) Qualität, also bekommen wir, was wir verdienen) Theodore Ts'o vor 7 Jahren 0
Wenn Sie LVM verwenden, können Sie ein bereitgestelltes Dateisystem folgendermaßen überprüfen. Es muss ein Nur-Lese-Snapshot erstellt werden, und die meisten Embedded- / Mobilteilsysteme verwenden LVM nicht *. (Sie könnten, wenn es ihnen etwas ausmacht, nehme ich an ....) https://git.kernel.org/cgit/fs/ext2/e2fsprogs.git/tree/contrib/e2croncheck Theodore Ts'o vor 7 Jahren 0
Vielen Dank für Ihre Antwort, wir sind NICHT auf geschäftskritische oder Avionik- oder selbstfahrende Autos ausgerichtet. Es handelt sich um einen Anwendungsfall, der nicht für die Lebenssicherheit von Bedeutung ist. Wir sehen jedoch diese Dateisystemfehler in unseren Testgeräten. Diese Fehler scheinen auf Fragmentierungsproblemen zurückzuführen zu sein (oder zumindest können wir dies anhand von Kernel-Nachrichten verstehen). Ich hatte es in mehreren Foren veröffentlicht, z. B. im BBB-Forum: https://groups.google.com/forum/#!topic/beagleboard/L7piqfHiyO8. Wir haben jedoch nicht die Hauptursache ODER eine geeignete Lösung für dieselbe gefunden (Ausnahme, dass min_free_kbytes auf 16M eingestellt ist). AnkurTank vor 7 Jahren 0
Wir versuchen daher, eine Lösung zur Behebung dieser Dateisystemfehler zu finden, falls dies der Fall ist. Eine ähnliche Frage hatte ich auch hier http://superuser.com/questions/1138443/how-to-reduce-unmovable-und-und-unevictable-pages-in-linux gepostet. AnkurTank vor 7 Jahren 0
Anscheinend besteht Ihr Hauptproblem darin, dass Sie versuchen, ein System mit nur 256 MB RAM zu verwenden, und der eMMC-Treiber versucht, einen Speicherbereich der Ordnung 3 (8 zusammenhängende 4-KB-Seiten) zuzuweisen, und schlägt fehl. Dies führt zu E / A-Fehlern, die das Dateisystem beschädigen. Möglicherweise tun Sie einfach mehr, als von Ihrem System unterstützt werden kann - oder es kann sein, dass einige Kernelmodule oder Treiber als Speicherverlust geladen wurden. Theodore Ts'o vor 7 Jahren 0
Ich werde den Kernel-Speicherleck auch überprüfen und aktualisieren. AnkurTank vor 7 Jahren 0
Es scheint, dass wir einen Speicherverlust im edma-Treiber (Linux 3.12) von am335x haben. Wir versuchen, Hilfe von TI zu bekommen. Mittlerweile hatte ich einen Zweifel, ob `e2fsck -y` destruktive Operation ist? Für mein Skript plane ich die Verwendung von "e2fsck -p", da das Handbuch besagt, dass das Problem ohne Eingriffe des Benutzers sicher behoben wird. Welchen Fehler würde ein menschliches Eingreifen erfordern, wenn e2fsck die Operation als destruktiv ansieht? AnkurTank vor 7 Jahren 0