Korruptionssicher machen

11

Mein Embedded Linux-Gerät verwendet eine SD-Karte zum Speichern bestimmter Diagnosedaten, die für internen Flash viel zu umfangreich ist.

Das Problem ist, wenn das Gerät unerwartet ausgeschaltet wird, das Dateisystem (FAT32) auf der Karte beschädigt ist.

Es gibt keine Möglichkeit, unerwartete Stromausfälle oder das Ausschalten durch den Benutzer zu verhindern, und das Gerät sollte relativ wartungsfrei sein. Schlimmer noch, die Daten werden kontinuierlich geschrieben, so dass die Beschädigungen sehr häufig sind, und Linux stellt sie nach dem Erkennen eines fehlerhaften FS schreibgeschützt wieder bereit.

Welche Methoden würden Sie vorschlagen, um dies zu mildern? Wird es ausreichen, fsck.vfat beim Start automatisch auszuführen?

Noch ein paar Infos:

  • Die Karte ist vom Benutzer nicht als entfernbar anzusehen. Es ist als interne Festplatte zu verstehen. Alle darauf gespeicherten Daten können über das Netzwerk oder ein USB-Laufwerk heruntergeladen werden, und das System löscht automatisch die ältesten Einträge. Das bedeutet, dass es in einem durchschnittlichen PC nicht lesbar sein muss.
  • Das System unterstützt derzeit FAT, Yaffs und Jffs2. Das Hinzufügen anderer Dateisysteme zum Kernel ist möglich, aber wenn andere Möglichkeiten vorhanden sind, würden wir sie zuerst bevorzugen.
  • Das Schreiben kann bei Bedarf auch für einige Minuten ohne Datenverlust unterbrochen werden.
  • Teilweiser Datenverlust oder geringfügige Beschädigung sind akzeptabel. Ein vollständiges Stoppen der Protokollierung ist nicht möglich.
  • Die Ausschaltereignisse sind die meiste Zeit völlig unvorhersehbar.
  • Das System läuft mit ARM9, 200 MHz, 64 MB RAM und 32 MB internem Flash und verbraucht den größten Teil der CPU-Leistung für seine primäre Rolle. Berücksichtigen Sie dies, wenn Sie an ausgefallene ressourcenintensive Lösungen denken.
SF.
quelle
3
Sie haben es wahrscheinlich schon in Betracht gezogen, aber es ist erwähnenswert für andere, die sich mit dieser Frage befassen: Die meisten Flash-Karten (SD, CF usw.) haben nur eine Schreibtoleranz von einigen tausend Zyklen (bestenfalls). Die Verwendung normaler Karten für die Datenprotokollierung oder ähnliche Aufgaben wird sie letztendlich töten (und dies normalerweise in kürzerer Zeit als gedacht).
Chris S
@ChrisS: Da dies meistens nur Anhänge sind und die ältesten durch die neuesten Einträge ersetzt werden, hat dies einen sehr guten Lastausgleich für Schreibvorgänge, insbesondere, dass es Monate dauert, bis die Karte gefüllt ist. Das Problem kann mit dem FAT-Eintrag selbst sein, aber ich vertraue darauf, dass der Controller etwas Sinnvolles daran macht.
SF.
Was kostet es, wenn Ihr Gerät ausgeschaltet ist und diese Daten nicht auf die Karte schreibt? Wenn die Diagnosedaten nicht geschrieben werden, verlieren Sie dann viel Zeit oder Geld oder haben einfach keine Protokolldateien?
Freiheit
1
@Freiheit: Ein eher obskures, wenn auch nicht ganz unwichtiges Feature, das für die Kunden vermarktet wird, fehlt, und falls jemand anderes es wirklich schlimm macht und Sündenbock sucht, verlieren wir eine der Verteidigungsmöglichkeiten vor Gericht. Daten vor einem wahrscheinlichen Ausfall sind am wertvollsten - ein Beweis dafür, dass das Gerät bis zum letzten Moment ordnungsgemäß funktioniert hat und nicht, dass die Ereignisse aufgrund eines eigenen Fehlers zur Katastrophe eskaliert sind.
SF.
Notiert. Sie erfassen eindeutig Daten für etwas Wichtiges!
Freiheit

Antworten:

8

Sie können den block2mtdTreiber verwenden, um die Transaktionsdateisysteme jffs2 oder yaffs (2) zu verwenden, die Sie anscheinend an anderer Stelle für Ihre SD-Karte verwenden. Dies würde Ihr Problem des Datenverlusts oder der Beschädigung des Dateisystems beim Ausschalten lösen.

Dies kann jedoch zu anderen Problemen führen. Da die SD-Karte wahrscheinlich über eigene Mechanismen zur Verschleißausgleichung und Sektor-Neuzuordnung verfügt, können diese die Implementierung von jffs2 und yaffs beeinträchtigen, um genau dasselbe zu tun, was die Lebensdauer oder die Leistung Ihrer SD-Karte verringert. Wenn dies kein Problem ist, sollte es sich lohnen, es zu versuchen.

the-wabbit
quelle
Mit ein oder zwei Monaten zum Füllen einer 2-GB-SD-Karte sollte es kein Problem sein, die Verschleißgrenze auch bei vollständig zufälligem Lastausgleich zu erreichen.
SF.
5

Überprüfen Sie, ob der von Ihnen verwendete Kernel das Flush- und / oder Sync-Flag für vfat unterstützt (es scheint, dass einige Versionen dies ignorieren, seien Sie vorsichtig!).

Oder verzichten Sie einfach ganz auf das Dateisystem, wenn alles in eine Datei (wie bei einem unformatierten Protokolldatenstrom!) Oder in einige Dateien mit fester Größe (Partitionen verwenden;) gehen kann.

Rackandboneman
quelle