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

Raspbian im Read-only-Modus (Seite 2)

Die beiden Befehle aus Zeile 3 und 4 sorgen dafür, dass das oben erwähnte automatische Update des Paketmanagers unterbleibt. Die Aktionen des Listings beziehen sich auf ein aktuelles Raspbian “Stretch” Lite vom März 2018. Für andere Versionen sieht das im Detail anders aus.

Nach diesen Änderungen starten Sie das Testsystem neu und lassen es eine Weile laufen. In dieser Trainingsphase geht es darum, herauszufinden, welche Dateien das System noch schreibt. Deshalb sollten Sie das System dabei für den Zweck nutzen, für den Sie es verwenden wollen. Bei einer anderen als der erwähnten Raspbian-Version liefert die Trainingsphase unter Umständen auch wichtige Hinweise hinsichtlich noch zu entfernender Pakete.

Wer schreibt was?

Nach der Trainingsphase setzen Sie zum Ermitteln der Schreibvorgänge, die stattgefunden haben, ohne Neustart aus einem Terminal den Befehl aus Listing 2 ab.

Listing 2

 

$ sudo find / /boot -xdev -newermt "$(cat /etc/fake-hwclock.data) UTC" -ls

Da Raspbian keine Hardware-Uhr mitbringt, speichert es kurz vor dem Herunterfahren die aktuelle Uhrzeit in der Datei /etc/fake-hwclock.data ab. Beim nächsten Start setzt es die Zeit dann vorläufig auf die dort gespeicherte Zeit; später synchronisiert sich die Uhr mit einer Zeitquelle aus dem Internet. Der Ausdruck -newermt "$(cat /etc/fake-hwclock.data) UTC" findet dann alle Dateien, die neuer sind als dieser Zeitstempel.

Bei unserem Testsystem handelt es sich um ein pures Raspbian Lite ohne weitere Anwendungsprogramme. Wie Sie in Abbildung 2 sehen, schreibt das System nur geringe Datenmengen in nur wenige Verzeichnisse. Raspbian Lite eignet sich also entsprechend gut als Basis für ein Read-only-System. Die Schreibvorgänge konzentrieren sich auf die Verzeichnisse /tmp/, /var/tmp/, /var/log/ und /var/cache/.

Abbildung 2: Ein erweiterter Find-Befehl listet alle geschriebenen Dateien seit dem letzten Boot-Vorgang auf.

Abbildung 2: Ein erweiterter Find-Befehl listet alle geschriebenen Dateien seit dem letzten Boot-Vorgang auf.

In diese Verzeichnisse hängen wir deshalb jeweils eine virtuelle Festplatte ein. Dazu ergänzen Sie als Benutzer root die Datei /etc/fstab um die Zeilen aus Listing 3. Da die RAM-Disks ungenutzt kaum Speicherplatz belegen, wirft das keinerlei Probleme auf. Das System richtet beim Booten selbst schon entsprechende RAM-Disks ein, zum Beispiel für /run/. Das Einhängen der virtuellen Festplatten verdeckt alle vorhandenen Dateien in diesen Verzeichnissen.

Listing 3

 

tmpfs /tmp       tmpfs nodev,nosuid 0 0
tmpfs /var/log   tmpfs nodev,nosuid 0 0
tmpfs /var/tmp   tmpfs nodev,nosuid 0 0
tmpfs /var/cache tmpfs nodev,nosuid 0 0

Nach diesen Änderungen an der Fstab starten Sie das System neu und setzen nach einiger Zeit wieder den Find-Befehl aus Listing 2 ab. Jetzt müsste die Ausgabe des Befehls deutlich kürzer ausfallen und nur noch verstreute Dateien anzeigen, beispielsweise /var/lib/systemd/clock.

Um diese Dateien kümmern wir uns im nächsten Schritt. Hier helfen RAM-Disks nicht weiter, da sie, wie oben beschrieben, den kompletten Verzeichnisinhalt maskieren – für Einzeldateien nicht das gewünschte Verhalten.

Dateien verlegen

Das Verlegen einzelner Dateien funktioniert mit den Befehlen aus Listing 4. Der erste wechselt den Benutzer fest nach root, was viele Sudo-Befehle erspart. Der Exit-Befehl am Schluss verlässt diesen Modus wieder.

Listing 4

 

$ sudo su -
# cd /var/lib/systemd/
# mv clock /tmp
# ln -s /tmp/clock
# mv random-seed /tmp/
# ln -s /tmp/random-seed
# cd /etc
# mv resolv.conf /tmp
# ln -s /tmp/resolv.conf
# cd /var/lib
# mv dhcpcd5 /tmp
# ln -s /tmp/dhcpcd5
# exit

Die Befehle dazwischen laufen immer nach demselben Schema ab: Sie verschieben die fragliche Datei oder das Verzeichnis nach /tmp/ und verlinken sie anschließend. Wenn Sie im Verzeichnis dazwischen noch ein ls -laF absetzen, sehen sie die Umleitung (Abbildung 3).

Abbildung 3: So zeigt Ls das Verlegen von Dateien über symbolische Links.

Abbildung 3: So zeigt Ls das Verlegen von Dateien über symbolische Links.

Die Anzahl der betroffenen Dateien hängt von der Version und Konfiguration des Systems ab. Vergeben Sie zum Beispiel in der /etc/network/interfaces eine feste IP-Adresse für das System, dann startet DHCP nicht, und die Befehle ab Zeile 8 können entfallen. Verwenden Sie spezielle System- oder Anwendungsprogramme, müssen Sie eventuell noch zusätzliche Dateien oder Verzeichnisse verlegen. Dazu ergänzen Sie dann Listing 4 entsprechend.

Ein Neustart mit nachfolgendem Find-Kommando sollte außer der Datei /etc/fake-hwclock.data sowie der Datei /home/pi/.bash_history keine Dateien mehr ausgeben, sondern nur noch die Einhängepunkte der virtuellen Dateisysteme. Aus kosmetischen Gründen könnten Sie das Paket fake-hwclock entfernen, wirklich nötig ist das aber nicht. Genauso wie für die Datei im Heimat-Verzeichnis des Users kümmern wir uns nicht darum und ignorieren später entsprechende Fehlermeldungen schlicht.

Von diesen Ausnahmen abgesehen, schreibt das System nun nicht mehr auf die SD-Karte. Um das Schreiben konsequent zu unterbinden, weisen wir Raspbian noch an, die System- und Boot-Partition als nur lesend zu mounten. Dazu ändern wir die beiden zugehörigen Zeilen in der Datei /etc/fstab wie in Listing 5. In der vierten Spalte kommt das Attribut ro (read-only) dazu, die Null in der letzten Spalte verhindert jetzt das Überprüfen der Dateisysteme beim Booten auf Inkonsistenzen.

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