Datenspeicherung bei Stromverlust PI Zero

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Hallo Forum,

    Ich baue gerade einen Datenlogger der verschiedene Messwerte auf einer SD-Karte abspeichert. Wenn das Gerät dann in Reichweite meines Wlans kommt, speichert er die Daten automatisch auf einem Netzwerklaufwerk ab. So weit so gut... Es funktioniert auch alles bestens außer einem kleinen Problem :wallbash:.

    Zero Pi bootet ....es werden Daten in einem Python-Script erfasst und in einer Datei gespeichert... Dann wird aber plötzlich das Gerät ausgeschaltet und die Datei mit den Messwerten bleibt leer.

    Ich nehme an das es daran liegt, dass erst in bestimmten Zeitabständen die Datei wirklich auf die SD gespeichert wird und vorher in irgendeinem flüchtigen Speicher liegt. Gibt es eine Möglichkeit dieses Schreiben zu beschleunigen? Ich habe ein bisschen rumexperementiert und festgestellt dass so ca. alle 30 sec die Daten wirklich in der Datei landen. Wenn ich einen sauberen Shutdown mache geht auch nichts verloren. Ich könnte natürlich aus einer Powerbank oder Kondensatoren eine USV basteln aber das würde alles zu groß machen.

    Gibt es eine Möglichkeit das der Pi diese Zeit bis zum wirklichen Schreiben auf SD umgeht?

    Hoffe habe die Frage einigermaßen verständlich formuliert :shy:. Falls Fragen fragen.

    Ich danke euch schon einmal im voraus!

  • Das sind die Zwischenspeicher (Cache) vom Linux und der SD.

    Wenn Du ein rw-geöffnetes File nach jedem Schreibzugriff wieder schließt, werden die Zwischenspeicher geleert und die Daten ins Filesystem übernommen (samt Journal). Dasselbe passiert, wenn ein (System-)sync ausgeführt wird (was beim shutdown/reboot immer passiert).

    Servus !

    RTFM = Read The Factory Manual, oder so

  • Ah okay, also zu kurzem Verständnis:

    f = open('myfile', 'a')

    f.write('Loggerdaten')

    f.close()

    so sieht es bei mir aus. Die Loggerdaten wurden noch nicht im Filesystem übernommen... also wäre es schlau os.sync zu benutzen um diesen Fehler zu beheben?

    Vielen dank!

  • Dann wird aber plötzlich das Gerät ausgeschaltet ...

    DAS ist etwas, was du nicht machen solltest bzw. absolut vermeiden musst:

    Du hast ja selbst schon festgestellt, dass da noch Daten im Cache sind, die zugehörigen Files (und noch viel, viel mehr) sind im OS geöffnet.

    Wenn in dem Moment, wo Daten auf die SD geschrieben werden der RasPi hart abgeschaltet wird, kann das zu einem korrupten Filesystem auf der SD führen, im schlimmsten Fall kommt der RasPi dann nicht mehr hoch (bootet nicht mehr).

    Im Extremfall kann die SD Schaden nehmen: Wir hatten hier in den vergangenen Wochen gehäuft gemeldete (Total-) Ausfälle von SD-Karten, welche sich dann auch nicht mehr verwenden ließen.

    Sauber runter fahren, da gibt es auch etwas (finde den Link gerade nicht), wie mit einem Taster am RasPi und einem kleinen Script die Kiste runter fährt, ohne dass man da über die GUI oder SSH-Commandline gehen muss.

  • Hallo,

    ich würde sagen, dass die Aussage

    Zitat

    Wenn Du ein rw-geöffnetes File nach jedem Schreibzugriff wieder schließt, werden die Zwischenspeicher geleert und die Daten ins Filesystem übernommen (samt Journal).

    so pauschal nicht stimmt. IMHO bestimmt der IO-Scheduler des Linux-Kernels, wann tatsächlich geschrieben wird bzw. wann der Schreibpuffer des Kernels geleert wird. Man kann dem Scheduler aber sagen, dass grundsätzlich kein Schreibpuffer verwendet werden soll.

    Gruß, noisefloor

  • So ich habe mal ein wenig experimentiert...

    Egal ob ich es mit flush oder buffering versucht habe, es hat nicht funktioniert.

    Bin dann auf eine naja... nennen wir es brachiale Lösung gekommen.

    In rc.local hab ich ein Script laufen lassen das so aussieht:

    Bash
    #!/bin/bash
    while true
    do
    sync
    sleep 1
    done

    Damit funktioniert im worst-case alles und nichts geht verloren.

    Zentris Schalter für shutdown ist eingebaut es ist nur für den Fall der Fälle vorgesehen ;)

    Vielen Dank für eure Hilfe! Wird denke ich nicht das letzte mal sein :P

  • Wieso? Es ändert sich doch nicht die Datenmenge, die geschrieben wird, sondern nur das "wann

    Oh doch, da prinzipbedingt beim Schreiben von Flash Speicher erst ein ganzer Block gelöscht werden muss, bedeutet das im schlechtesten Fall, dies wegen eines einzelnen geänderten Bits zu anstoßen zu müssen.

    Schreibzugriffe können dann nicht mehr zusammengefasst werden - was zugegebenermaßen auch nicht immer klappt, aber die Chance dazu wäre da.

    Grüße, STF

    • Offizieller Beitrag

    Hallo robbe89,

    der verschiedene Messwerte auf einer SD-Karte abspeichert

    meinst Du damit eine externe SD oder meinst Du die Karte auf der das System läuft oder wie darf ich das verstehen? :conf:

    Eine externe Karte könntest Du doch einfach mit der Option sync mounten.

  • Daran denken, dass durch egal welche Methode, die vorgeschlagen wird, viele Schreibvorgänge auf der SD-Karte stattfinden.

    Hier wäre zu überlegen, diese Schreibvorgänge auf ein USB-Stick, der angesteckt wird (mounten über die GUUID) zu verlagern.

    Computer ..... grrrrrr

  • Von was?

    Vom USB-Stick?

    Der ist bei häufigen schreiben 'stabiler', auch kann man ihn leichter austauschen, wenn er wirklich kaputt ist, denn dort liegt nicht das System, das man neu installieren muss.

    Oder das Verwenden der GUUID?

    Damit wird der USB-Stick immer richtig gemountet, egal, als wievielter er erkannt wurde.

    Computer ..... grrrrrr

  • Vom USB-Stick?

    Ja.

    Der ist bei häufigen schreiben 'stabiler'

    Das lese ich immer wieder, habe bis jetzt aber noch keinerlei Beleg dafür gesehen. Hast Du einen?

    auch kann man ihn leichter austauschen, wenn er wirklich kaputt ist, denn dort liegt nicht das System, das man neu installieren muss.

    Das hingegen halte ich für ein gültiges Argument.

  • War mal ein Beitrag in der c't, ca. 1-2 Jahre her...

    Sinngemäß war die Aussage, dass die (Qualitativ) besten NAND-Chips in die SSDs kommen, dann in die CompactFlash + USB-Sticks und der Rest in SD/microSD-Karten.

    Ausnahmen gibt es: Man kann SD/micro-SD-Karten in "Industriequalität" kaufen (teuer), welche höherwertige Chips verwenden.

    Wird auch gemacht, hab ich bei Siemens gesehen... da kostet eine 16GB-SD Karte mal locker 90-150€... soll dann allerdings auch zugesichert lange halten (definierte Umgebungsbedingung (Temperatur/Feuchte) und Schreibleistung (GB/TB pro Jahr) oder Gesamtschreibleistung über definierte Lebensdauer).

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!