{"id":722,"date":"2017-08-24T10:25:00","date_gmt":"2017-08-24T08:25:00","guid":{"rendered":"https:\/\/chriskrz.selfhost.bz\/?p=722"},"modified":"2025-06-04T18:23:30","modified_gmt":"2025-06-04T16:23:30","slug":"sd-karten-verschleiss-vermeiden","status":"publish","type":"post","link":"https:\/\/www.rustimation.eu\/index.php\/sd-karten-verschleiss-vermeiden\/","title":{"rendered":"SD-Karten Verschlei\u00df vermeiden mit tempor\u00e4ren Verzeichnissen"},"content":{"rendered":"<p>Wie ihr vielleicht wisst, ist die Raspberry Pi SD-Karte vor allem im Dauerbetrieb einem ziemlichen Verschlei\u00df unterworfen, da jede Speicherzelle\u00a0 nur eine bestimmte Anzahl von Malen \u00fcberschrieben werden kann.<\/p>\n<p>Schreibvorg\u00e4nge in Logs oder laufend weggeschriebene Statusinformationen f\u00fchren nach ein paar Monaten Dauerbetriebs unweigerlich zu (Datei-)Korruptionen wie sie beim IOC oder der FIFA nicht schlimmer sein k\u00f6nnten \ud83d\ude42. In geringerem Ma\u00dfe ist das auch bei USB Sticks und in sehr viel geringerem Ma\u00dfe bei SSDs der Fall.<\/p>\n<p><!--more--><br \/>\nDie interne Verwaltung einer SD-Karte &#8211; oder eines USB Sticks und auch einer SSD &#8211; sorgt daf\u00fcr, dass nicht immer dieselben Speicherbereiche neu \u00fcberschrieben werden, sondern erst einmal nicht benutzte Stellen auf der Karte. Bei gr\u00f6\u00dferen Speichermedien steht somit auch mehr Reserve zum Beschreiben zur Verf\u00fcgung. Eine wenig ausgenutzte 32GB SD-Karte lebt also l\u00e4nger als eine bereits randvolle 8GB Karte.<\/p>\n<p style=\"padding-left: 40px;\"><span style=\"color: #808080;\">Es gibt aber auch Stimmen, welche den Speicherkartenverschlei\u00df schlicht in Abrede stellen und behaupten, eine Speicherkarte k\u00f6nnte auch im Raspberry Pi problemlos\u00a0 (rechnerisch) mehrere hundert Jahre aushalten. Wie dem auch sei &#8211; bei mir gehen die SD Karten im Pi nach sp\u00e4testens zwei Jahren \u00fcber den Jordan. Unerkl\u00e4rliche Lesefehler, Abst\u00fcrze und so weiter. Generell gilt aber: je gr\u00f6\u00dfer, desto langlebiger.<\/span><\/p>\n<p>Speicherkorruption k\u00f6nnen wir aber sehr viel effizienter vermeiden, indem wir\u00a0 laufende und sich oft \u00e4ndernde Statusinformationen, Flags und tempor\u00e4re Dateien nicht auf die SD Karte sondern auf eine Art RAMdisk schreiben. Die RAMdisk liegt im Arbeitsspeicher des Pi und unterliegt keinem Verschlei\u00df. 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.<\/p>\n<p style=\"padding-left: 30px;\"><span style=\"color: #808080;\">Ich lege z.B. die Rohdaten meiner Webcam in die RAMDisk, da die Bilddatei anschlie\u00dfend ver\u00e4ndert und auf einen zentralen Webserver hochgeladen wird. Die Rohdaten brauche ich anschlie\u00dfend nicht mehr.<\/span><\/p>\n<p>Das geht, indem ihr die fstab \u2013 das ist die die File System Table \u2013 editiert,<\/p>\n<pre class=\"lang:default decode:1 inline:1 \">sudo nano \/etc\/fstab<\/pre>\n<p>Das sieht bei meiner Webcam dann so aus:<\/p>\n<pre class=\"nums:false nums-toggle:false wrap-toggle:false lang:default mark:5-6 decode:true\">proc            \/proc           proc    defaults          0       0\r\n\/dev\/mmcblk0p1  \/boot           vfat    defaults          0       2\r\n\/dev\/sda1\t\/               ext4    defaults,noatime  0       1\r\n# scratch space in RAM\r\ntmpfs    \/mnt\/tmp        tmpfs   noatime,nodev,nosuid,size=5m   0       0\r\ntmpfs    \/var\/www\/snapshot\/scratch        tmpfs   noatime,nodev,nosuid,size=8m   0       0\r\n\r\n\/dev\/mmcblk0p2  \/media\/sdcard   ext4    defaults          0       2\r\n<\/pre>\n<p>Nun k\u00f6nnt ihr \/tmp (und nat\u00fcrlich auch andere Verzeichnisse) ins RAM legen. Dazu am Ende der fstab folgenden Eintrag vornehmen:<\/p>\n<pre class=\"lang:default decode:true\">tmpfs \/tmp tmpfs defaults,noatime,nosuid,size=100m 0 0<\/pre>\n<p>Nach dem n\u00e4chsten Start wird das Verzeichnis im Arbeitsspeicher angelegt. Das Sch\u00f6ne an <em>tmpfs<\/em> ist, dass nur der Platz reserviert wird, der tats\u00e4chlich ben\u00f6tigt wird. Auch wenn wie oben die maximale Gr\u00f6\u00dfe mit 100MB angegeben ist, sind es meist nur wenige Byte, die wir f\u00fcr ein Statusfile oder eine tempor\u00e4re Datei brauchen.<\/p>\n<h3>Logfiles in den Arbeitsspeicher<\/h3>\n<p>Nun k\u00f6nnte 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.<\/p>\n<p>Im deutschsprachigen Raspberry Pi Forum gibt es aber eine hervorragende Anleitung von der \u201eRaspberry Pi Legende\u201c Meigrafd, wie man das doch hinbekommt:<\/p>\n<p><a href=\"https:\/\/forum-raspberrypi.de\/forum\/thread\/4046-var-log-in-eine-art-ramdisk-auslagern-weitere-optimierungen-bezgl-logs\/\" target=\"_blank\" rel=\"noopener noreferrer\">https:\/\/forum-raspberrypi.de\/forum\/thread\/4046-var-log-in-eine-art-ramdisk-auslagern-weitere-optimierungen-bezgl-logs\/<\/a><\/p>\n<p>F\u00fcr Raspbian Jessie und neuer noch die Hinweise unter dem Posting <a href=\"https:\/\/forum-raspberrypi.de\/forum\/thread\/4046-var-log-in-eine-art-ramdisk-auslagern-weitere-optimierungen-bezgl-logs\/?postID=208650#post208650\" target=\"_blank\" rel=\"noopener noreferrer\">https:\/\/forum-raspberrypi.de\/forum\/thread\/4046-var-log-in-eine-art-ramdisk-auslagern-weitere-optimierungen-bezgl-logs\/?postID=208650#post208650\u00a0<\/a>beachten.<\/p>\n<h3>Weitere Hinweise<\/h3>\n<ul>\n<li>Es k\u00f6nnen nur Verzeichnisse ins RAM verlagert werden, die es auch gibt. Existiert euer gew\u00fcnschtes Verzeichnis noch nicht, m\u00fcsst ihr es mit\n<pre class=\"lang:default decode:true\">sudo mkdir \/Pfad\/Verzeichnisname<\/pre>\n<p>anlegen. Den Sudo werdet ihr f\u00fcr die meisten Verzeichnisse brauchen, die nicht unter eurem Homedirectory liegen.<\/li>\n<li>tmpfs legt immer leere Verzeichnisse im RAM an. Enth\u00e4lt das Verzeichnis, das ihr ins RAM verlagern wollt, bereits Daten, sind diese nach dem Hochladen nicht mehr zug\u00e4nglich, da der Pfad zum Verzeichnis ja ins RAM \"umgebogen\" wurde. Die Daten sind aber immer noch vorhanden.<\/li>\n<li>Mit dem\n<pre class=\"lang:default decode:1 inline:1 \">size=<\/pre>\n<p>Parameter legt ihr die maximale Gr\u00f6\u00dfe des Verzeichnisses fest. Bis zu diesem Wert \"atmet\" das Verzeichnis. Beachtet aber, dass euch unter Umst\u00e4nden zu wenig Arbeitsspeicher f\u00fcr andere Anwendungen zur Verf\u00fcgung steht, wenn ihr sehr viele Daten im RAM ablegt. Gerade beim Raspberry 1A (256MB Arbeitsspeicher) oder Raspberry 1B (512MB) kann da schnell Schluss sein.<\/li>\n<li>Bei neueren Releases wie <em>bullseye<\/em> oder <em>bookworm<\/em> ist das \/tmp Verzeichnis von Haus aus ins RAM verlagert. Feststellen k\u00f6nnt ihr das mit dem Kommando\n<pre class=\"lang:default decode:1 inline:1 \">df<\/pre>\n<p>. Das sieht das z.B. so aus:<\/p>\n<pre class=\"lang:default decode:true \">Dateisystem    1K-Bl\u00f6cke  Benutzt Verf\u00fcgbar Verw% Eingeh\u00e4ngt auf\r\n\/dev\/root       30642708 17222384  11840676   60% \/\r\ntmpfs               5120       96      5024    2% \/mnt\/tmp\r\n\/dev\/mmcblk0p1     57288    22272     35016   39% \/boot\r\n\/dev\/mmcblk0p2  15337936  2080060  12584416   15% \/media\/sdcard<\/pre>\n<p>Wenn in der linken Spalte tmpfs steht, ist das Verzeichnis ins RAM ausgelagert.<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Wie ihr vielleicht wisst, ist die Raspberry Pi SD-Karte vor allem im Dauerbetrieb einem ziemlichen Verschlei\u00df unterworfen, da jede Speicherzelle\u00a0 nur eine bestimmte Anzahl von Malen \u00fcberschrieben werden kann. Schreibvorg\u00e4nge in Logs oder laufend weggeschriebene Statusinformationen f\u00fchren nach ein paar Monaten Dauerbetriebs unweigerlich zu (Datei-)Korruptionen wie sie beim IOC oder der FIFA nicht schlimmer sein &hellip; <a href=\"https:\/\/www.rustimation.eu\/index.php\/sd-karten-verschleiss-vermeiden\/\" class=\"more-link\"><span class=\"screen-reader-text\">SD-Karten Verschlei\u00df vermeiden mit tempor\u00e4ren Verzeichnissen<\/span> weiterlesen <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2,11,69],"tags":[84,221,83,86,85,219,220],"class_list":["post-722","post","type-post","status-publish","format-standard","hentry","category-firmware","category-raspbian","category-tips-tricks","tag-hardware","tag-ramdisk","tag-raspbian","tag-sd-karte","tag-speicher","tag-temp-verzeichnisse","tag-tmpfs"],"_links":{"self":[{"href":"https:\/\/www.rustimation.eu\/index.php\/wp-json\/wp\/v2\/posts\/722","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.rustimation.eu\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.rustimation.eu\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.rustimation.eu\/index.php\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.rustimation.eu\/index.php\/wp-json\/wp\/v2\/comments?post=722"}],"version-history":[{"count":1,"href":"https:\/\/www.rustimation.eu\/index.php\/wp-json\/wp\/v2\/posts\/722\/revisions"}],"predecessor-version":[{"id":3538,"href":"https:\/\/www.rustimation.eu\/index.php\/wp-json\/wp\/v2\/posts\/722\/revisions\/3538"}],"wp:attachment":[{"href":"https:\/\/www.rustimation.eu\/index.php\/wp-json\/wp\/v2\/media?parent=722"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.rustimation.eu\/index.php\/wp-json\/wp\/v2\/categories?post=722"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.rustimation.eu\/index.php\/wp-json\/wp\/v2\/tags?post=722"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}