Forum: Mikrocontroller und Digitale Elektronik Raspberry Pi 3, SD Card Korruption verhindern


von Nor (Gast)


Lesenswert?

Werde mich kurz halten, möchte Informationen alle xyz Milli Sekunden 
speichern, schreiben und lesen etc... jetzt frage ich wie hoch die 
Gefahr von SD Card Korruption?

von STK500-Besitzer (Gast)


Lesenswert?

Nor schrieb:
> Werde mich kurz halten, möchte Informationen alle xyz Milli
> Sekunden
> speichern, schreiben und lesen etc... jetzt frage ich wie hoch die
> Gefahr von SD Card Korruption?

Wenn du immer an der selben Stelle Schreibst, wird sie das vermutlich 
nicht mögen.
Brauchst du die Daten dauerhaft (auch nach dem Ausschalten)? Wenn nicht, 
richte dir eine RAM-Disk ein.

von Stefan F. (Gast)


Lesenswert?

Nor schrieb:
> möchte Informationen alle xyz Milli Sekunden speichern, schreiben

Dann brauchst du eine Festplatte oder wenigstens eine "richtige" SSD. SD 
Karten sind dazu nicht geeignet.

> jetzt frage ich wie hoch die Gefahr von SD Card Korruption?

Sehr hoch.

von Jim M. (turboj)


Lesenswert?

Nor schrieb:
> alle xyz Milli Sekunden
> speichern, schreiben und lesen

Das geht mit SSD aber nicht mit SD Karten. Letztere tauchen schon mal 
>300ms zum Schreiben eines Blocks ab.

Außerdem vertragen SD Karten nicht allzuviele Schreibzyklen.

von my2ct (Gast)


Lesenswert?

Nor schrieb:
> Werde mich kurz halten ...
Die Zeit für vollständige Sätze solltest du dir trotzdem nehmen.

von Dieter (Gast)


Lesenswert?

Lege dazu zwei extra-Partitionen an. Eine für Swap und eine für die 
Daten. Wenn die Karte korrumpiert, sind die bisherigen Daten meist zu 
retten.
Um ab und zu eine Sicherungskopie auf ein anderes Medium, kommst Du aber 
nicht herum.

von Stefan F. (Gast)


Lesenswert?

Dieter schrieb:
> Lege dazu zwei extra-Partitionen an

Halten SD Karten die Daten der Partitionen voneinander getrennt? Ich 
hätte erwartet, dass das Wear Levelling sie letztendlich wieder schön 
durcheinander würfelt.

von Jobst Q. (joquis)


Lesenswert?

STK500-Besitzer schrieb:
> Brauchst du die Daten dauerhaft (auch nach dem Ausschalten)? Wenn nicht,
> richte dir eine RAM-Disk ein.

Genau. Würde ich auch empfehlen. Alles was nur kurzzeitig gebraucht 
wird, auf Ramdisk. Bringt auch noch einen deutlichen 
Geschwindigkeitsvorteil.

von Nor (Gast)


Lesenswert?

STK500-Besitzer schrieb:
> Wenn du immer an der selben Stelle Schreibst, wird sie das vermutlich
> nicht mögen.
> Brauchst du die Daten dauerhaft (auch nach dem Ausschalten)? Wenn nicht,
> richte dir eine RAM-Disk ein.

Tatsächlich sollten die Daten bestehen nach einem Neustart. Sie werden 
hauptsächlich zur Auswertung und Visualisierung verwendet. mfg

von Alexander K. (Gast)


Lesenswert?

Die SSD überleben auch nicht.

Wieso trickst du nicht einfach. ??? Legen die Daten in einen Datenblock 
im Ram ab. Und schreibe den Datenblock alle X -MINUTEN auf eine SSD.

Was deiner Frage angeht, die kannst du dir ausrechnen sogar. Die 
Hersteller geben alle die maximale Beschreibbarkeit an. Also 10 Std. / 
300 ms = SD TOT.

200 Std. / 300 ms = SSD tot.

Davon abgesehen wage ich zu bezweifeln das die SD / SSD überhaupt so 
schnell ist auf Dauer. Ist halt ne Frage des Datenblocks.

Und Zwischenpuffer ist das nicht machbar. Der Meinung bin ich.

Gruß

   Pucki

von Stefan F. (Gast)


Lesenswert?

Nor schrieb:
> Tatsächlich sollten die Daten bestehen nach einem Neustart.

Alexander K. schrieb:
> Legen die Daten in einen Datenblock
> im Ram ab. Und schreibe den Datenblock alle X -MINUTEN auf eine SSD.

Genau. Ich habe eine Anwendung, die jede Minute ca. 120 Zeichen in eine 
Textdatei auf SD Karte schreibt. Die Karte ist jetzt 1,5 Jahre im 
Einsatz und noch gut.

Vermutlich puffert das Linux die Schreibzugriffe ohnehin. Nur weiß ich 
nicht, wie lange und inwiefern man sich darauf verlassen kann. Mit einem 
Puffer innerhalb der Anwendung würde ich mich wohler fühlen.

von Drago S. (mratix)


Lesenswert?

Nor schrieb:
> Tatsächlich sollten die Daten bestehen nach einem Neustart.

Du könntest auf log2ram aufsetzen (https://github.com/azlux/log2ram). 
Das wird sehr häufig und gerne bei Raspberry bzw. in Verbindung mit 
sdcard genommen. Primär wurde es für das /var/log gedacht. Beim 
Herunterfahren wird es komplett zurückgeschrieben, ebenso beim Start 
komplett eingelesen.

Oder du richtest eine RAM-Disk ein und mountest sie für das 
entsprechende Verzeichnis bzw. eine einzelne Datei.
Stichwort: swap in a file

von Alexander K. (Gast)


Lesenswert?

Stefan ⛄ F. schrieb:
> Genau. Ich habe eine Anwendung, die jede Minute ca. 120 Zeichen in eine
> Textdatei auf SD Karte schreibt. Die Karte ist jetzt 1,5 Jahre im
> Einsatz und noch gut.

Ja, die schreibt mit APPEND-Befehl. Was bedeutet physikalisch wird immer 
DIE NÄCHSTE Speicherstelle belastet. Da klappt das logoweis Jahre lang. 
Irgendwann ist die Karte voll. Die Datei wird gekillt und der 
"Schreibzähler für die Belastung der Karte um ein erhöht".

Das geht klor noch Jahre lang. Aber nur wegen den APPEND-Befehl. Der 
schützt nämlich die anderen Stellen.

Davon abgesehen schreibt du JE Minute und nicht alle 300 mS, was 
bedeutet ca. 200 Schreibzugriffe in einer Minute nicht nur einen.

Expotenziales (oder wie man in der Schule sagte "hochrechnen") führt 
dann nämlich zu gigantischen Werten.

Wenn die SD nun noch wie üblich FAT-32 Formatiert ist .... ;) Packe sie 
gar nicht er aus, schmeiß sie gleich weg oder schicke sie mir ;)

Gruß

   Pucki

von Alexander K. (Gast)


Lesenswert?

Ach so nebenbei. Ich benutzt eine 64 GB (mirco)-SD-Karte in meinen 
DVD-Festplatten-Recorder als Ersatzfestplatte.  Hat mich 16 Euro 
gekostet das Teil. Ich gebe ihr eine Lebensdauer von 1-2 Jahren.

Da rechnet sich prima. Keine Kühlung, Weniger Energieverbrauch und vor 
allen keine Geräusche.

Das alles bezahle ich halt mit der niedrigeren Lebensdauer der Karte.

Gruß

   Pucki

von Zombie (Gast)


Lesenswert?

Ich häng' mich mal mit an den Thread. Hat jemand Erfahrung mit diesen 
SD-Karten? 
https://www.westerndigital.com/products/embedded-removable-flash/surveillance-sd-microsd-cards

bis zu 768TBW klingt nicht schlecht. Ich frage mich, ob das nur bei 
sequenziellem Schreiben gilt, da ausschliesslich Video als 
Anwendungsbereich angegeben ist.

von Hans Dampf (Gast)


Lesenswert?

Alexander K. schrieb:
> Stefan ⛄ F. schrieb:
>> Genau. Ich habe eine Anwendung, die jede Minute ca. 120 Zeichen in eine
>> Textdatei auf SD Karte schreibt. Die Karte ist jetzt 1,5 Jahre im
>> Einsatz und noch gut.
>
> Ja, die schreibt mit APPEND-Befehl. Was bedeutet physikalisch wird immer
> DIE NÄCHSTE Speicherstelle belastet. Da klappt das logoweis Jahre lang.
> Irgendwann ist die Karte voll. Die Datei wird gekillt und der
> "Schreibzähler für die Belastung der Karte um ein erhöht".

Gilt das nur, wenn die 120 Bytes jedesmal angehängt werden oder auch 
wenn die 120 Bytes in einer 120 Byte großen Datei jedesmal überschrieben 
werden (z.B. in C)?

von Alexander K. (Gast)


Lesenswert?

Hans Dampf schrieb:
> Gilt das nur, wenn die 120 Bytes jedesmal angehängt werden oder auch
> wenn die 120 Bytes in einer 120 Byte großen Datei jedesmal überschrieben
> werden (z.B. in C)?

Wenn du überschreibst, wird ja die Zelle neu belastet.

Wenn du anhängst, wird eine "neue" Zelle belastet. Das führt dazu das 
alle Zelle gleichmäßig belastet werden.

Ich wage sowieso zu bezweifeln das SD - Karten so ein guten 
Zellen-Managment haben wie SSD. Da sorgt eine schlaue Elektronik für 
eine gleichmäßige Ausnutzung der Zellen.

Zellen = Speicherzellen

Gruß

   Pucki

von Bleigeel (Gast)


Lesenswert?

Hallo Pucki, du alder Leghatheninker!

von Michael D. (nospam2000)


Lesenswert?

Alexander K. schrieb:
> Ja, die schreibt mit APPEND-Befehl. Was bedeutet physikalisch wird immer
> DIE NÄCHSTE Speicherstelle belastet. Da klappt das logoweis Jahre lang.

Das ist dann doch zu stark vereinfacht. Vielleicht wäre hier etwas 
know-how hilfreich, was tatsächlich passiert, wenn man "ein paar Bytes 
anhängt".

Es gibt Verwaltungstrukturen im Filesystem (z.B. inodes, bitmaps, fat, 
...): welche Blöcke sind benutzt, wann wurde zuletzt geschrieben, wie 
groß ist die Daten, welche Blöcke gehören zur Datei etc. Diese werden 
bei jedem Schreibzugriff aktualisiert und liegen bei einer Datei immer 
auf denselben Blöcken. Die Abnutzung dieser Blöcke ist daher ein 
vielfaches höher als die der eigentlichen Nutzdaten. Deine Strategie 
geht zwar in die richtige Richtung, wird aber ohne weitere Maßnahmen so 
nicht funktionieren.

Dagegen helfen nur Wear-Leveling und bestimmte Flash Filesystem die dies 
mitigieren.

Alternative: man allokiert den Speicher selbst und macht das block 
management selbst. Dazu legt man ganz am Anfang eine große Datei an, man 
verzichtet auf die Aktualisierung der Meta-Daten und sucht sich nach 
einem Neustart die Schreibposition selbst wieder.

Die meisten SD Karten Hersteller machen bei ihren Karten ein Geheimnis 
daraus, ob und falls ja wie gut die verwendeten Wear Leveling 
Algorithmen und das dazu benötigte over-provisioning ist. Von SanDisk 
gibt es verschiedene Qualitäten und die hochwertigen Karten haben sicher 
ein Wear Leveling, bei den billigeren ist das nicht garantiert. Es gibt 
auch spezielle Industrial Varianten die mittlerweile bezahlbar sind.

Dummerweise gibt es bei SD-Karten keinen Trim Befehl wie bei SSDs, d.h. 
die Karte kann nicht wissen, ob einmal beschriebener Block aktuell noch 
benötigt wird. Dies schränkt das Wear Leveling weiter ein.

Ob das offizielle Tools der SD-Card Association zum Formatieren der 
Karten die interne Allocation Table zurücksetzt kann man nur hoffen, 
aber das verwendet ja sowieso niemand.

Ich habe hier 2 Transcend Karten liegen, die nach ca. 2 Jahren nur noch 
lesbar aber nicht mehr beschreibbar sind. Wurden in einem Raspi 
verwendet der ausschließlich einen ntp Server laufen hat verwendet mit 
intensivem ntp Logging, d.h. ca. 5 Logfiles wurden jede Sekunde 
geschrieben.

Mit Sandisk Ultra Karten hatte ich bisher weniger Probleme.

Will heißen: kaufe vernünftige SD Karten, das reduziert die Probleme 
oder noch besser nimm eine SSD, die hat ein gutes wear leveling.

  Michael

: Bearbeitet durch User
von STK500-Besitzer (Gast)


Lesenswert?

Nor schrieb:
> Tatsächlich sollten die Daten bestehen nach einem Neustart. Sie werden
> hauptsächlich zur Auswertung und Visualisierung verwendet. mfg

Wenn dein Gerät auch sauber heruntergefahren wird (was ja eigentlich 
immer so sein sollte, dann könnte man den Inhalt der RAM-Diak abeim 
Runterfahren auf die SD-Karte schreiben. Das müsste mit einem rc-Level 
gehen, oder?

von Frank K. (fchk)


Lesenswert?

Ganz andere Idee: Du benutzt den 40-poligen Header und schließt ein 
externes FRAM oder ein batteriegepuffertes SRAM per SPI oder I2C an und 
benutzt das als temporären Datenspeicher.

fchk

von wendelsberg (Gast)


Lesenswert?

Ich schreibe jede Minute die Daten meiner Haussteuerung auf eine 
Sqlite3-DB auf der Ramdisk /dev/shm. Jeden Tag um 0:01 Uhr werden die 
Daten der letzten 24 Stunden an die Jahres-DB im normalen Filesystem 
angehaengt und die aeltesten Daten von der Ramdisk-DB geloescht. Das 
funktioniert seit Jahren.
Beim Herunterfahren werden die Daten der Ramdisk-DB vorher an die 
Jahres-DB ahgehaengt (sofern sie dort noch nicht vorhanden sind). Beim 
Start wird die Ramdisk-DB mit den Daten der letzten 7 Tage 
wiederhergestellt.

Die Jahres-DB ist ca. 50 MB gross, wenn das Datum den 31.12.erreicht 
hat, die Ramdisk-DB ist etwa 1 MB gross, bei 250 MB Ramdisk kein 
Problem.

wendelsberg

von maler und landstreicher (Gast)


Lesenswert?

steck doch einfach einen usb stick an den raspi, puffer die daten für 
z.b. 30 sekunden und schreib die dann auf den stick.

am raspi (wenn er lange laufen soll) mounte ich / i.a. ro und /var rw 
von einem usb stick.

von Michael D. (nospam2000)


Lesenswert?

maler und landstreicher schrieb:
> steck doch einfach einen usb stick an den raspi

Es gibt mindestens folgende Qualitätsklassen von Flash Speicher mit 
fallender Qualität:
1. SSD
2. SD-Card
3. USB Sticks

Sprich es ist deutlich besser eine SD-Karte als einen USB Stick zu 
verwenden.

  Michael

: Bearbeitet durch User
von Stefan F. (Gast)


Lesenswert?

maler und landstreicher schrieb:
> steck doch einfach einen usb stick an den raspi

Das Problem: Wie bei SD Karten weiss man auch da nie, wie gut das Wear 
Levelling implementiert ist. USB Sticks haben da einen ebenso schlechten 
Ruf. Auch dort gibt praktisch kein Hersteller irgendwelche konkreten 
zahlen an.

von Michael D. (nospam2000)


Lesenswert?

Es gibt z.B. folgende SD-Cards, die für den Zweck geeignet sein sollten:
 - SanDisk MAX ENDURANCE microSD-Karte 32GB (lange Lebensdauer, bis zu 
120.000 Stunden aufnehmen), 16,99 Euro
 - SanDisk High Endurance microSD Karte 32GB (bis zu 20.000 Stunden 
aufzeichnen können), 9,99 Euro

von Stefan F. (Gast)


Lesenswert?

Michael D. schrieb:
> bis zu 120.000 Stunden aufnehmen
> bis zu 20.000 Stunden aufzeichnen

Ich liebe solche Angaben. Das ist so unkonkret - hätte man auch gleich 
weg lassen können.

von Michael D. (nospam2000)


Lesenswert?

Stefan ⛄ F. schrieb:
>> bis zu 120.000 Stunden aufnehmen
>
> Ich liebe solche Angaben. Das ist so unkonkret - hätte man auch gleich
> weg lassen können.

Dann beschwer dich beim Hersteller, dass konkrete Informationen so 
schlecht zu finden sind. Links mit den Datasheets sind gerne gesehen.

Ich nehme die "120.000 Stunden" Aussage als "ist langlebiger als die 
20.000 Stunden Karte vom gleichen Hersteller".

/Edit: Die 20.000h gelten laut einen anderen Prospekt natürlich nur für 
die 256 GB Variante, bei 32 GB bleiben noch 2.500h übrig :-)
https://documents.westerndigital.com/content/dam/doc-library/en_us/assets/public/sandisk/product/memory-cards/high-endurance-uhs-i-microsd/data-sheet-high-endurance-uhs-i-microsd.pdf

  Michael

: Bearbeitet durch User
von Jack V. (jackv)


Lesenswert?

Ich würd ’ne ganz andere Karte nehmen. Diese sind offensichtlich nur für 
sequentielles Schreiben bei einer festen Bitrate gedacht; bei Karten für 
den allgemeinen Gebrauch wird besser die Datenmenge angegeben, die 
typischerweise geschrieben werden kann. Natürlich gibt’s da auch 
Faktoren, die’s teils um das Mehrfache daneben liegen lassen (1GB am 
Stück geschrieben wird die Karte erheblich weniger belasten, als 1000 
1MB-Files hintereinander), aber es ist zumindest sinnvoller, als ’ne 
„Aufzeichnungsdauer“ ohne weitere Parameter – die sagt mal nämlich 
überhaupt nix.

Michael D. schrieb:
> Sprich es ist deutlich besser eine SD-Karte als einen USB Stick zu
> verwenden.

Das entspricht nicht meiner Erfahrung. Tatsächlich kann’s heute gar 
vorkommen, dass man einen Stick aufmacht, und eine μSD-Karte fest 
eingebaut vorfindet. Bei billigen Anbietern aus Shenzen Hinterhof kann’s 
auch passieren, dass man im Stick Speicherchips findet, die aus alten 
Smartphones stammen. Auch gibt’s Sticks, deren Controller ähnliche 
Eigenschaften aufweist, wie der eines SSDs – so pauschale Aussagen sind 
jedenfalls in der Regel falsch.

von Michael D. (nospam2000)


Lesenswert?

Jack V. schrieb:
> Ich würd ’ne ganz andere Karte nehmen.

Mach's nicht so spannend, nenn einfach den Hersteller, Typ und die Daten 
dazu.

  Michael

von Stefan F. (Gast)


Lesenswert?

Michael D. schrieb:
> Mach's nicht so spannend, nenn einfach den Hersteller, Typ und die Daten
> dazu.

Das Problem ist: wenn man nach zwei Jahren sicher sagen kann "Ja, die 
ist gut, hat sich bewährt", kann man sie schon nicht mehr kaufen.

von Jack V. (jackv)


Lesenswert?

Michael D. schrieb:
> Mach's nicht so spannend, nenn einfach den Hersteller, Typ und die Daten
> dazu.

Suche ich bei konkretem Bedarf heraus – da weiß ich dann auch, worauf 
ich Wert lege. Nein, die Aussage war, dass ich, wenn ich wahlfrei 
schreiben möchte, keine Karte hernehmen würde, die offensichtlich auf 
sequentielles Schreiben bei einer gegebenen (aber nicht direkt 
angegebenen) Schreibgeschwindigkeit ausgelegt ist.

von Jobst Q. (joquis)


Lesenswert?

Hans Dampf schrieb:
> Gilt das nur, wenn die 120 Bytes jedesmal angehängt werden oder auch
> wenn die 120 Bytes in einer 120 Byte großen Datei jedesmal überschrieben
> werden (z.B. in C)?

Daten, die immer wieder überschrieben werden, sind am besten auf einer 
Ramdisk aufgehoben, egal, wieviele Bytes. Wenn sie nach einem Neustart 
gebraucht werden, kann man sie beim Herunterfahren oder in bestimmten 
Zeitabständen auf die SD kopieren.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.