Strategien zum Umgang mit unvorhersehbarer Stromversorgung

15

Ich möchte einen Pi in mein Auto einbauen und damit GPS-Daten aufzeichnen. Welche Strategien (in meinem Programm) kann ich anwenden, um Probleme aufgrund einer Unterbrechung der Stromversorgung beim Schreiben auf die SD-Karte zu minimieren?

Bisher fällt mir ein:

  • Daten speichern und nur zeitweise schreiben
  • Nur schreiben, wenn die Fahrzeuggeschwindigkeit nicht nahe Null ist (dh kurz davor, die Zündung auszuschalten)
  • Schreiben Sie in eine temporäre Datei, die ich mir leisten kann, beschädigt zu haben, und behalten Sie diese dann und wann bei

Ich frage mich, ob es welche gibt

  • Dateisystem-Modi Ich kann die meiste Zeit über die Zeit bleiben, die ein plötzliches Herunterfahren überstehen würde
  • Möglichkeiten, die Wiederherstellung nach einem Stromausfall beim Schreiben zuverlässiger zu gestalten

Natürlich (glaube ich) ist ein gewisser Datenverlust unvermeidlich, aber wie könnte ich ihn minimieren?

Kugelfisch
quelle

Antworten:

3

Auf der Angebotsseite gibt es (mindestens) zwei Möglichkeiten:

  • Viele Autos haben jetzt eine Zubehörsteckdose, die nicht durch Zündung geschaltet wird. Wenn Ihr Auto eine hat, verwenden Sie diese (aber ziehen Sie den Netzstecker, wenn Sie nicht in Gebrauch sind!), Um eine zuverlässige Versorgung zu gewährleisten (auch wenn diese während des Motors abfallen kann) Anlassen)
  • Wenn Sie einen eigenen Stromrichter konstruieren, fügen Sie einen ausreichend großen Reservoirkondensator hinzu, um sicherzustellen, dass die Versorgung lange genug nach dem Abschalten des Fahrzeugs aufrecht bleibt. Sie können auch erkennen, dass das Fahrzeug ausgeschaltet ist (die Fahrzeugversorgung liegt unter einem Schwellenwert), um Stellen Sie sicher, dass Sie nach dem Ausschalten nicht mit dem Schreiben beginnen
Andrew
quelle
2

In Windows Embedded gibt es ein Konzept mit dem Namen Enhanced Write Filters. Sie verwenden es, um Datenverluste durch Stromausfall usw. zu vermeiden. Das Betriebssystem schreibt sie in ein RAM-Overlay. Das Dateisystem wird bei einem Stromausfall nicht beschädigt und Sie können die Daten nur dann in den Speicher "übertragen", wenn Sie dies wünschen.

Ebenso gibt es unter Linux-Betriebssystemen eine Technik, um das Dateisystem intakt zu halten, und Sie können nur dann auf die SD-Karte schreiben, wenn Sie dies wünschen. In dieser Frage wird erläutert, wie Sie ein schreibgeschütztes Dateisystem erstellen und die Änderungen nur dann speichern können, wenn Sie dies wünschen. Dies bedeutet, dass Sie Ihre Option 3 verwenden würden: "In eine temporäre Datei schreiben und bei Bedarf beibehalten". Die Frage verweist auch auf einen Artikel "So erstellen Sie ein schreibgeschütztes Dateisystem". Vielleicht ist das der erste Ort, an dem man anfangen kann!

Sai
quelle
Hat jemand versucht, mit diesem Artikel auf dem PI zu gehen? Es sieht so aus, als würde es eine Menge Anpassung
erfordern
2

Es hängt alles von der Menge der Daten ab, die Sie verlieren möchten. Wenn Sie es sich nicht leisten können, etwas zu verlieren, müssen Sie einen Weg finden, Ihren PI direkt an die Batterie anzuschließen (natürlich mit einer Sicherung), damit er nicht ausgeschaltet wird, wenn die Zündung ausgeschaltet wird.

Andererseits würde eine typische Autobatterie etwa 80 Ah haben und der PI wird zwischen 500 und 1200 mA verbrauchen (je nachdem, ob es sich um ein Modell A oder B handelt), so dass Ihre Autobatterie wahrscheinlich in 2 bis 6 Tagen leer wird. Ich denke also nicht, dass Sie dies für akzeptabel halten.

Wenn Sie es sich immer noch nicht leisten können, Daten zu verlieren, können Sie möglicherweise eine benutzerdefinierte Hardware entwerfen, mit der Sie die Stromversorgung vom PI aus steuern und auch den Zustand der Zündung überwachen können. Wenn die Zündung ausgeschaltet ist, speichern Sie Ihre Daten auf der SD-Karte, fahren das Betriebssystem herunter und schalten als letzten Schritt die Stromversorgung aus. Die Stromversorgung muss auch eingeschaltet sein, wenn die Zündung eingeschaltet ist, damit der PI erneut startet. Das ist alles machbar, aber ein ziemlich großes Projekt.

Wenn es jedoch akzeptabel ist, beim Herunterfahren Daten zu verlieren, entwerfe ich den Daemon, der die GPS-Daten regelmäßig in einer Datei speichert, so, dass er nach jedem Schreibvorgang einen fsync-Aufruf ausführt (um die Daten auf die SD-Karte zu übertragen). Karte). Wenn Sie dies alle paar Sekunden tun (und auch das standardmäßige ext4-Dateisystem für Journaling verwenden), bedeutet dies wahrscheinlich, dass Sie bei jedem Stromausfall nur die letzten Sekunden verlieren.

Bitte beachten Sie, dass Raspbian (zumindest meine Installation) beim Booten kein fsck des Root-Dateisystems enthielt. Sie müssen Folgendes tun, um es bei jedem Mount zu aktivieren:

tune2fs -c 1 /dev/mmcblk0p2

Sie müssen auch die letzte Zeile für das Root-Dateisystem in / etc / fstab so ändern, dass sie eine 1 enthält:

/dev/mmcblk0p2  /               ext4    defaults,noatime,commit=120  0       1
                                                               Change this ^^^^^

Wenn Sie dies nicht tun, ist Ihr Root-Dateisystem möglicherweise von Zeit zu Zeit nicht bootfähig. Wenn Sie also ein Headless-System ausführen, bei dem Sie die Stromversorgung ohne kontrolliertes Herunterfahren ausschalten, ist dies unbedingt erforderlich.

Joppe
quelle
1

Dies sieht nach einer guten Ergänzung aus , die die Autoelektrik für den Pi schonend desinfiziert, den Verlust der Autozündung erkennt, den Pi in der Zwischenzeit mit Strom versorgt und ein Signal an den GPIO-Pin sendet, um ihn anzuweisen, den Pi sicher herunterzufahren .

Scheint zur Zeit leider vergriffen zu sein, kann aber vorbestellt werden.

Mirams
quelle
0

Wenn Sie häufig mit Stromausfällen zu kämpfen haben, kann eine sorgfältige Auswahl des Dateisystems und der Startmethoden (schreibgeschützt, Journal, unbeaufsichtigtes fsck, schnelle Wiederherstellung ..) dazu beitragen, dass das System zuverlässig hochfährt.

Auf der Anwendungsseite sollte die Verwendung bestimmter Datenbanken ( sqlite ?) Beim erneuten Öffnen einen vollständigen Schreib- oder keinen Schreibstatus für die Daten gewährleisten.

Besser wäre es in der Tat , zu vermeiden, dass außer bei Bedarf heruntergefahren werden muss. Bei einem kleineren Controller beobachten Sie häufig die Stromversorgung. Wenn die Stromversorgung ausfällt, haben Sie ein kleines Fenster, in dem Sie Dinge herunterfahren, nichtflüchtige Daten speichern und den Prozessor möglicherweise in den Energiesparmodus versetzen oder stoppen können, bis die Stromversorgung wiederhergestellt ist. Bei einem großen Universalprozessor wie dem PI kann dies eine ziemlich lange Lücke erfordern.

Es kann also hilfreich sein, eine Online-Gangreserve und eine Warnung zu haben, wenn die Hauptversorgung ausfällt. Wenn es fehlerhaft ist, müssen Sie möglicherweise zwischen vorübergehendem Stromausfall (nicht schreiben, den Atem anhalten) und wahrscheinlichem Herunterfahren (Speichern und Aufräumen) unterscheiden.

In einem Auto haben Sie +12/24 V und PI verwendet +5 V, so gibt es Potenzial (heh) für etwas in oder vor dem Konverter. Möglicherweise können Sie vor dem Konverter eine andere 9-12 V-Batterie mit Dioden-ODER-Verknüpfung verwenden , die bei einem Spannungsabfall beispielsweise die Funktion übernimmt. In Anbetracht des relativ hohen Stromverbrauchs muss dieser irgendwie aufgeladen bleiben. Möglicherweise können Sie auch einen Komparator oder einen speziellen Spannungswächter für die Hauptstromleitung anbringen und benachrichtigt werden, wenn die Hauptstromversorgung unterbrochen ist. (Ich weiß nicht sofort, was ein schneller Weg wäre, um einen PI zu signalisieren.)

XTL
quelle
1
Eine verwandte Machtfrage scheint aufgetaucht zu sein: raspberrypi.stackexchange.com/questions/3778/…
XTL