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).
quelle
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.Antworten:
Nun, Sie können dies beheben, indem Sie das Problem "Strom kann jederzeit abgeschaltet werden" beheben. Ist es unmöglich, auch nur eine Minute Batteriestrom hinzuzufügen?
Alternativ können Sie möglicherweise zwei SD-Karten verwenden. Schreiben Sie die Daten auf eine Karte, synchronisieren Sie sie, schreiben Sie auf die andere. Jeder Block Ihrer Daten würde eine Prüfsumme und eine Blocknummer benötigen, aber selbst bei einigen ziemlich unglücklichen Stromausfällen sollte eine der Karten richtig sein.
Ihr Hauptproblem wird die Verschleißausgleichung der SD-Karten sein, die AFAIK vom Kartenhersteller abhängt (und möglicherweise sogar vom Stapel, sie können ihn jederzeit ändern). Es geht wahrscheinlich nicht richtig mit Stromausfall um. Und je nachdem, was es tut, bedeutet dies möglicherweise nicht nur, dass der Block, in den Sie schreiben, beschädigt wird.
Natürlich ist "Aktualisieren der Zuordnungstabelle" nicht immer trivial. Und die Reihenfolge von 5 bis 10 kann unterschiedlich sein (wenn sie alle vollständig sind, spielt es keine Rolle, natürlich müssen die Löschungen vor dem Schreiben erfolgen). Wenn jedoch ein Stromausfall auftritt, kann nicht nur A (wie erwartet) beschädigt sein, sondern auch B. Oder wenn während eines Mapping-Updates ein Stromausfall auftritt, wer weiß, welche Art von Beschädigung dies verursachen wird.
quelle
Ähnliches wurde in electronic.stackexchange.com besprochen: Wie schütze ich die SD-Karte vor unerwarteten Stromausfällen?
Eine Seitwärts Antwort , die in arbeitet Tandem mit Software - Lösungen ist zu Blick auf der Hardware (es war eine Frage auf ESE darüber zu, aber ich kann es jetzt nicht finden, es ist nicht streng über SD - Karten war, nur um Geräte Macht zu verlieren und wie man dies erkennt und darauf reagiert).
Die Kurzgeschichte lautet: Sie haben möglicherweise keinen Batteriestrom, aber Ihr Netzteil verfügt über einige ziemlich große Kondensatoren, um die Versorgung zu glätten. Grundsätzlich geht der Strom nicht einfach aus. Die Spannung nimmt ab. Es gibt wahrscheinlich einen Brown-Out-Schutz-IC / Schaltkreis, der das RESET-Signal in Ihrem eingebetteten System aktiviert, wenn die Spannung unter einen bestimmten Punkt fällt. PC-Motherboards haben diese ebenfalls und reagieren auf das 'POWEROK'-Signal vom Netzteil. Dies bedeutet, dass der Computer bei Stromausfall einige Millisekunden lang gewaltsam angehalten wird, bevor die Spannung unter sichere Werte fällt. Während dieser Zeit sind Peripheriegeräte wie SD-Karten immer noch eingeschaltet, es werden jedoch keine Transaktionen mehr vom Computer ausgeführt.
Es ist sehr wahrscheinlich, dass eine SD-Karte genügend Zeit hat, um ausstehende Transaktionen einschließlich Verschleißausgleich abzuschließen, bevor der Strom ausfällt. Wenn Sie Ihr Netzteil mit einem ausreichend großen Kondensator verbessern oder einen in der Nähe der SD-Karte verwenden, können Sie dies sicherstellen. Sie können jedoch jederzeit mit Ihrer Plattform experimentieren. Es ist sehr wahrscheinlich, dass es genügend Zeit für die Stromversorgung behält.
Wenn der Hardware-Aspekt des Problems kein Problem darstellt, können Sie nur die Software lösen. Deroberts Ideen , zwei Karten für Redundanz zu verwenden, sind nicht schlecht, und die Verwendung eines Standard-Dateisystems wie VFAT birgt weniger das Risiko, die Verschleißausgleichsalgorithmen der Karte zu verwirren.
Wie auch immer, es könnte gut sein, dass Sie kein so großes Problem haben. Angenommen, ein Block auf Ihrer Karte kann 100 Schreibvorgänge überstehen (konservativ - aber versuchen Sie, Karten von guter Qualität zu erhalten!), Und wenn Sie 8-GB-Karten verwenden, haben Sie 800 GB geschrieben, bis der erste Block stirbt (statistisch gesehen natürlich).
quelle
Wir hatten ein Problem mit unserem SD, ext2-Root-Dateisystem, das bei einem unerwarteten Stromausfall beschädigt wurde. Zunächst wird das System mit einem schreibgeschützten Root-Mount ausgeführt. Da wir beschreibbaren Speicher benötigten (aber keine Datenprotokollierung), haben wir eine zweite Partition als beschreibbar eingerichtet. Um den FS-Schaden bei einem unerwarteten Stromausfall zu minimieren, haben wir dies zu einer ext3-Partition gemacht, obwohl dies mindestens doppelt so viele physische Schreibvorgänge auf die Karte verursacht. Diese Kombination (aber ich gebe zu, dass unsere zweiten Partitionsschreibvorgänge im Vergleich zu einem Datenlogger selten sind) scheint problemlos zu funktionieren. Bisher. (Systeme für ca. 30 Monate in professionellen Einrichtungen installiert)
quelle
Für die Datensicherheit in einer Umgebung mit der Möglichkeit von Stromausfällen und allgemeiner Datensicherheit sollten Sie noch mehr Punkte berücksichtigen.
VERWENDEN SIE KEINE MLC-Zellen zur Speicherung, nur SLC haben eine ausreichende Datenaufbewahrungszeit. Dann können diese SLC-Karten eine intelligente Firmware haben, einige können unter keinen Umständen durch Stromausfall beschädigt werden. Sie erkennen den Stromausfall durch Messen und stellen sicher, dass der letzte Block vollständig geschrieben ist.
Diese Karten sind teurer und etwas langsamer als die MLC-Zellen. Siehe Anbieter wie swissbit für Karten.
quelle