SD-Karten Verschleiß vermeiden

Wie ihr vielleicht wisst, ist die Raspberry Pi SD-Karte vor allem im Dauerbetrieb einem ziemlichen Verschleiß unterworfen, da jede Speicherzelle  nur eine bestimmte Anzahl von Malen überschrieben werden kann.

Schreibvorgänge in Logs oder laufend weggeschriebene Statusinformationen führen nach ein paar Monaten Dauerbetriebs unweigerlich zu (Datei-)Korruptionen wie sie beim IOC oder der FIFA nicht schlimmer sein könnten 🙂. In geringerem Maße ist das auch bei USB Sticks und in sehr viel geringerem Maße bei SSDs der Fall.


Die interne Verwaltung einer SD-Karte – oder eines USB Sticks und auch einer SSD – sorgt dafür, dass nicht immer dieselben Speicherbereiche neu überschrieben werden, sondern erst einmal nicht benutzte Stellen auf der Karte. Bei größeren Speichermedien steht somit auch mehr Reserve zum Beschreiben zur Verfügung. Eine wenig ausgenutzte 32GB SD-Karte lebt also länger als eine bereits randvolle 8GB Karte.

Es gibt aber auch Stimmen, welche den Speicherkartenverschleiß schlicht in Abrede stellen und behaupten, eine Speicherkarte könnte auch im Raspberry Pi problemlos  (rechnerisch) mehrere hundert Jahre aushalten. Wie dem auch sei – bei mir gehen die SD Karten im Pi nach spätestens zwei Jahren über den Jordan. Unerklärliche Lesefehler, Abstürze und so weiter. Generell gilt aber: je größer, desto langlebiger.

Speicherkorruption können wir aber sehr viel effizienter vermeiden, indem wir  laufende und sich oft ändernde Statusinformationen, Flags und temporäre Dateien nicht auf die SD Karte sondern auf eine Art RAMdisk schreiben. Die RAMdisk liegt im Arbeitsspeicher des Pi und unterliegt keinem Verschleiß. Dazu legen wir z.B. das Verzeichnis /tmp in den Arbeitsspeicher. Allerdings ist es wichtig zu wissen, dass Dateien im RAM beim Ausschalten oder einem Neustart verloren gehen.

Ich lege z.B. die Rohdaten meiner Webcam in die RAMDisk, da die Bilddatei anschließend verändert und auf einen zentralen Webserver hochgeladen wird. Die Rohdaten brauche ich anschließend nicht mehr.

Das geht, indem ihr die fstab – das ist die die File System Table – editiert,

sudo nano /etc/fstab

Das sieht bei meiner Webcam dann so aus:

Nun könnt ihr /tmp (und natürlich auch andere Verzeichnisse) ins RAM legen. Dazu am Ende der fstab folgenden Eintrag vornehmen:

Nach dem nächsten Start wird das Verzeichnis im Arbeitsspeicher angelegt. Das Schöne an tmpfs ist, dass nur der Platz reserviert wird, der tatsächlich benötigt wird. Auch wenn wie oben die maximale Größe mit 100MB angegeben ist, sind es meist nur wenige Byte, die wir für ein Statusfile oder eine temporäre Datei brauchen.

Logfiles in den Arbeitsspeicher

Nun könnte man auf die Idee kommen, einfach auch das sehr beanspruchte Log Verzeichnis /var/log ins RAM zu verlegen. Das funktioniert nur teilweise, denn einige Applikationen, wie z.B. der der Lighttpd (Lighty) Webserver weigern sich dann, zu starten.

Im deutschsprachigen Raspberry Pi Forum gibt es aber eine hervorragende Anleitung von der „Raspberry Pi Legende“ Meigrafd, wie man das doch hinbekommt:

https://forum-raspberrypi.de/forum/thread/4046-var-log-in-eine-art-ramdisk-auslagern-weitere-optimierungen-bezgl-logs/

Für Raspbian Jessie und neuer noch die Hinweise unter dem Posting https://forum-raspberrypi.de/forum/thread/4046-var-log-in-eine-art-ramdisk-auslagern-weitere-optimierungen-bezgl-logs/?postID=208650#post208650 beachten.

Weitere Hinweise

  • Es können nur Verzeichnisse ins RAM verlagert werden, die es auch gibt. Existiert euer gewünschtes Verzeichnis noch nicht, müsst ihr es mit

    anlegen. Den Sudo werdet ihr für die meisten Verzeichnisse brauchen, die nicht unter eurem Homedirectory liegen.
  • tmpfs legt immer leere Verzeichnisse im RAM an. Enthält das Verzeichnis, das ihr ins RAM verlagern wollt, bereits Daten, sind diese nach dem Hochladen nicht mehr zugänglich, da der Pfad zum Verzeichnis ja ins RAM "umgebogen" wurde. Die Daten sind aber immer noch vorhanden.
  • Mit dem size= Parameter legt ihr die maximale Größe des Verzeichnisses fest. Bis zu diesem Wert "atmet" das Verzeichnis. Beachtet aber, dass euch unter Umständen zu wenig Arbeitsspeicher für andere Anwendungen zur Verfügung steht, wenn ihr sehr viele Daten im RAM ablegt. Gerade beim Raspberry 1A (256MB Arbeitsspeicher) oder Raspberry 1B (512MB) kann da schnell Schluss sein.
  • Bei manchen Distributionen ist das /tmp Verzeichnis von Haus aus ins RAM verlagert. Feststellen könnt ihr das mit dem Kommando df . Das sieht das z.B. so aus:

    Wenn in der linken Spalte tmpfs steht, ist das Verzeichnis ins RAM ausgelagert.

Schreibe einen Kommentar

Ich freue mich über Lob und Kritik.
Falls du Probleme mit der hier vorgestellten Anleitung hast und nicht weiter kommst:
Bitte das Problem oder die Fehlermeldung(en) möglichst genau beschreiben, auch an welcher Stelle (z.B. in welchem Node oder Befehl) und unter welchen Umständen der Fehler auftritt.
Gerne kannst du mir auch ein Mail schreiben. Die Adresse findest du im Impressum.
Ich gebe mir viel Mühe, meinen Lesern weiterzuhelfen. Je konkreter du bist, desto einfacher und schneller kann ich versuchen zu helfen.
Deine E-Mail-Adresse wird nicht veröffentlicht.
Erforderliche Felder sind mit * markiert