Wir arbeiten an einem kleinen eingebetteten Linux-System (2.6.35-ish) mit einem kleineren internen NAND-Gerät für Betriebssystem und Anwendungen (250-500 Meg) und einer SD-Karte mit 8 GB SDHC-SD-Karten für Daten.
Die Stromversorgung des Geräts kann jederzeit unterbrochen werden.
Das System muss Daten auf SD-Karten speichern. Diese Daten sind ziemlich wichtig ... es ist der ganze Zweck des Systems. Die Systeme sind normalerweise an entfernten Standorten vollständig von jedem Netzwerk getrennt, und die Daten werden alle 4 bis 8 Wochen über das Sneakernet abgerufen.
Derzeit haben wir einfach VFAT auf den SD-Karten. Dies war hauptsächlich so, damit die ersten Testclients Daten problemlos manuell auf ihre Win7-Laptops kopieren konnten.
Jetzt mache ich mir jedoch Sorgen, dass es nur eine Frage der Zeit ist, bis ein Stromausfall zur falschen Zeit zu Datenverlust führt.
Wie kann ein solches System am besten konfiguriert werden, um Datenverlust zu vermeiden? JFFS2 klingt wie das, was ich mir wünschen würde, wenn es darum geht, wie Daten geschrieben werden (und die Leistungsanforderungen sind überhaupt nicht hoch), aber es klingt ziemlich klobig, block2mtd usw. zu verwenden. Ich bin mir auch nicht sicher, wie die Verschleißnivellierung der Karte interagieren wird damit.
Was ist der beste Weg, dies zu tun?
BEARBEITEN
Ich denke jetzt darüber nach, das Dateisystem VFAT zu verlassen und Dateien in Tagesgröße gleichzeitig zuzuweisen, die mit 0xFF gefüllt sind, was die Gefahr von Stromausfallfehlern erheblich begrenzen sollte. Ich konnte dann nur Datensätze innerhalb dieser vorgefertigten Blöcke anhängen, und hoffentlich sind die SD-Karten nicht so dumm, dass sie Schreibvorgänge in 0xFF-Regionen löschen / tragen würden.
Ich kann noatime verwenden, aber gibt es ein VFAT-Nomtime-Äquivalent, um Schreibvorgänge in das geänderte Zeitfeld zu verhindern? Ich brauche eine Möglichkeit, um Metadatenaktualisierungen überhaupt zu verhindern, bis eine neue Tagesdatei erstellt wird.
BEARBEITEN 2
Jemand vom Elektronik-Stack-Austausch hat mich daran erinnert, dass es auch ECC-Daten auf NAND gibt, sodass die Notwendigkeit eines Löschvorgangs nicht verhindert werden kann.
Wäre JFFS2 über block2mtd in dieser Situation angemessen?
BEARBEITEN 3
Es ist schlimmer als ich dachte. Die SD-Karten, die ich habe, löschen die Datenblöcke, selbst wenn Sie genau den gleichen Inhalt auf die Festplatte schreiben. Die Löschblöcke sind 64 KB groß und zu groß, um Schreibvorgänge vollständig zu verzögern. Ich speichere bis zu 128 KB Daten in NAND-Flash (von dem ich das Schreibverhalten steuern kann) in einer Art Journal und schreibe dann 128 KB-Blöcke in eine 128 KB-ausgerichtete Datei in einer VFAT-Partition auf der SD-Karte (in Fall andere SD-Karten haben 128KB Löschblöcke).
sync
Befehl nach jedem Schreiben auf die SD-Karte. Die Bits werden sofort geschrieben, nachdem Sie sie geändert / erstellt haben, ohne sie im RAM zu speichern, sodass Ihre Änderungen mindestens auf der Karte gespeichert sind und würde nicht durch den Stromausfall gehen.
sync
Dies würde die Sache wahrscheinlich noch schlimmer machen, da dies den Zeitanteil erhöht, in dem sich die Metadaten während der Aktualisierung befinden.