Know-how
Kern-Technik
Kern-Technik
74
www.linux-magazin.de
Viele Schreibzugriffe und hartes Stromabschalten mögen Flashspeicher gar nicht gerne. Wer der SD-Karte sei-
nes Raspberry Pi ein langes Leben schenken und Anwendungen und Anwender trotzdem nicht reglementieren
will, garniert sein Himbeertörtchen mit einem Overlay-Filesystem. Hier die Backanleitung. Eva-Katharina Kunst, Jürgen Quade
92
Einsatzzweck als zu ten Zugriffs (Access).
gering. Jedes Lesen einer Datei löst daher einen
Wer aber länger und Schreibzugriff auf den zugehörigen Zeit-
häufiger mit einem stempel aus – eigentlich, denn die Linux-
Raspberry Pi arbei- Entwickler haben diese Abhängigkeit vor
tet, diesen vielleicht einigen Jahren zurückgefahren und aktu-
sogar im 24/ 7-Be- alisieren standardmäßig den Zugriffszeit-
trieb nutzt, bekommt stempel nur beim allerersten lesenden Zu-
eine eingeschränkte griff. Das Verhalten bekommt der Kernel
Zuverlässigkeit des beim Mounten eingeimpft (Tabelle 1).
Speichermediums zu
© psdesign1, Fotolia
Kern-Technik
Partitionsgrenzen halt und tauscht Sek- »/boot« »/«
toren zwischen den Partitionen, um eine
gleichmäßige Verteilung der Schreibzu-
griffe zu erreichen.
Für ein zuverlässiges System geht also RAM »/« Initram-FS
kein Weg an einem rein lesenden Zugriff 75
www.linux-magazin.de
vorbei. Folglich sind die Schreibzugriffe
umzulenken, beispielsweise auf einen
zweiten Flashspeicher (USB-Stick) oder SD-Karte »/boot« »/«
eben – falls ausreichend vorhanden – auf
den Hauptspeicher. Für Letzteres bietet Abbildung 1: Schlanke Selbstbau-Linuxe können beim Hochfahren ihr Root-Filesystem komplett in den Haupt-
der Linux-Kernel gleich zwei Techniken: speicher kopieren.
Erstens das Initram-FS [2] und zweitens
das in der letzten Kern-Technik vorge- ten schreibenden Zugriff für das Mission- 290 Zeilen fürs Abdrucken zu groß ist,
stellte Overlay-Filesystem [3]. critical-Rootverzeichnis auf die SD-Karte reflektiert Listing 1 nur die entscheiden-
ein Overlay nötig. Eine funktionierende den (Mount)-Kommandos zum Anlegen
Filesysteme im RAM Lösung in Form eines Skripts stammt des Overlay.
ursprünglich aus den Entwicklerhänden Zum besseren Verständnis des kompli-
Der Initram-FS-Ansatz benötigt den von Axel Heider und ist unter [7] zu zierten Vorgangs sollte man wissen, dass
Flashspeicher nur während des Boot- finden, die Installation beschreibt der drei (Root-)Dateisysteme beteiltigt sind:
prozesses, um den Kernel und ein Root- Kasten „Overlay auf dem Raspberry Pi Als erstes das zum Bootzeitpunkt aktive
Filesystem in den Speicher zu schubsen einrichten“ detailliert. Root-Filesystem des initialen RAM-File-
(Abbildung 1). Das Root-Filesystem ist systems, als zweites das Root-Filesystem
als Initram-FS ausgeprägt, das sämtliche Booten im Hauptspeicher auf der SD-Karte, auf das nur lesende Zu-
Dateien und Verzeichnisse im Hauptspei- griffe erlaubt sein sollen, und als drittes
cher abbildet. Ein klassisches Dateisys- Um das Overlay vor dem ersten schrei- das Overlay-Filesystem, das aus Sicht des
tem wie Ext 4 gibt es nicht mehr, der benden Zugriff aufzusetzen, kommt das laufenden Betriebssystems das eigentli-
Kernel greift ohne Umwege besonders bereits erwähnte Initram-FS als Sprung- che Root-Filesystem werden wird.
effizient auf die Daten zu. brett zu Ehren. Das für den Raspberry Das Skript »root‑ro« erzeugt dazu nach
Der einzige Nachteil besteht im limitier- Pi noch zu generierende Initram-FS legt Auswertung der Bootparameter im (noch
ten Platzangebot des Hauptspeichers. der Raspberry-Besitzer – wie den Kernel aktiven) Init-Filesystem ein Verzeichnis
Systeme mit komplexen grafischen Ober- auch – auf der Bootpartition der SD-Karte als Mountpoint für das Filesystem auf
flächen oder umfangreichen Datenban- ab, und der Bootvorgang wird ihn vom der SD-Karte (»/mnt/root‑ro/«) und ein
ken sind so nicht realisierbar. Wer jedoch Bootloader in den Hauptspeicher trans- Verzeichnis als Mountpoint für das neue
sein System selber baut, etwa mit Hilfe ferieren. Overlay-Filesystem (»/mnt/root‑rw/«).
von Buildroot [4], schafft zudem noch Der Kernel startet aus dem im Hauptspei- Da das Initsystem die SD-Karte bereits
den Raum, um einen einfach handhabba- cher liegenden Initram-FS das Programm mit lesendem Zugriff eingehängt hat, ver-
ren Update-Mechanismus zu etablieren. »init«. Dies lädt normalerweise die wich- schiebt das Kommando
Allerdings gehen bei Stromausfall neue tigsten Treiber, schaltet auf das auf der
Daten verloren und solche, die sich zwi- Festplatte beziehungsweise auf der SD- mount ‑o move /root /mnt/root‑ro
Listing 1: »
root‑ro« (modifizierter Overlay auf dem Raspberry Pi einrichten
Auszug)
Falls noch nicht geschehen, installiert der cd /etc/initramfs‑tools/scripts/U
[...]
01 Raspi-Besitzer Raspbian (in der Version »2017 init‑bottom
02 ROOT_RO=/mnt/root‑ro ‑03‑02‑raspbian‑jessie«) auf eine SD-Karte. wget https://gist.github.com/niun/U
05 ROOT_RW_WORK=${ROOT_RW}/work
für den Default-User »pi« ändert, chmod +x root‑ro
n den SSH-Server per »raspi‑config« akti-
06 rootmnt=/root
viert, Danach geht es weiter mit dem Generieren
[...]
07 des Initram-FS:
n die Systemsoftware aktualisiert: »apt‑get
08
mount ‑t tmpfs tmpfs‑root ${ROOT_RW}
update; apt‑get dist‑upgrade« und update‑initramfs ‑c ‑k $(uname ‑r)
[...]
09
n eventuell einen neuen User anlegt und mit
10
# root is mounted on ${rootmnt}, move it to Admin-Rechten ausstattet (»adduser login- Das Initram-FS ist damit zwar gebaut, liegt
${ROOT_RO}. name; adduser loginname sudo«). aber noch im Bootverzeichnis »/boot/« unter
11
mount ‑o move ${rootmnt} ${ROOT_RO} Nun loggt sich der Benutzer in das vorbereitete einem unhandlichen Namen. Der Aufruf
[...]
12 System ein und wird durch Eingabe von »sudo mv initrd.img‑$(uname ‑r) initrd7.img
13
# mount virtual fs ${rootmnt} with rw‑fs ${ROOT_RW} su« zum Superuser. Jetzt geht es ans Konfek-
tionieren des Initram-FS: benennt es daher um. Der letzte Schritt vor
on top or ro‑fs ${ROOT_RO}.
n Damit der Kernel das Modul »overlay« lädt, dem Reboot aktiviert das Initram-FS auf dem
14
mount ‑t overlay ‑o \
trägt der Superuser den Modulnamen in die Raspberry Pi, indem
15 lowerdir=${ROOT_RO},upperdir=
Datei »/etc/initramfs‑tools/modules« ein: cd /boot
${ROOT_RW_UPPER},workdir=${ROOT_RW_WORK} \
echo "overlay" >> /etc/U echo "initramfs initrd7.img" >>config.txt
16 overlay ${rootmnt}
initramfs‑tools/modules
[...]
17 den Bootloader anpasst. Achtung: Diese Konfi-
18
# move mount from ${ROOT_RO} to ${rootmnt}${ROOT_RO} n Für die eigentliche Aktivierung des Overlay gurationsoption verlangt kein Gleichheitszei-
19
mount ‑o move ${ROOT_RO} ${rootmnt}${ROOT_RO} muss er das Skript »root‑ro« an der richti- chen zwischen Optionsname und Wert.
gen Stelle in das Initram-FS aufnehmen und Fertig! Mit dem nächsten Reboot ist der Zugriff
20
# move mount from ${ROOT_RW} to ${rootmnt}${ROOT_RW}
ausführbar machen: auf die SD-Karte nur noch lesend möglich.
21
mount ‑o move ${ROOT_RW} ${rootmnt}${ROOT_RW}
06/2017
Know-how
»/boot/«) übrigens lesend und schrei-
bend. Das ist zunächst unkritisch, da auf Ergibt virtuell: writable
Kern-Technik
Merged »etc/fstab« »etc/password« »home/pi/foo.c/« »...«
diese Partion im laufenden Betrieb keine »/«
Schreibzugriffe stattfinden. Andererseits
müssen für den rein lesenden Zugriff Im RAM: Upper writable
»/mnt/root-rw/« »etc/fstab« »home/pi/foo.c/«
in der orginalen Fstab nur die Mount
optionen »defaults« durch »ro,noatime«
Auf SD-Karte: read-only
getauscht werden. »etc/fstab« »etc/password« »...« 77
www.linux-magazin.de
Lower
Nach dem Reboot zeigt der Mountbe- »/mnt/root-ro/«
fehl in Abbildung 6 den Erfolg an: Die
Rootpartiton ist nur lesend (»ro«) im Ver- Abbildung 4: Die SD-Karte ist die untere, ein Temp-Filesystem die obere Schicht des Overlay-Filesystems.
zeichnis »/mnt/root‑ro/« eingehängt, das
Root-Filesystems selbst als Overlay mit Logdaemon »rsyslogd« im Moment noch trieb keinen Sinn ergibt. Die Option »ro«
Schreibrechten. regelmäßig Logdateien unter »/var/log/«. schließlich sorgt ebenfalls dafür, dass der
Über den Pfad »/mnt/root‑ro/« gelingt es Diese lassen sich beispielsweise per »log Kernel nur read-only mountet.
übrigens, jederzeit auf die Orginaldateien rotate« in Schranken halten. Alternativ
lesend zuzugreifen (wie in Abbildung 5), deinstalliert der Admin Rsyslogd per Updates würden ins Leere
die nachträglichen Änderungen sind un- »dpkg ‑‑purge rsyslog« und ersetzt ihn
laufen
ter »/mnt/root‑rw/« zu finden. So listet durch die Busybox-Variante (Kommando
»ls ‑R /mnt/root‑rw/upper« rekursiv die »apt‑get install busybox‑syslogd«). Diese Wichtig: Mit dem Overlay finden alle Än-
dort abgelegten Dateien auf. Mittels »du behält die Lognachrichten im RAM und derungen im Filesystem im RAM statt.
‑sh /mnt/root‑rw« lässt sich feststellen, stellt mit »logread« ein passendes Werk- Mit dem nächsten Bootvorgang gehen
wie viel Hauptspeicher das Overlay-File- zeug zum Log-Lesen bereit. diese verloren. Sollen Wartungs- bezie-
system belegt. Ein absolutes No-Go für das Ruggedized hungsweise Konfigurationsarbeiten län-
Dies sind nach dem Booten gut 100 System ist Swapping. Beim Raspberry Pi gerfristig Wirkung entfalten, muss der
MByte von den rund 450 zur Verfügung ist der Auslagerungsmechanismus nor- Besitzer sein System erst ohne Overlay-
stehenden. Denn Linux reserviert beim malerweise auch abgeschaltet. Wer si- Mechanismus booten. Dazu kommen-
Anlegen eines Temp-Filesystems rund die chergehen will, entfernt ihn per »apt‑get tiert er in der Datei »/boot/config.txt«
Hälfte des vorhandenen Hauptspeichers. purge dphys‑swapfile« komplett. nur die letzte Zeile (»initramfs initrd7.
Da der Raspberry Pi 3 etwa 1 GByte Wer mag, gibt alternativ dem Kernel Pa- img«) durch Einfügen eines Hashtag »#«
RAM hat, sind das 463 MByte. Wer mehr rameter mit auf den Weg, die der beim am Zeilenanfang aus. Das sonst so es-
braucht, ergänzt in dem Skript »root‑ro« Booten auswertet. Die Parameter gehören senzielle Herunterfahren von Linux darf
die Zeile 166 um »‑o size=550M«, wobei in der Datei »/boot/cmdline«. Ein dort man sich übrigens im gerade noch akti-
»550M« für 550 MByte steht und durch eingetragenes »noswap« setzt Swapping ven robusten Modus sparen und schadlos
die benötigte Größe zu ersetzen ist. Im ebenfalls außer Gefecht. Ebenfalls hilf- einfach den Strom abschalten.
Ganzen sieht die Zeile dann so aus: reich: »fastboot« überspringt den Filesys- Mit dem nächsten Reboot kehrt nun das
temcheck, der in einem reinen Lesebe- normale, mit Schreibrechten auf die SD-
mount ‑t tmpfs ‑o size=550M \
tmpfs‑root ${ROOT_RW}
Häufige Schreibvorgänge
ausdünnen
Da der Raspberry Pi jetzt ruggedized ist,
sollte dessen Besitzer ihn noch für den
Langzeitbetrieb sichern. So schreibt der Abbildung 5: Während des Bootens wird die originale Fstab (oben) modifiziert (unten).
06/2017
Know-how
Kern-Technik
78
www.linux-magazin.de
Karte versehene System zurück. Aktuali- von »/boot/config.txt« den Hashtag am beseitigen. Bleibt der Memory-Footprint
sierungen, beispielsweise mittels »apt‑get Zeilenanfang wieder. Diesmal muss er aber konstant, spricht nichts mehr gegen
dist‑upgrade«, sind in diesem Zustand das System sauber herunterfahren, und den Einsatz als eingebettetes Ruggedized
persistent. Sind alle Arbeiten erledigt, die SD-Karte arbeitet mit dem nächsten System. Und damit etwas sonst Verbote-
entfernt der Sysadmin in der letzten Zeile Start wieder im Schongang. nes ungestraft tun zu dürfen – zack: Ste-
Wegen kleiner Änderungen, die zum cker raus! – ist für den Raspberry-Pi-Fan
Temporäres Filesystem Beispiel ein Backup bewirkt, das System das Sahnehäubchen. (jk) n
Linux hat mit Kernel 2.4 die klassische RAM- rebooten zu müssen, erscheint nicht son-
Disk durch das temporäre Filesystem Tmp-FS derlich elegant. Und tatsächlich lässt sich
ersetzt. Dies hält alle Daten im Hauptspei- das System auch live in den SD-Karten- Infos
cher, auch im ausgelagerten. In Abgrenzung Schreibmodus setzen. Dafür hängt Root [1] Michael Kofler, „Raspbian-Lite für den
zur RAM-Disk benötigt ein Tmp-FS keinen das read-only eingehängte Filesystem readonly Betrieb konfigurieren“:
Dateisystemtreiber, da es direkt auf die in- neu mit Schreibrechten (read-write) ein: [https://kofler.info/
ternen Schnittstellen für den Dateizugriff
raspbian‑lite‑fuer‑den‑read‑only‑betrieb/]
aufsetzt. Damit arbeitet es effizienter. sudo mount ‑o remount,rw /mnt/root‑ro
[2] Quade, Kunst, „Kern-Technik“, Folge 39
Linux nutzt das Tmp-FS in diversen Varian-
ten extensiv (Abbildung 6). Als Initram-FS Das Backup selbst kann Rsync erledigen. (über Initram-FS): Linux-Magazin 05/08,
beispielsweise beherbergt es ein rudimentä- Einige Dateien und Ordner, zum Beispiel S. 98
res Userland. Dort liegen insbesondere Pro- »/etc/fstab«, »/var/«, »/tmp/«, sollte ein [3] Quade, Kunst, „Kern-Technik“, Folge 91
gramme zur Systemkonfiguration und zum Restore besser aussparen. Ein (über Overlay-Filesysteme): Linux-Magazin
Laden von Treibern. 04/17, S. 78
sudo mount ‑o remount,ro /mnt/root‑ro
Ubuntu setzt es als so genanntes Early User- [4] Quade, „Embedded Linux lernen mit dem
land ein, um den Kernel ohne Treiber – die nach dem Schreibvorgang macht alles Raspberry Pi“: Dpunkt-Verlag, 1. Auflage,
befinden sich nämlich dann im Initram-FS –
wieder rückgängig. 2014
auszuliefern. Nach dem Laden der Treiber
[5] „Raspbian with Read-only Root“:
wechselt Ubuntu auf die eigentliche Root-
partition über und löscht das Early Userland Hart abschalten ohne Reue [https://www.raspberrypi.org/forums/
wieder aus dem Hauptspeicher. viewtopic.php?f=63&t=161416]
Dadurch verbleiben keine überflüssigen So oder so: Bevor er sein haltbar gemach- [6] „Raspberry Pi Forum“:
Treiber oder Konfigurationen im RAM. Für tes Himbeertörtchen in den Dauerbetrieb [https://www.raspberKastenrypi.org/
den User ist der Vorgang unsichtbar. Gibt es überführen kann, hat der Besitzer die forums/viewtopic.php?f=63&t=145084]
aktualisierte oder zusätzliche Treiber, muss Speicherauslastung über einen längeren [7] Axel Heider, „Read-only Root-FS with over-
Ubuntu im Übrigen nur das Initram-FS neu Zeitraum zu beobachen und eventuelle layfs for Raspian“: [https://gist.github.
installieren, nicht den Kernel selbst.
Speicherfresser zu identifizieren und zu com/niun/34c945d70753fc9e2cc7]