Einführung in OverlayRootfs
OverlayRootfs bezeichnet ein Root-Dateisystem, das mit der OverlayFS-Technologie erstellt wurde. OverlayFS ist ein Union-Dateisystem (UnionFS), das die Zusammenführung mehrerer Dateisystemebenen in einer einzigen Ansicht ermöglicht und in Linux-Systemen weit verbreitet ist. Geräte mit OverlayRootfs können problemlos Schreibschutz- und Werksreset-Funktionen für das Root-Dateisystem implementieren.
Schreibschutz für das Root-Dateisystem
Auf Firefly-Geräten, die OverlayRootfs unterstützen, wird die Rootfs-Partition schreibgeschützt unter /root-ro (der unteren Ebene) gemountet. Alle Benutzeränderungen werden in /userdata/rootfs_overlay (der oberen Ebene) der Userdata-Partition und nicht in die Rootfs-Partition geschrieben. Dadurch wird sichergestellt, dass die Rootfs-Partitionsdaten schreibgeschützt bleiben und nicht beschädigt werden. OverlayRootfs führt /root-ro und /userdata/rootfs_overlay zu einer einzigen Ansicht zusammen und macht sie für den Benutzer unsichtbar.
Beispielbeschreibung
Häufige Stromausfälle und Neustarts auf Linux-Geräten können Lese-/Schreibpartitionen beschädigen und einen ordnungsgemäßen Start verhindern. Firefly-Geräte mit aktiviertem OverlayRootfs verwenden die Benutzerdatenpartition als eigentliche Lese-/Schreibpartition. Selbst wenn ein Stromausfall die Benutzerdatenpartition beschädigt, kann das Gerät das Root-Dateisystem weiterhin schreibgeschützt starten. Benutzer können das Gerät weiterhin steuern, um Partitionswiederherstellungen und Datensicherungsvorgänge durchzuführen. Hier ist ein Beispiel für ein System, das nach manueller Zerstörung der Benutzerdatenpartition schreibgeschützt startet:

Sie können eine Datei erstellen oder löschen, um OverlayRootfs zu testen. Die eigentlichen Daten werden in /userdata/rootfs_overlay geschrieben.
-
# Create a file that can be found in the same directory under /userdata/rootfs_overlay/
-
root@firefly:~# touch /usr/local/bin/firefly-test
root@firefly:~# ls /userdata/rootfs_overlay/usr/local/bin/firefly-test
/userdata/rootfs_overlay/usr/local/bin/firefly-test
# Delete the corresponding files under /userdata/rootfs_overlay/. The corresponding files in the real file system will also be modified.
root@firefly:~# rm -rf /userdata/rootfs_overlay/usr/local/bin/firefly-test
root@firefly:~# ls /usr/local/bin/
-
disable_ModemManager.sh docker-compose ec200.sh quectel-CM restart_plank.sh
Da die RootFS-Partition schreibgeschützt ist und nicht geändert werden kann, können Sie mit df -h feststellen, dass der verfügbare Speicherplatz auf der RootFS-Partition klein ist. Dies ist normal, da der Benutzer tatsächlich in die Benutzerdatenpartition schreibt.

Werkseinstellungen wiederherstellen
Durch Ausführen des „Recovery Reset“ wird die Benutzerdatenpartition automatisch gelöscht und das Dateisystem des Geräts in seinen ursprünglichen Zustand unmittelbar nach dem Flashen zurückgesetzt.
-
# Create a file verification function and execute recovery reset to restore factory settings.
-
root@firefly:~# touch /home/firefly/test
-
root@firefly:~# ls /home/firefly/test
-
/home/firefly/test
-
root@firefly:~# recovery reset
command: --wipe_all
-
update: write command to command file: done
-
update: write command to misc file: done
-
update: reboot!
# After reboot
-
root@firefly:~# ls /home/firefly/test
-
ls: cannot access '/home/firefly/test': No such file or directory
OverlayRootfs deaktivieren
OverlayRootfs muss möglicherweise in einigen Szenarien deaktiviert werden, z. B. beim Schnellstart, A&B-System usw. Sie können die OverlayRootfs-Funktion aktivieren/deaktivieren, indem Sie die Kernel-Startparameter ändern. Beispiel: RK3576:
-
# Modify the kernel's dts chosen node.
-
kernel/arch/arm64/boot/dts/rockchip/rk3576-linux.dtsi
chosen: chosen {
-
// Disable OverlayRootfs functionality
-
//bootargs = "earlycon=uart8250,mmio32,0x2ad40000 console=ttyFIQ0 root=PARTUUID=614e0000-0000 rw rootwait rcupdate.rcu_expedited=1 rcu_nocbs=all";
// Enable OverlayRootfs functionality
-
bootargs = "earlycon=uart8250,mmio32,0x2ad40000 console=ttyFIQ0 root=PARTLABEL=rootfs rootfstype=ext4 ro rootwait overlayroot=device:dev=PARTLABEL=userdata,fstype=ext4,mkfs=1 rcupdate.rcu_expedited=1 rcu_nocbs=all net.ifnames=0";