Kann ein unerwarteter Stromausfall einer Linux-Installation schaden?

22

Ich entwickle eine Anwendung auf einem Linux Embedded Board (läuft unter Debian), zB Raspberry Pi, Beagle Board / Bone oder Olimex. Die Platinen funktionieren in einer Umgebung, in der der Strom unerwartet unterbrochen wird (es ist weitaus komplizierter, das Netzteil usw. zu platzieren) und dies würde jeden Tag ein paarmal passieren. Ich frage mich, ob die unerwarteten Stromausfälle einen Absturz / ein Problem auf dem Linux-Betriebssystem verursachen würden. Wenn es etwas ist, das ich beunruhigen sollte, was würden Sie vorschlagen, um die Schäden am Betriebssystem gegen die unerwarteten Stromausfälle zu verhindern?

PS. Die Anwendung muss einige Daten auf das Speichermedium (SD-Karte) schreiben, ich denke, es wäre nicht geeignet, es als schreibgeschützt zu mounten.

Durchbruch
quelle
1
Vermeiden Sie ext2 (verwenden Sie ext3 oder höher) auf Dateisystemen, die Sie häufig ändern, und Sie sollten größtenteils in Ordnung sein.
LawrenceC
Wenn Sie beim Spezifizieren Ihrer SD-Karten nicht sehr vorsichtig sind , garantieren die Karten nichts, wenn Sie die Stromversorgung unerwartet unterbrechen . Die Karte könnte sich mitten in einem Abnutzungs-Level befinden, was zu seltsamer, unerwarteter Korruption führen könnte - sogar in einer anderen Partition!
Derobert
Ich weiß nicht genau, wie es geht, aber Sie sollten in Betracht ziehen, die Transaktion Ihrer Schlüsselanwendungen auf der Grundlage von Transaktionen durchzuführen. Auf diese Weise können Sie Ihre aktuelle Datei und ein Backup haben. Sie wenden die Transaktionen auf Ihre aktuelle Datei an. Wenn dies fehlschlägt, können Sie die aktuelle Datei aus der Sicherung wiederherstellen und die Transaktionen erneut anwenden. Wenn Sie mithilfe von Symlinks oder durch Austauschen von Dateinamen zwischen aktuellem und Backup wechseln, kann dies sehr schnell und mit wesentlich geringerer Fehlerwahrscheinlichkeit als beim Kopieren geschehen. Nach einem erfolgreichen Update wird Ihre aktuelle Datei zu Ihrer Sicherung und die Sicherung wird zur aktuellen.
Joe
Fortsetzung. Das funktioniert fast. Für die neue aktuelle Datei müssten auch die Transaktionen angewendet werden, sodass die Transaktionen zweimal verarbeitet werden müssen. Ich bin mir also sicher, dass es einen besseren Weg gibt. In jedem Fall ist es möglicherweise noch viel schneller und sicherer als das Kopieren der gesamten Datei, wenn sie groß ist.
Joe

Antworten:

14

Unerwartete Stromausfälle können zu einer Beschädigung der Dateisystemdaten führen. Wenn z. B. ein Prozess mit dem Schreiben in eine Datei begonnen hat, diese aber noch nicht abgeschlossen hat, wird die Datei möglicherweise nur zur Hälfte geschrieben. Stellen Sie sich nun vor, dass der Stromausfall auf halbem Wege eines Kernel-Upgrades erfolgt ...

Wie l0b0 schrieb, wird die Verwendung eines Journal-Dateisystems helfen, da es in der Lage sein wird, den Überblick darüber zu behalten, was tatsächlich getan wurde. Neben dem wikipedia Info , dass l0b0 verbunden sind , können Sie interessiert sein /unix/12699/do-journaling-filesystems-guarantee-against-corruption-after-a-power-failure auch .

Als Programmierer müssen Sie natürlich sorgfältig darüber nachdenken, wie das Schreiben in Dateien zu einem atomaren Prozess wird (dh entweder vollständig oder gar nicht, aber nie zur Hälfte). Es ist ein ziemlich komplexes Thema.

Jenny D
quelle
10
Der allgemeine Code zum Schutz vor Schreibunterbrechungen, die eine Datei beschädigen, besteht darin, dass Sie anstelle einer direkten Änderung von file.name eine vollständig neue Datei file.name.newversion schreiben und anschließend die alte Version mit den Befehlen delete / rename ersetzen ein neues. Sie müssen Bereinigungscode hinzufügen, um bei jedem Schritt eine Unterbrechung zu beheben. Bei diesem Ansatz bleibt jedoch immer eine gute Kopie der Datei auf der Festplatte. Dies kann sich auf Ihr Design auswirken, da einzelne große Dateien schlecht aktualisiert werden oder häufige Änderungen an einer einzelnen Datei vorgenommen werden.
Dan Neely
11

Um die Möglichkeit einer Beschädigung des Betriebssystems zu minimieren, ist es wahrscheinlich am besten, separate "System" - und "Daten" -Partitionen auf der SD-Karte zu haben. Auf diese Weise können Sie die "System" -Partition schreibgeschützt bereitstellen und einen hoch belastbaren FS für die "Daten" -Partition verwenden.

Darüber hinaus haben die meisten dieser Boards einen sehr geringen Energiebedarf, sodass eine Batterieunterstützung möglich ist. Das "LiPo Rider" Board für den Raspberry Pi kann als Basis-USV verwendet werden, um ein sauberes Abschalten bei Stromausfall zu gewährleisten.

Stu
quelle
5

Das würde davon abhängen

  1. ob Sie ein Journal-Dateisystem verwenden und
  2. wie gut die Anwendungen die abgebrochene Verarbeitung verarbeiten können.

Stellen Sie sich zum Beispiel eine Anwendung vor, die eine Datei verarbeitet und die Ergebnisse beim Berechnen (eine Ausgabezeile pro Eingabezeile) in eine andere Datei schreibt. Wenn die Stromversorgung während der Verarbeitung unterbrochen und dieselbe Anwendung nach dem Neustart ausgeführt wird, kann die Verarbeitung nicht einfach vom Anfang der Eingabedatei an neu gestartet werden. Dies würde bedeuten, dass die Ausgabedatei doppelte Informationen enthält.

Es könnte sehr schwierig sein, etwas Bestimmtes über ein hypothetisch komplexes System zu sagen, aber die stabilste Linux-Software scheint in der Lage zu sein, Abstürze recht gut zu handhaben.

l0b0
quelle
1

Da niemand ein bestimmtes Dateisystem erwähnte: Modernere Dateisysteme (ext3, ext4, ntfs) sind in der Lage, Abstürze aufgrund von Journaling besser zu handhaben als ältere Dateisysteme (ext2, ext, fat32) .

Vorausgesetzt, die Festplatte stürzt nicht ab und lügt nicht , sollte ein vollständiger Stromausfall das Dateisystem nicht beschädigen. Einzelne Dateien, die geschrieben wurden, sind möglicherweise immer noch beschädigt. Wenn Sie also gerade das Betriebssystem aktualisieren, als der Stromausfall auftrat, können Sie das Betriebssystem trotzdem herunterfahren.

BlueRaja - Danny Pflughoeft
quelle