Verwenden Sie SD-Karten sicher, wenn der Strom jederzeit ausfallen kann

10

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).

darron
quelle
1
"Hoffentlich sind die SD-Karten nicht so dumm ..." <--- ROFLOL. Unwahrscheinlich!
Derobert
Bis Sie eine vollständige Lösung für Ihr Problem gefunden haben, verwenden Sie den syncBefehl 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.
Hanan N.
syncDies würde die Sache wahrscheinlich noch schlimmer machen, da dies den Zeitanteil erhöht, in dem sich die Metadaten während der Aktualisierung befinden.
Ben Voigt

Antworten:

5

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.

  1. Nehmen Sie eine trivial kleine Karte an - 3 (Flash-) Blöcke. Block 1 hat mehr Schreibvorgänge als 2 oder 3 erhalten. Ich werde die physischen Blöcke nach Nummer und die logischen Blöcke A, B, C nach Buchstaben nennen. Im Moment ist A = 1, B = 2, C = 3.
  2. Sie schreiben an Block A. SD-Karte ist wie Aha! Wir brauchen hier eine Verschleißnivellierung, sonst wird sich Block 1 vor 2 und 3 abnutzen. Er beschließt, Block 1 und 2 zu tauschen.
  3. Es liest Block 1 in die RAM-Position i (auf der SD-Karte, nicht im System-RAM). Es aktualisiert den Teil, den Sie ändern möchten.
  4. Es liest Block 2 in die RAM-Position ii
  5. Es löscht Block 1
  6. Es schreibt die RAM-Position ii in Block 1.
  7. Es aktualisiert die Zuordnungstabelle auf B = 1
  8. Es löscht Block 2.
  9. Es schreibt die RAM-Position i in Block 2.
  10. Es aktualisiert die Zuordnungstabelle auf A = 2

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.

derobert
quelle
1
Diese Geräte müssen viele Jahre in relativ rauen Umgebungen leben. Wenn sie installiert sind, werden sie in verschiedene Länder geliefert, für die wir lieber keine Batterien qualifizieren müssen. Wir würden wahrscheinlich MMC / SD fallen lassen und unsere eigene NAND-Flash-Lösung bauen, bevor wir einen Akku verwenden.
Darron
Nun, in unserem Fall läuft die Lösung "Fix the 'Power kann jederzeit unterbrochen werden" darauf hinaus, "zu verhindern, dass Lkw-Fahrer hinter dem Lenkrad einschlafen und in unsere Geräte fahren". "Ein LKW ist hineingestürzt" handelt eigentlich von der häufigsten Art des Ausfalls.
SF.
1
Eine Minute Batteriestrom sollte nicht benötigt werden. Die zum sicheren Aushängen einer SD-Karte erforderliche Energiemenge sollte innerhalb des Bereichs liegen, den ein Kondensator speichern kann.
Ben Voigt
4

Ä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).

Alexios
quelle
Die Frage wurde gestartet, weil ich bereits massive SD-Karten-Beschädigungen bei Ausschaltereignissen bekam. Eigentlich ziemlich oft. Möglicherweise war 1 von 20 Stromausfallereignissen katastrophal, und möglicherweise hat 1 von 4 mindestens EINIGEN Schaden angerichtet. Schließlich habe ich Daten eines Tages auf internem NAND-Flash gespeichert und um Mitternacht (etwa 1 Sekunde) auf SD kopiert. Ich möchte die Dinge in Zukunft verbessern. Ich habe bereits Kappen im Wert von 400 uF auf der Schiene ... anscheinend nicht genug ... Vielleicht wird der Brownout nicht richtig gehandhabt.
Darron
Das ist eine ziemlich hohe Inzidenzrate! Zeit, die Oszilloskopsonden zu holen und dies in Aktion zu sehen, denkt nach. Obwohl es wahrscheinlich ist, dass Sie es in Software umgehen können, besteht der beste Weg in Bezug auf den Stromverbrauch darin, sicherzustellen, dass Sie keine Hardwareprobleme haben. Vielleicht könnten Sie Ihre Wetten absichern und auch auf electronic.stackexchange.com nachfragen ?
Alexios
@darron, welche Lösung haben Sie für Ihr SD-Kartenspeicherproblem gefunden? Schreiben Sie immer noch an NANDFlash und kopieren Sie dann einmal am Tag? Ich habe ein Design mit SD-Karte als Haupt-RFS (kein separates NANDFlash) und sehe Datenbeschädigungsprobleme, sowohl mit als auch ohne plötzlichen Stromausfall.
Fred Basset
4

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)

Dave Kitchen
quelle
3

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.

Rotesmofa
quelle