Es gibt Probleme, die treiben einen gleich zwei Mal zum Wahnsinn: Zuerst, weil man die Lösung ums Verpetzen nicht findet und dann ein zweites Mal – wenn man die Lösung dann doch irgendwann gefunden hat – die Tatsache, dass die Lösung so einfach war, verbunden mit der Frage, warum man da nicht gleicht 'drauf gekommen ist. Mit einem solchen Problem hatte ich kürzlich zu tun – doch der Reihe nach…
In meiner Bayreuther Wohnung betreibe ich schon seit gut drei Jahren einen Raspberry Pi, zunächst ein Model 1B. Viel zu tun hat der Pi dabei nicht. Im Wesentlichen ist das:
- DNS-Server für Wohnungs-LAN
- OpenVPN-Client, um einen VPN-Tunnel zu meinem Heimserver (und dem LAN dahinter) zu bohren
- Eine Wetterstation auslesen und die Daten aufbereiten
- Cacti-Monitoring von sich selbst und ein paar Geräten im LAN
Dennoch haben es insbesondere die letzten beiden Punkte in sich: Die Wetterdaten werden alle 10 Minuten in eine MySQL-Datenbank geschrieben, Cacti schreibt standardmäßig sogar alle 5 Minuten einen ganzen Schwung Daten in eine Vielzahl von RRD-Datenbank-Dateien. Das sorgt in Summe für sehr viele kleine, aber häufig zu schreibenden Datenmengen. Die SD- bzw. microSD-Speicherkarten, die ein Raspberry Pi normalerweise standardmäßig als nichtflüchtiges Speichermedium nutzt, kommen mit diesen „kleinteiligen“ Schreiboperationen offensichtlich nicht besonders gut klar. Denn obwohl ich ausschließlich SanDisk-Speicherkarten einsetze, hielten die SD-Karten im Pi im Schnitt nur ca. 1–1,5 Jahre. Für einen eigentlich „geräuschlos“ gewünschten Serverbetrieb nicht wirklich befriedigend…
Als nun im Mai wieder eine SD-Karte im Pi 1B am Aufgeben war, wollte ich das Problem nachhaltig lösen. Da ein Raspberry Pi Modell 3B auch von einem USB-Gerät booten kann, besorgte ich mir einen solchen und dazu einen USB-Speicher. Ein USB-Stick schied aus, weil ich die ebenfalls für nicht besonders zuverlässig für den angedachten Betriebsfall halte und eine konventionelle USB-Festplatte (HDD) wollte ich wegen der Betriebsgeräusche und des mutmaßlich vergleichsweise hohen Stromverbrauchs nicht haben. Also kaufte ich eine externe SSD mit USB-Anschluss, konkret eine preisgünstige Intenso Portable 1,8″ 128GB.
Grundsätzlich funktionierte das auch, Raspbian ließ sich problemlos installieren und so konfigurieren, dass das System tatsächlich von der SSD lief. Dennoch trat ein merkwürdiges Problem auf: In mehr oder weniger regelmäßigen Abständen, teilweise im Minutentakt, stockte das System und reagierte für ca. 1–2 Sekunden überhaupt nicht mehr. Das war beim Arbeiten in der Shell schon lästig, wurde aber angesichts des oben erwähnten DNS-Servers vollends zum Problem. Denn der reagierte in diesen „Denkpausen“ natürlich auch nicht, was zum Beispiel auch beim Internet-Surfen auf dem Laptop deutlich zu spüren war, denn die DNS-Lookups liefen dann in Timeouts und der Browser zeigte entsprechende Fehlermeldungen. Nach ein wenig Fehlersuche wurde ich schließlich mit iotop fündig: Immer wieder tauchten dort Threads mit dem Namen „kworker“ oder „jbd2/sda“ auf, die kurzfristig 99,99% IO-Load erzeugten. Wirklich erklären konnte ich mir das allerdings nicht, denn obwohl der Raspberry Pi nur einen einzigen USB-2.0-Controller hat, waren die zu lesenden und schreibenden Datenmengen auf der SSD so riesig nun auch wieder nicht. In einer von mir angestoßenen Usenet-Diskussion zu diesem Thema erhielt ich den Rat, es einmal mit einem zwischengeschalteten USB-Hub zu versuchen, um Probleme mit der Energieversorgung der SSD auschließen zu können, doch auch das half nichts. Ein eher zufällig von mir gefundener und in Folge behobener Bug, der für ungebührlich viel Logfile-Einträge (und damit Schreibzugriffe) sorgte, verbesserte die Sache subjektiv auch nur marginal.
Schließlich wurde mir das regelmäßige „Hängen“ des Pis dann doch zu bunt und ich bestellte mir aufs Geratewohl eine neue SSD, diesmal eine TrekStor DataStation picco SSD 3.0 128GB. Das Klonen der alten auf die neue SSD war dank WinImage auch relativ schnell und unkompliziert erledigt. Und was soll ich sagen? Mit der neuen SSD läuft mein Raspberry Pi nun völlig problemlos, „Hänger“ sind seither nicht mehr aufgetreten. 🙂 Als deutliches Zeichen ist auch die System-Load stark zurückgegangen: Lag sie mit der alten SSD noch permanent im Bereich von 0,2 bis 0,3, liegt sie mit der neuen SSD nun bei 0,00 bis 0,05. Der folgende Cacti-Graph illustriert das eindrucksvoll:
Mein Fazit: Ich hätte nie gedacht, dass die verwendete SSD bei solchen Schwachlastanwendungen einen derart massiven Einfluss haben kann. Nun weiß ich es und damit auch, worauf ich in Zukunft zu achten habe, falls ich weitere Raspberry Pis in Betrieb nehmen will. Und natürlich hilft dieser Blogpost hoffentlich auch weiteren geneigten Lesern weiter, die vor demselben Problem stehen. 🙂
0 comments on “SSDs am Raspberry Pi”
1 Pings/Trackbacks für "SSDs am Raspberry Pi"
[…] Betrieb von Datenbanken, selbst mit sehr geringer Last, auf Raspberry Pis mit SD-Karten dahingehend schlechte Erfahrungen gemacht habe, dass die SD-Karten bereits nach ein bis zwei Jahren kaputt gehen, ist diese […]