Startseite>Raspbian im Read-only-Modus
Aus Raspberry Pi Geek 08/2018

Raspbian im Read-only-Modus

© Anke van Wyk, 123RF

Finger weg!

Bernhard Bablok

Mit einem Read-only-Dateisystem schützen Sie die SD-Karte vor dem Altern durch Schreibvorgänge. Beim Aufsetzen gilt es, einige wichtige Punkte zu beachten.

Seit den frühen Zeiten des Computers waren Stromausfälle gefürchtet, denn das abrupte Abschalten des Stroms führte oft nicht nur zu Datenverlust, sondern auch zu defekten Systemen. Des Übels Wurzel sind die langsamen Schreibvorgänge auf den Datenträgern, weshalb Betriebssysteme diese eine Weile puffern, bevor sie die Daten am Stück wegschreiben. Fällt der Strom vor oder während des tatsächlichen Schreibens der Daten aus, gehen diese unwiederbringlich verloren.

Hinzu kommt das Problem der sogenannten Metadaten. Dateinamen, Berechtigungen, Adressen der physischen Datenblöcke einerseits und der eigentliche Inhalt (abgelegt in den Datenblöcken) andererseits landen nicht zum selben Zeitpunkt auf der Platte. Bleibt zu einem ungünstigen Zeitpunkt der Strom aus, passen Inhalt und Metadaten nicht zusammen.

Bei PCs beugt eine unterbrechungsfreie Stromversorgung (USV) dem vor. Bei kleinen Projekten, wie etwa dem von einem RasPi Zero betriebenen Weihnachtsbaum [1], müssen andere Lösungen her. Hier gilt es, dem Raspbian das Schreiben auf die SD-Karte abzugewöhnen: Sowohl das Betriebssystem als auch die Anwendungsprogramme dürfen von der SD-Karte nur lesen, aber keine Daten zurückschreiben.

Letzteres erweist sich deshalb als Herausforderung, weil Raspbian wie jedes andere Linux ständig irgendwelche Dateien schreibt, etwa Logfiles, Statusdateien oder Cache-Files. Was nach der Quadratur des Kreises klingt, lässt sich mit einem Trick lösen: Man leitet alle Schreibvorgänge auf eine virtuelle Festplatte um, die nur im Speicher existiert.

Das muss für alle Programme transparent geschehen. Das Konzept geht jedoch nur auf, wenn das System keine wichtigen Daten schreiben muss, denn mit dem Ausschalten hört die virtuelle Festplatte samt Inhalt auf zu existieren. Darüber hinaus dürfen auch nicht zu viele Dateien auf der sehr begrenzten “Festplatte” im Hauptspeicher landen.

Ein Nebenthema, das in diesem Zusammenhang immer wieder durch die Foren des Internets geistert, ist die Angst vor dem Zerstören der SD-Karte durch wiederholtes Schreiben auf einem Raspbian-System. Wer das Schreiben komplett verhindert, geht hier kein Risiko ein. Allerdings gibt es für dieses Problem bessere Lösungen; der Kasten “Schreibvorgänge minimieren” gibt dazu ein paar Tipps.

Schreibvorgänge minimieren

Der Flash-Speicher von SD-Karten verträgt nur eine begrenzte Anzahl von Schreibvorgängen je Speicherzelle. Insofern lassen sich Speicherkarten tatsächlich “kaputtschreiben”. Allerdings stellt der Flash-Controller sicher, dass Schreibvorgänge sich auf den freien Speicher verteilen, selbst dann, wenn das Betriebssystem immer wieder dieselbe Datei schreibt.

Da die Gesamtschreibleistung der Karten ein Vielfaches der Kapazität beträgt, ist die Wahrscheinlichkeit für das Kaputtschreiben durch Logfiles prinzipiell gering; es handelt sich eher um einen Mythos denn um eine echte Gefahr. Eine Ausnahme stellen randvolle Speicherkarten mit wenig freiem Platz dar, aber hier lauern eher andere Probleme für das System.

Möchten Sie trotzdem Zeit in das Minimieren der Schreibvorgänge investieren, klappt das auch ohne Umbau in ein Read-only-System. Wie gesprächig sich das Log verhält, konfigurieren Sie in der Datei /etc/rsyslog.conf; entsprechende Anleitungen finden Sie im Internet. Auch Anwendungsprotokolle, die nicht im Syslog landen, lassen sich in aller Regel konfigurieren. Optional ersetzen Sie die Logdatei durch einen symbolischen Link auf /dev/null: Dann landen die Protokolldaten erst gar nicht auf der SD-Karte.

Strategien

Für das Umleiten aller Schreibvorgänge auf eine virtuelle Festplatte (RAM-Disk) gibt es zwei Strategien. Die erste arbeitet neben einer RAM-Disk auch mit symbolischen Links, also Verweisen von einer Stelle des Dateisystems auf eine andere.

Die zweite Strategie legt einfach die RAM-Disk komplett über die SD-Karte. Bei so einem gestapelten Dateisystem landen alle Schreibvorgänge oben im Stapel, den das System dann von oben nach unten abarbeitet, bis es die angeforderte Datei findet: first come, first serve (Abbildung 1).

Abbildung 1: Prinzip eines Overlay-Dateisystems. Findet das Betriebssystem eine Datei oben im Stapel, ignoriert es eventuell vorhandene Kopien darunter.

Abbildung 1: Prinzip eines Overlay-Dateisystems. Findet das Betriebssystem eine Datei oben im Stapel, ignoriert es eventuell vorhandene Kopien darunter.

Auf die zweite Strategie, obwohl im Prinzip eleganter, gehen wir hier nicht weiter ein, da deren Implementierung sehr empfindlich auf die spezielle Systemumgebung reagiert und deshalb ausgewiesenen Linux-Experten vorbehalten bleibt. Wichtige Informationen und Links [2] dazu bieten diverse Foren-Einträge [3].

Im Internet gibt es viele Tutorials, die sich mit der ersten Strategie beschäftigen. Viele davon funktionieren nur halbwegs, was eher daran liegt, dass sich Raspbian weiterentwickelt, als an Fehlern der Autoren. So kam mit “Stretch” ein Systemdienst dazu, der täglich automatisch das lokale Paketverzeichnis für den Paketmanager Apt aktualisiert. Was für ein Desktop-System nützlich ist, erweist sich für ein Embedded-System als völlig überflüssig. Wegen solcher Systemänderungen eignen sich fertige Kochrezepte eher weniger – mehr Sinn ergibt es, das Prinzip zu verstehen.

Letztlich führen drei Maßnahmen zu einem funktionierenden Read-only-System: das Deinstallieren unnötiger Software, das Verlegen von Dateien und Verzeichnissen in eine RAM-Disk und schließlich das Ignorieren von Schreibfehlern. Die im Folgenden vorgestellten Schritte erproben Sie am besten auf einem Testsystem, das alle notwendigen Programme enthält und auf dem sich keine wichtigen Daten befinden.

Vorarbeiten

Führen Sie zuerst die Befehle aus Listing 1 aus. Das Paket dphys-swapfile verwaltet eine Swap-Datei, also den Notfallhauptspeicher auf der SD-Karte, falls der echte Hauptspeicher vollläuft. Dorthin wollen wir ja nicht schreiben, müssen also darauf verzichten. Der erste Befehl deaktiviert den dazugehörigen Service. Der zweite entfernt dphys-swapfile sowie einige Pakete, die ein kleines Read-only-System nicht benötigt.

Listing 1

 

$ sudo systemctl disable dphys-swapfile
$ sudo apt-get -y remove dphys-swapfile logrotate plymouth cron
$ sudo ln -s /dev/null /etc/systemd/system/apt-daily-upgrade.timer
$ sudo ln -s /dev/null /etc/systemd/system/apt-daily.timer

Dazu gehört logrotate, das entfallen kann, da die Protokolldateien ohnehin auf der virtuellen Festplatte und damit im Nirwana landen. Das Paket plymouth sorgt für einen schönen grafischen Boot-Bildschirm, für Embedded-Systeme ohne Belang. Das letzte Paket, cron, führt regelmäßig Programme aus, hauptsächlich für die Systempflege. Falls Sie es für Ihren Einsatzzweck weiter benötigen, sollten Sie zumindest alle Skripte aus den Verzeichnissen /etc/cron.hourly/, /etc/cron.daily/, /etc/cron.weekly/ und /etc/cron.monthly/ löschen.

DIESEN ARTIKEL ALS PDF KAUFEN
EXPRESS-KAUF ALS PDFUmfang: 6 HeftseitenPreis €0,99
(inkl. 19% MwSt.)
€0,99 – Kaufen
RASPBERRY PI GEEK KAUFEN
EINZELNE AUSGABE Print-Ausgaben Digitale Ausgaben
ABONNEMENTS Print-Abos Digitales Abo
TABLET & SMARTPHONE APPS
Deutschland