Ich denke über eine Anwendung nach, bei der ein BeagleBone Black, vorzugsweise mit einem der empfohlenen, in eMMC geladenen Debian-Images , von einer 5-V-Quelle gespeist wird, die jederzeit entfernt werden kann. Ich möchte in diesem Fall einen katastrophalen Datenverlust verhindern, auch wenn gerade in eine Datei geschrieben wird. Zumindest möchte ich, dass die BBB bei Rückkehr der Stromversorgung immer noch von eMMC neu starten, das (wahrscheinlich ext4) Dateisystem reparieren und meine Anwendung ausführen kann. Wenn ich die Gewissheit haben kann, dass jede Datei, die ordnungsgemäß geleert wurde, konsistent ist, ist das ideal.
Das Problem, das ich befürchte, ist, dass es bei einem Stromausfall während eines Schreibvorgangs im eMMC zu Datenverlusten in einem unvorhersehbaren Sektor kommen könnte, da ein kürzlich vom eMMC verarbeiteter Sektorschreibvorgang eine Flash-Seitenlöschung und die anderen Sektoren ausgelöst hat diese Seite gehen verloren, und sie gehören (aufgrund des Verschleißausgleichs und der Neuzuordnung von Sektoren innerhalb des eMMC) zu Dateien oder Datenträgern, die kürzlich nicht geschrieben wurden, einschließlich möglicherweise in schreibgeschützten Dateisystemen oder Dateien. Dieses Problem wird hier erwähnt :
Ein Aus- und Wiedereinschalten zum falschen Zeitpunkt kann Daten überall auf der (SD- oder eMMC-)Karte zerstören, egal wo Sie schreiben
und das könnte die Warnung im BBB-Handbuch und hier das rechtfertigen
[Herunterfahren mit dem Netzschalter] hilft auch dabei, eine Kontamination der SD-Karte oder des eMMC zu verhindern.
ebenso wie die knappe Warnung von der scheinbar primären eMMC-Quelle für die BBB
Vermeiden Sie eine Abschaltung während WRITE- und ERASE-Operationen.
Inwieweit kann ein solcher Datenverlust auftreten? Wie lange dauert das Schwachstellenfenster, falls vorhanden?
Gibt es Standardlösungen? Empfehlungen?
Gibt es einen eingebauten Softwaremechanismus dagegen, und wie funktioniert er? Ist der TPS65217C PMIC speziell so programmiert, dass er bei Verlust von VDD_5V, auch bekannt als AC, ein NMI generiert, wie es die Hardware zulässt, und wird es so gehandhabt, dass die laufende eMMC-Schreibaktivität gestoppt wird? Wenn nicht, wie kann ich das wenigstens hinzufügen?
Ist das Stoppen jeglicher eMMC-bezogenen Aktivitäten gut genug, damit das eMMC nach einer gewissen Verzögerung von selbst in einen sicheren Zustand übergeht? Welche Verzögerung?
Was ist mit einem Kondensator oder Supercap (wie Murata DMT3N4R2U224M3DTA0: 0,22 F, 4,2 V, 0,3 Ω) am Batterieanschluss, um eine gewisse Leistungsreserve bereitzustellen?
Gibt es Modi/Einstellungen in der eMMC, um eine Kompromittierung der Schreibleistung/Sicherheit zu konfigurieren? Was sind die Standardeinstellungen, sind sie einstellbar?
Wichtiges Update: Ich habe maßgebliche Informationen in der eMMC-Spezifikation vom März 2010 zur Zuverlässigkeit bei Stromausfall während des Schreibens gefunden :
Im Allgemeinen sollte eine Unterbrechung eines Schreibvorgangs keine Beschädigung vorhandener Daten an irgendeiner anderen Adresse verursachen. Das Risiko, dass während eines Schreibvorgangs die Stromversorgung unterbrochen wird, ist jedoch in verschiedenen Anwendungen unterschiedlich. Außerdem gibt es bei einigen Technologien, die zum Implementieren von eMMC verwendet werden, einen Kompromiss zwischen dem Schützen vorhandener Daten (z. B. Daten, die durch die zuvor abgeschlossenen Schreiboperationen geschrieben wurden) während eines Stromausfalls und der Schreibleistung.
In dieser Quelle folgen viele wertvolle Informationen, einschließlich einer Beschreibung, wie das eMMC erklärt, dass es verspricht (oder nicht), zuvor geschriebene Daten im Falle eines Stromausfalls vor zufälliger Löschung zu schützen, und was wirklich schreibgeschützte Bereiche zu sein scheinen.
Ergänzung: In einem Kommentar wird erwähnt, dass Mobiltelefone schreibgeschützte Dateisysteme in eMMC verwenden, und es ist nicht bekannt, dass diese beschädigt werden. Mobiltelefone haben jedoch einen großen Akku, und das stellt praktisch sicher, dass sie im normalen Betrieb keinen plötzlichen Stromausfall erleiden, und sind daher nicht von dem eMMC-Korruptionsmechanismus betroffen, den ich befürchte.
Hier müssen alle Schichten des Stapels zusammenarbeiten.
Das eMMC-Speichergerät verfügt über einen integrierten Load-Balancer, der mit Stromausfallsituationen elegant umgehen muss. Ich würde erwarten, dass es das tut, indem es vorgibt, dass unvollständig geschriebene Blöcke überhaupt nicht geschrieben wurden.
Das Dateisystem muss Stromverluste zwischen Blockschreibvorgängen bewältigen können. Die Dateisysteme ext3
und erfüllen dies, da sie protokolliert werden und die Reihenfolge der Schreibvorgänge erzwingen, sodass die Journalzugriffe von den tatsächlichen Änderungen des Dateisystems getrennt bleiben.ext4
Der Schwachpunkt in Ihrem Setup ist der Paketmanager, der keine gute Lösung bietet, wenn während eines Paket-Upgrades der Strom ausfällt. Normalerweise sollten Sie immer noch booten können, es sei denn, der Fehler ist genau während des Umbenennens von Dateien nach einer Installation aufgetreten, und die umbenannten Dateien waren wichtige Systemdateien.
Für fast alle Zwecke ist dieses Fenster so klein, dass Sie das Problem ignorieren können. dpkg --configure -a
Sie können es weiter verkleinern, indem Sie und während jedes Bootens ausführen dpkg -iGROEB /var/cache/apt/archives
- diese sollten Sie nach einem unterbrochenen Update auf Kosten einiger Zeit wieder in einen gesunden Zustand versetzen, und sie können keine Fälle behandeln, in denen dpkg selbst oder das Init-System beschädigt wurden infolge.
Zu guter Letzt können Sie in einer Initrd ein Rettungssystem einrichten, das das System überprüft und versucht, es zu reparieren und/oder bei Bedarf neu zu installieren, und dies im Bootloader verankern.
Simulieren Sie diese Schaltung – Mit CircuitLab erstellter Schaltplan
Um die Eingangsspannung zu vergleichen und etwas zu tun, bis die Kappe noch geladen ist
Wenn Sie Ihren Beagle Bone über eine Wechselstromversorgung mit Strom versorgen, die Sie steuern können, können Sie den nicht geglätteten, gleichgerichteten Wechselstrom mit einer kleinen Timer-Kappe an einen der GPIOs anschließen. Wenn der Strom ausfällt, haben Sie genügend Zeit, um einen fsync
oder vielleicht sogar einen Kernel-Halt oder, wenn nichts anderes funktioniert, eine Kernel-Panik auszurufen. Alles, um eine Stromunterbrechung während eMMC-Schreib-/Löschzyklen zu verhindern; Jede reine Softwareunterbrechung wird vom Dateisystemjournal behandelt.
Ich suche diese Methode für ein Projekt, an dem ich arbeite.
Sean Houlihane
schwach
fgrieu
Sean Houlihane