Ein typischer Raspberry Pi verwendet zum Schreiben des Betriebssystems eine microSD-Karte, die ein praktisches, aber leicht zu beschädigendes Speichermedium ist. eMMC wird in industriellen Anwendungen wie dem CM5 verwendet, weil es robuster ist als eine microSD-Karte. Einer der Gründe, warum eMMC in industriellen Anwendungen wie dem CM5 verwendet wird, ist, dass es ein robusteres Speichermedium als microSD-Karten ist.
Indem Sie den Betriebssystemteil einer microSD-Karte oder eines anderen Speichermediums schreibgeschützt machen, können Sie die Anzahl der Schreibvorgänge auf dem Speichermedium stark reduzieren und so die Lebensdauer des Speichermediums verlängern. Außerdem erhöht sich dadurch die Wahrscheinlichkeit, dass der Betriebssystemteil bei einem plötzlichen Stromausfall nicht beschädigt wird.
Der Raspberry Pi verfügt über eine Methode namens „Overlay File System“, die über raspi-config einfach konfiguriert werden kann. Es ist bereits seit einiger Zeit unter raspi-configzur Konfiguration verfügbar.
OverlayFS ist ein Mechanismus, der das System (OS) als schreibgeschützt (RO) behandelt und das gesamte System wie ein einziges Dateisystem aussehen lässt, indem nur die Dateien, auf die geschrieben wird, in einen anderen beschreibbaren Bereich (obere Schicht) kopiert und gespeichert werden.
Dieser beschreibbare Bereich wird im Speicher als tmpfs erweitert und verschwindet, wenn das System wieder eingeschaltet wird.
Auf den ersten Blick kann das System so behandelt werden, als ob es verändert und gespeichert wurde, aber der Systemteil ist schreibgeschützt und wurde nicht verändert.
Wenn Sie also das System ausschalten, geht nichts verloren.
Das bedeutet, dass das System zu dem Punkt zurückkehrt, an dem es schreibgeschützt wurde.
Wir möchten zumindest eine minimale Anzahl von Dateien nach dem Neustart beibehalten und verwenden.
Bei der Verwendung von Overlayfs wird dies erreicht, indem die Daten mit einem symbolischen Link auf eine separate Partition ausgelagert werden.
In diesem Fall haben wir uns nur auf netzwerkbezogene Änderungen und die Sicherung des Home-Ordners konzentriert.
Testumgebung für diesen Test
Die Umgebung, die wir dieses Mal getestet haben, ist wie folgt.
- 32 GB microSD-Karte (64 GB oder mehr empfohlen)
- Ubuntu Desktop 25.10 (64-bit)
- Teilen Sie /data in eine separate Partition auf
- Speichern in /data unter Verwendung eines symbolischen Links (Symlink)
- Netzwerk verwendet NetworkManager
- OverlayFS wird manuell durch Bearbeiten der Datei cmdline.txt konfiguriert
- Die Tests wurden auf einem aktuellen Pi 5 durchgeführt (diese Methode ist auch auf den PL-R5 mit CM5 anwendbar)
Wir versuchen, die microSD-Karte mit 10 GB /Datenspeicher zu teilen.

Die Methode der Partitionierung einer Partition ist die gleiche wie die Methode der Partitionierung einer Partition, in der das Wie Sie die Partition aufteilen, auf der das Betriebssystem installiert ist für Details.
Nach dem Booten von Ubuntu, das zur Evakuierung partitioniert wurde, schließen Sie das Update ab.
In diesem Zustand fahren wir mit den nächsten Schritten fort.
Konfigurationsfluss
Der allgemeine Ablauf der Einrichtung ist wie folgt
1. Ubuntu schreiben
2. Starten Sie den aktuellen Rechner und schließen Sie die Ersteinrichtung und die Updates ab.
3. Lesen Sie die microSD-Karte einmal auf einem anderen Rechner und partitionieren Sie sie (ca. 10 GB zum Speichern von Daten)
4. Vorbereitungsarbeiten vor Overlayfs
5. Overlayfs aktivieren
Nun, da wir bis zu 3 fertig sind, fahren wir mit den Vorbereitungen für die endgültigen Overlayfs fort.
Überprüfen Sie schließlich bei aktivierten Overlayfs die Netzwerkeinstellungen auf Änderungen usw.
Eine weitere Partition einhängen
Wir werden mit der geteilten Partition arbeiten, nachdem sie gemountet wurde.
lsblk überprüft, ob die geteilte Partition noch nicht eingehängt ist. ( mmcblk0p3)
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
mmcblk0 179:0 0 29.7G 0 disk
├─mmcblk0p1 179:1 0 512M 0 part /boot/firmware
├─mmcblk0p2 179:2 0 19.9G 0 part /
└─mmcblk0p3 179:3 0 9.3G 0 part
Erstellen Sie /data unter root und mounten Sie mmcblk0p3 dort.
sudo mkdir -p /data
sudo mount /dev/mmcblk0p3 /data
└─mmcblk0p3 179:3 0 9.3G 0 part /dataEs ist in Ordnung, wenn die
Damit es beim Start automatisch eingehängt wird, fügen Sie an fstab. blkid oder den nächsten Coman an, um die UUID zu ermitteln.
sudo blkid -s UUID -o value /dev/mmcblk0p3
oder
lsblk -f /dev/mmcblk0
Kopieren Sie die UUID und hängen Sie sie an die fstab unter sudo nano /etc/fstab an. (Die UUID sollte wie folgt lauten.)
UUID=f3afb6b2-a959-4c4b-bdb6-3c38a0fe33be /data ext4 defaults 0 2
Aktualisieren Sie und melden Sie sich erneut an und überprüfen Sie den MOUNT-Status.
sudo systemctl daemon-reload
sudo mount -a
mount | grep /data
/dev/mmcblk0p3 on /data type ext4 (rw,relatime,errors=remount-ro)angezeigt wird, ist es in Ordnung.
Die Rolle der /data Partition
Letztendlich wird /data beschreibbar (rw) gemacht, so dass die Netzwerkeinstellungen in diesen /data-Bereich verschoben werden.
Das Verzeichnis /home wird ebenfalls im /data-Bereich gespeichert.
Das Rootfs des Systems sollte Overlayfs sein, das am Ende schreibgeschützt (ro) ist.
Derzeit gibt es zwei allgemeine Methoden zum Speichern von Daten.
Es gibt zwei Methoden: die symbolische Link-Methode (Symlink) und die Bind-Mount-Methode.
Dieses Mal handelt es sich um einen symbolischen Link.
Overlayfs + symbolische Links
Der Arbeitsablauf für symbolische Links ist wie folgt
1. Erstellen Sie ein Verzeichnis als limbisches Linkziel und machen Sie es zu einem Einhängepunkt.
2. Kopieren Sie die Originaldateien.
3. Erstellen Sie einen symbolischen Link.
4. Bestätigen Sie den symbolischen Link.
Nachdem die symbolischen Links ordnungsgemäß eingerichtet sind, werden wir sie in Overlayfs umwandeln.
1. Verzeichnisse für Einhängepunkte erstellen
Bereiten Sie nur ein leeres Verzeichnis vor, bevor Sie den symbolischen Link ausführen. Einhängepunkt.
In diesem Fall sind die folgenden fünf symbolisch zu verknüpfen.
- /etc/NetworkManager
- /var/lib/NetworkManager
- /home
- /etc/hostname
- /etc/hosts
- Erstellen Sie ein Verzeichnis zum Einhängen in /etc/netplan /data.
sudo mkdir -p /data/etc/NetworkManager
sudo mkdir -p /data/var/lib/NetworkManager
sudo mkdir -p /data/home
sudo mkdir -p /data/etc/netplan
2. Kopieren von Dateien
Kopieren Sie die Originaldaten auf die Seite /data.
Die Verzeichnisbezeichnung im Befehl sollte einen abschließenden Schrägstrich enthalten, da wir in diesem Fall nur den Inhalt in ein bereits vorhandenes Verzeichnis kopieren wollen.
Wenn Sie in diesem Bereich einen Fehler machen, bleiben Sie bei verschachtelten Verzeichnissen hängen.
-Schrägstrich für „Inhalt einschließen“
-keine für „einen ganzen Ordner erstellen“
# Copy NetworkManager configuration
sudo rsync -a /etc/NetworkManager/ /data/etc/NetworkManager/
sudo rsync -a /var/lib/NetworkManager/ /data/var/lib/NetworkManager/
# Copy netplan configuration
sudo rsync -a /etc/netplan/ /data/etc/netplan/
# Copy the home directory
sudo rsync -a /home/ /data/home/
# Copy configuration files
sudo cp -a /etc/hosts /data/etc/hosts
sudo cp -a /etc/hostname /data/etc/hostname
hosts und hostname sind eine Datei. Der Befehl cp -aist also in Ordnung.
*netplan/ enthält Informationen zur Wi-Fi-Verbindung.
3. Symbolische Links erstellen
Löschen Sie die ursprüngliche Gruppe von Dateien, bevor Sie einen symbolischen Link erstellen.
sudo rm -rf /etc/NetworkManager
sudo ln -s /data/etc/NetworkManager /etc/NetworkManager
sudo rm -rf /var/lib/NetworkManager
sudo ln -s /data/var/lib/NetworkManager /var/lib/NetworkManager
sudo rm -rf /etc/netplan
sudo ln -s /data/etc/netplan /etc/netplan
# Move to the root directory before modifying /home
cd /
sudo rm -rf /home
sudo ln -s /data/home /home
sudo ln -sf /data/etc/hosts /etc/hosts
sudo ln -sf /data/etc/hostname /etc/hostname
Wir werden es hier einmal überprüfen.
ls -l /etc/NetworkManager
ls -l /var/lib/NetworkManager
ls -l /etc/netplan
ls -l /home
ls -l /etc/hostname
ls -l /etc/hosts
Die Anzeige sollte zum Beispiel etwa so aussehen
lrwxrwxrwx 1 root root 24 Feb 7 21:08 /etc/NetworkManager -> /data/etc/NetworkManager
lrwxrwxrwx 1 root root 28 Feb 7 21:09 /var/lib/NetworkManager -> /data/var/lib/NetworkManager
lrwxrwxrwx 1 root root 17 Feb 9 09:40 /etc/netplan -> /data/etc/netplan
lrwxrwxrwx 1 root root 10 Feb 7 21:09 /home -> /data/home
lrwxrwxrwx 1 root root 18 Feb 7 21:10 /etc/hostname -> /data/etc/hostname
lrwxrwxrwx 1 root root 15 Feb 7 21:10 /etc/hosts -> /data/etc/hosts
Prüfen Sie, ob NetworkManager und andere Programme die /data-Seite mit symbolischen Links verwenden.
realpath /etc/NetworkManager
realpath /etc/NetworkManager
realpath /var/lib/NetworkManager
Daher ist es in Ordnung, wenn der Befehl realpath auch den Pfad auf der /data-Seite anzeigt.
/data/etc/NetworkManager
/data/var/lib/NetworkManager
Die gemountete /data-Partition wird schließlich so aussehen.

Die Kopie liegt auf der Seite /data bereit, die beschreibbar ist.
4. OverlayFS installieren und aktualisieren
Jetzt sind wir startklar.
Installieren Sie overlayroot und aktualisieren Sie initramfs.
1. Installieren Sie Overlayfs (overlayroot)
2. In cmdline.txt hinzufügen
3. Ändern Sie die Netzwerkeinstellungen mit Overlayfs und prüfen Sie, ob dies dauerhaft ist.
sudo apt update
sudo apt install overlayroot
sudo update-initramfs -u
sudo reboot
Wenn die Aktualisierung abgeschlossen ist, zeigt das initramfs etwa so an.
update-initramfs: Generating /boot/initrd.img-6.17.0-1007-raspi
Using DTB: bcm2712-rpi-5-b.dtb
Installing /lib/firmware/6.17.0-1007-raspi/device-tree/broadcom/bcm2712-rpi-5-b.dtb into /boot/dtbs/6.17.0-1007-raspi/./bcm2712-rpi-5-b.dtb
Taking backup of bcm2712-rpi-5-b.dtb.
Installing new bcm2712-rpi-5-b.dtb.
flash-kernel: installing version 6.17.0-1007-raspi
Copying kernel assets to /boot/firmware/new/
Copying boot firmware to /boot/firmware/new/
Copying device trees to /boot/firmware/new/
Copying device tree overlays to /boot/firmware/new/overlays/
Please be aware next reboot will boot twice
5. Zu cmdline.txt hinzufügen
Wenn wir vom Neustart zurückkehren, wollen wir nur /data als rw behalten, also fügen wir es mit einer Option zum Ausschluss eines anderen Blocks hinzu.
Der Pfad zu cmdline.txt unterscheidet sich vom Raspberry Pi OS.
sudo nano /boot/firmware/current/cmdline.txt
An den Anfang von cmdline.txt anhängen.
Hinweis: cmdline.txt muss in einer einzigen Zeile geschrieben werden. Keine Zeilenumbrüche. Leerzeichen zwischen den Einträgen.
overlayroot=tmpfs:recurse=0
overlayroot=tmpfs:recurse=0 zswap.enabled=1 zswap.compressor=zstd multipath=off dwc_otg.lpm_enable=0 console=tty1 root=LABEL=writable rootfstype=ext4 panic=10 rootwait fixrtc quiet splash
Starten Sie nach dem Schreiben neu.
Damit ist die gesamte Einrichtung abgeschlossen.
Starten Sie neu, um zu sehen, ob nur bootfs jetzt schreibgeschützt (ro) ist.
Prüfen Sie schreibgeschützt und beschreibbar.
Vergewissern Sie sich nach dem Neustart, dass Overlayfs auf der rootfs-Seite ordnungsgemäß aktiviert ist.
Umgekehrt wird auch /data auf seine Beschreibbarkeit überprüft.
Zunächst einmal ist das Ergebnis von lsblk, dass rootfs jetzt richtig overlayfs ist. (/media/root-ro)
/data ist ohnehin rw.
mmcblk0 179:0 0 29.7G 0 disk
├─mmcblk0p1 179:1 0 512M 0 part /boot/firmware
├─mmcblk0p2 179:2 0 19.9G 0 part /media/root-ro
└─mmcblk0p3 179:3 0 9.3G 0 part /data
Wenn Sie in einem Terminal eine Verbindung zu SSH herstellen, können Sie es oft sehen, da es beim Verbindungsaufbau angezeigt wird. overlay wird angezeigt.
tmpfs-root /media/root-rw tmpfs rw,relatime,inode64 0 0
overlayroot / overlay rw,relatime,lowerdir=/media/root-ro,upperdir=/media/root-rw/overlay,workdir=/media/root-rw/overlay-workdir/_,uuid=on,nouserxattr 0 0
/dev/mmcblk0p2 /media/root-ro ext4 ro,relatime 0 0
Wir werden uns individuell bei ihnen erkundigen.
mount | grep " on / "
mount | grep /data
ls -l /etc | grep NetworkManager
ls -l / | grep /home
Erwartete Ergebnisse:
mount | grep " on / "
overlayroot on / type overlay (rw,relatime,lowerdir=/media/root-ro,upperdir=/media/root-rw/overlay,workdir=/media/root-rw/overlay-workdir/_,uuid=on,nouserxattr)
mount | grep /data
/dev/mmcblk0p3 on /data type ext4 (rw,relatime)
ls -l /etc | grep NetworkManager
lrwxrwxrwx 1 root root 24 Feb 7 21:08 NetworkManager -> /data/etc/NetworkManager
ls -l / | grep /home
lrwxrwxrwx 1 root root 10 Feb 7 21:09 home -> /data/home
Haben Sie die erwarteten Ergebnisse gesehen?Overlayfs ist jetzt vollständig.
Abschließender Test
Ich werde ein paar Dinge testen.
Wi-Fi Ziel ändern
Wir werden das Wi-Fi-Ziel auch im Status Overlayfs ändern und überprüfen, ob dies nach dem Neustart immer noch der Fall ist.
Die Wi-Fi-Verbindungsinformationen liegen in /etc/netplan im yaml-Format vor.
Da es sich auch hier um einen symbolischen Link handelt, wird die /data-Seite neu geschrieben und die ursprüngliche /etc sollte ebenfalls darauf verweisen.
Vor der Änderung gibt es ein yaml mit dem Namen 90-NM-~.
sudo ls -l /data/etc/netplan/
-rw------- 1 root root 157 Oct 7 11:52 50-cloud-init.yaml
-rw------- 1 root root 706 Oct 7 11:55 90-NM-32f4a827-cc10-4a0e-aae9-64158b7a33e7.yaml
Ich habe über die GUI-Steuerung auf dem Desktop von 5g Wi-Fi zu 2g Wi-Fi gewechselt.
Daher habe ich noch ein weiteres Gerät. Natürlich ist es mit Wi-Fi verbunden.
-rw------- 1 root root 157 Oct 7 11:52 50-cloud-init.yaml
-rw------- 1 root root 706 Feb 9 09:54 90-NM-201e82b9-74eb-4783-a9db-48e3a5d7f14e.yaml
-rw------- 1 root root 706 Oct 7 11:55 90-NM-32f4a827-cc10-4a0e-aae9-64158b7a33e7.yaml
Wenn die beiden nach dem Neustart in diesem Zustand auf dieselbe Weise beibehalten werden, ist das in Ordnung. Sie wurden tatsächlich beibehalten.
Jetzt können wir die Wi-Fi-Verbindungsinformationen auch im Status Overlayfs ändern.
Wenn die Datei nach dem Neustart nicht mehr vorhanden ist, funktioniert OverlayFS korrekt.
Überprüfen Sie abschließend das Schreiben der Datei mit Overlayfs.
Lassen Sie uns eine Testdatei direkt unter root erstellen.
sudo touch /test_file
Da rootfs ein Overlayfs ist, verhält es sich so, als ob es im Speicher geändert worden wäre. An diesem Punkt können Sie in ihn schreiben.
Aber das wird nur in tmpfs geschrieben, so dass es nach dem Neustart verschwunden ist.
Wenn die Datei selbst verschwindet und nach dem Neustart nicht mehr vorhanden ist, dann funktioniert Overlayfs.
Starten Sie neu und prüfen Sie mit ls -l /test_fileusw.
Es sollte verschwunden sein.
So machen Sie Overlay rückgängig
Im Overlayfs-Zustand bringt ein Neustart das System also wieder an den Punkt zurück, an dem es in Overlayfs umgewandelt wurde.
Das liegt daran, dass der ursprüngliche rootfs-Bereich schreibgeschützt (ro) ist und sich auf seiner oberen Ebene wie ein im Speicher erweitertes (tmpfs) verhält.
Das tmpfs verschwindet nach einem Neustart.
Um rootfs wieder auf normales Lesen/Schreiben umzustellen, löschen Sie overlayroot=tmpfs:recurse=0im Anhang der cmdline.txt.
Starten Sie dann neu und es ist wieder normal.
Wenn Sie wieder zu Overlayfs konvertieren möchten, können Sie einfach die gleichen Informationen in einfügen.
Dies ist möglich, da bootfs beschreibbar bleibt.
Persistenz ausgewählter Daten
Dieses Mal haben wir in einer Overlayfs-Umgebung einige netzwerkbezogene und /home-Verzeichnisse auf eine separate Partition ausgelagert.
Die Änderungen wurden ordnungsgemäß beibehalten, so dass die Daten erfolgreich persistiert wurden.
Symbolische Links funktionieren bei einigen Dateien problemlos.
Es ist jedoch nicht sehr sinnvoll, eine ganze Gruppe von Dateien, auf die häufig zugegriffen wird, aufzubewahren. Dies gilt insbesondere in diesem Fall, da die Partitionen einfach auf demselben Speichermedium abgeschnitten sind.
Es ist nicht gut, wenn das Rootfs mit Overlayfs schreibgeschützt gemacht wird, aber auf dasselbe Medium immer wieder zugegriffen wird.
Es wäre wünschenswert, Konfigurationsdaten zu exportieren oder Dateien zu speichern, die auch im Overlayfs-Zustand erzeugt wurden.
Ich möchte die Einstellung so genau wie möglich festlegen.
Beilage 1
Eigentlich konnte ich mit Raspberry Pi OS dieses Mittel nicht bekommen, ich dachte, es sei ein Problem mit Trixie, aber anscheinend war es bis Bullseye möglich, und das gleiche Verfahren kann nicht von Bookworm aus durchgeführt werden.
Soweit ich herausfinden und überprüfen konnte, haben weder Symlinks noch Bindmounts zu den erwarteten Ergebnissen geführt; es scheint, dass sie tief im Raspberry Pi OS erzwungen werden.
Insbesondere wurde das Bind-Mount in ein Block-für-Block-Mount geändert und zu einem einfachen Mount herabgestuft.
Ich bin kein Raspberry Pi OS-Entwickler in diesem Bereich, daher weiß ich nicht, warum. Vielleicht ist es ein Weg, um zu verhindern, dass Anfänger das System versehentlich zerstören.
Ubuntu war in Ordnung, soweit ich es getestet habe.
Beilage 2
Das Ändern des Hostnamens im overlayfs-Status war möglich, soweit ich es mit dem Befehl hostnamectl versucht habe, aber die SSH-Verbindung bleibt ein Problem und die Verbindung kann nur mit dem Hostnamen vor der Änderung hergestellt werden. Nach der Verbindung wird der Hostname ebenfalls geändert, nur SSH scheint den hübschen Hostnamen zu übernehmen. Es scheint, dass es besser wäre, den Hostnamen nach der Deaktivierung von overlayfs zu ändern.
Beachten Sie, dass der SSH-Server unter Ubuntu zunächst nicht installiert ist. Er muss mit dem folgenden Befehl installiert und aktiviert werden.
sudo apt install openssh-server
sudo systemctl enable ssh
sudo systemctl start ssh
Artikel beigetragen von Raspida
Raspberry Pi-Informationsseite, die auch von Nicht-Ingenieuren genutzt werden kann raspida.com eine Raspberry Pi-Informationsseite, die auch für Nicht-Ingenieure interessant ist und mit der sie umgehen können. Er schreibt auch technische Blogartikel auf der PiLink-Website über den Raspberry Pi für den industriellen Einsatz.

