Donnerstag, 26. Januar 2023

Raspberry konservieren

Es gibt verschiedene Überlegungen warum man einen Raspberry mit "Schreibschutz" ausstatten sollte. Meine war: Hat man Geräte im Einsatz die eventuell rau behandelt werden und eigentlich keine Daten produzieren, kann man doch auch jeden Schreibvorgang verhindern. 

Geht das überhaupt und ist das auch für den Administrator praxistauglich ? Das Raspberry OS hat sogar (fast) alles vorbereitet: Stichwort Overlay Filesystem.

Das Overlay Filesystem bildet zwei Ebenen und präsentiert diese dem System als eine. Im Unteren liegen die Dateien der SD Card, diese ist read only eingebunden. Im Oberen ist ein Filesystem im RAM eingebunden. Das System weiß von alledem nichts und kann in die RAM Disk schreiben. Das hat natürlich seine Grenzen, vor allem beim ersten Pi, mit nur 500 MB RAM. Nach einem Neustart ist alles verschwunden, was in die RAM Disk geschrieben wurde.

In die Bootpartition wird normalerweise nicht geschrieben. Man kann die Möglichkeit aber ganz verhindern, indem man diese Partition von vornherein nur readonly einbindet.

Beides kann man mit raspi-config Menügeführt konfigurieren, Punkte: 4 , P3 . Ich mage das gern auch einfach nur mit der Kommandozeile, auch dafür haben die Entwickler gesorgt.

Die Installation und Konfiguration des Systems muss komplett abgeschlossen sein. Als letzten Schritt richtet man das OverlayFS und den Schreibschutz ein!

Schreibschutz mit OverlayFS aktivieren

Damit der RAM nicht zu schnell mit Dateien gefüllt wird, muss man noch etwas optimieren. Hier können je nach System weitere Schritte notwendig sein!

1. Swap ausschalten

Die selbsterklärenden Befehle fragen den Zustand ab und final wird swap komplett deaktiviert.  

swapon -s
swapoff -a
sudo systemctl stop dphys-swapfile
free
sudo systemctl disable dphys-swapfile

2. Logging verringern

Ich habe mit systemd timern gearbeitet und festgestellt, das danach jeder Zeittrigger 3 nichtssagende Einträge im syslog erzeugt. Die habe ich abgeschaltet (sollte man immer tun!)

sudo sed -i 's/^#LogLevel=.*/LogLevel=notice/' /etc/systemd/system.conf
sudo systemctl daemon-reexec

3. OverlayFS aktivieren und readonly setzen

Zunächst kann man sich noch schnell einen "optischen" Eindruck vom Filesystem auf der SD Card machen.

Zur "Konservierung" benutze ich die vorhandenen Scripts im raspi-config. Der erste Befehl dauert etwas!

df -h
sudo raspi-config nonint enable_overlayfs
sudo raspi-config nonint enable_bootro
sudo reboot

Nach dem Neustart zunächst wieder ein kurzer Blick auf die veränderte "Optik". Danach ein Test zum Verhalten. Der Befehl schreibt eine neue Datei im User Homedir und versucht das Gleiche in der Boot Partition. Die Datei im Homedir kann man sich mit ls anzeigen lassen, die Datei im /boot/ Directory muss einen Fehler werfen. 

df -h
echo "Test Text"|tee overlay.txt |sudo tee /boot/readonly.txt

Macht man jetzt noch einen Neustart, sollte die Datei im Homedir wieder verschwunden sein.

Wartungsarbeiten

Vor jeder Änderung oder System Aktualisierung muss man den "Schreibschutz" entfernen. Dies erfordert leider auch einen Neustart! Mit dem Scriptbefehl geht es aber recht schnell.

1. Wartung vorbereiten

OverlayFS wieder deaktivieren:

sudo raspi-config nonint disable_overlayfs
sudo reboot

Nach dem Neustart kann man wieder normal ins rootfs schreiben, die Bootpartition ist aber immer noch readonly eingebunden, die fstab kann im vorherigen Schritt nicht geschrieben werden. Hier kommt der echte Vorteil gegenüber raspi-config "interaktiv" - da müsste man jetzt nochmal neustarten. Es geht aber temporär auch ohne Neustart, optional mit Test. Vor einem apt full-upgrade empfiehlt sich dieser Schritt, da unter Umständen Dateien in der Bootpartition ausgetauscht werden.

sudo mount -o remount,rw /boot 
echo "Test Text"|tee overlay.txt |sudo tee /boot/readwrite.txt

2. Wartung abschließen

Die Wartung wird durch die Reaktivierung des OverlayFS und einen Neustart abgeschlossen.

Ein Installation von Kernel Komponenten (z.B. apt full-upgrade) muss man vorher mit einem finalen reboot abschließen!  

sudo raspi-config nonint enable_overlayfs && sudo reboot

Alles rückgängig machen

Will man OverlayFS und boot Schreibschutz entfernen, muss man zum vorherigen Schritt 1 noch den Schreibschutz für boot dauerhaft entfernen. Einen extra Neustart an der Stelle benötigt man nicht!

sudo raspi-config nonint disable_bootro

Laufender Betrieb

Im laufenden Betrieb wird, gerade bei wenig RAM, der Speicher schnell knapp werden. Man muss das unbedingt überwachen und bei Bedarf einfach neu starten. Notfalls erstmal mit einem "wachen Auge".

df -h /
free 

ToDo

Code Block

Zum Lesen: raspi-config Quelle


Keine Kommentare:

Kommentar veröffentlichen