Read-only Filesystem = RO-FS
Ein RO-FS ist robuster gegenüber ungewollten Veränderungen und Korruptionens des Dateisystems.
Linux-Systeme, welche für eine Robotersteuerung oder in einem anderen embedded Bereich genutzt werden, werden oft mit einem RO-FS betrieben. Das stellt sicher, dass die Software des Systems in einem definierten Bereich eingefroren wird.
Mit einem RO-FS muss das System auch nicht mehr heruntergefahren werden.
Mit dieser Methode kann eine Partition zur Laufzeit neu gemounted werden.
Das kann nützlich sein, wenn man bei einem permanenten RO-System etwas verändern will.
Nach einem Neustart werden die Partitionen wieder so gemounted, wie im /etc/fstab
definiert.
Mit lsblk
können alle gemounteten Partitionen aufgelisted werden.
Read-only mounten:
sudo mount -o remount,ro /partition/identifier /mount/point
Read-write mounten:
sudo mount -o remount,rw /partition/identifier /mount/point
Man kann diese Befehle einfach in Shell-Scripts (remount_RW.sh / remount_RO.sh) speichern.
Das ganze System wird RO gemountet. Keine Logs werden geschrieben. Daten können auch nicht temporär gespeichert werden. Das ist nur für einfache (Buildroot) Systeme praktikabel.
Um die Partition des Systems dauerhaft in RO zu mounten siehe Kapitel Partition permanent RO mounten
Oft ist es notwendig, dass das Teile des FS Schreibrechte besitzen.
Einige Beispiele:
/var/log
: Ubuntu, und auch viele andere Linux Distributionen, schreiben Logs in diesen Ordner./var/lib/urandom
: Hier werden Seeds für den Zufallsgenerator (/dev/urandom
) gespeichert. Wenn keine Seeds gespeichert werden können, dann funktioniert der Zufallsgenerator nicht mehr zuverlässig. /etc/dropbear
: Keys für SSH-Daemon Dropbear/var/lib/dropbear
: Ebenfalls Keys für SSH-Daemon DropbearDie Ordner können so gemounted werden, dass die Daten nach einem Neustart erhalten bleiben (dauerhaft) oder dass sie nach einem Neustart wieder gelöscht werden (temporär).
Im Kapitel Eingeschränkte RW-Möglichkeiten für bestimmte Funktionen wird beschrieben, wie ein Teil des Systems RW gemountet werden kann.
In der Datei /etc/fstab
wird konfiguriert, wie die diversen Partitionen beim Start des Systems gemountet werden.
Abhängig von System wird eine oder mehrere Partitionen gemountet.
Um die Partition im read-only Modus zu mounten, muss bei den <options>
'ro
' übergeben werden.
Beispiel vorher:
/dev/sda1 / ext4 nosuid,nodev,nofail,x-gvfs-show 0 0
Beispiel read-only:
/dev/sda1 / ext4 ro,nosuid,nodev,nofail,x-gvfs-show 0 0
Um zusätzliche RW-Funktionalität zum RO-FS zur Verfügung zu stellen, gibt es zwei Möglichkeiten
tmpfs
mounten → Daten gehen nach Neustart verloren; RAM wird benötigt
Ein tmpfs
oder Temporäres Filesystem ist im Arbeitsspeicher (RAM) gemountet.
Es belegt Platz im Arbeitsspeicher und nicht auf einem Massenspeicher.
Dadurch kann sehr schnell darauf geschrieben und davon gelesen werden, die Daten sind nach einem Neustart aber verloren.
In diesem Beispiel wird ein Order im tmpfs
gemountet.
Mit dem 'Symlink-Trick' können aber auch diverse verschiedene Ordner in einer tmpfs
-Partition verwendet werden.
Im /etc/fstab/
eine tmpfs
-Partition mounten:
tmpfs /var/log tmpfs defaults,noatime,nosuid,mode=0755,size=512M 0 0
tmpfs
512MByte gross.tmpfs
geschrieben. Die Logs werden gelöscht, sobald der Rechner herunterfährt.tmpfs
gemounted werden sollen, dann muss für jeden Ordner eine neue Zeile hinzugefügt werden. Jeder Ordner erhält den zugewiesenen (size=512M
) Speicherplatz.tmpfs
Partition gemountet werden.Siehe RW-Partition → Symlink-Trick
Es kann eine zusätzliche Partition erstellt werden, die beim Systemstart mit RW-Rechten gemountet wird. Die Partition kann sich auch auf einem externen Speicher befinden.
Die Partition kann bereits bei der Installation der Linuxdistribution erzeugt werden (ähnlich wie in dieser Anleitung für Ubuntu). Alternativ können auch bei einem bereits bestehenden System die Partitionen verändert werden. Dazu muss Ubuntu oder ein ähnliches System von einem USB-Stick gebootet werden. Im Anschluss kann Gparted verwendet werden, um eine bestehende Partition zu verkleiner und eine neue Partition im Freien Platz zu erzeugen.
Eine neue erstellte Partition wird standardmässig immer RW gemountet.
In der Datei /etc/fstab
kann definiert werden, welcher Ordne in dieser Partition gemountet werden soll:
/dev/sda2 /var/log ext4 nosuid,nodev,nofail,x-gvfs-show 0 0
Mit diesem Trick können mehrere verschiedene Ordner in einer RW Partition gespeichert werden.
sudo mkdir /data sudo chown user:user /data mkdir /data/var sudo mv /var/log /data/var/ sudo ln -s /data/var/log /var/log
Der /data
Ordner kann wahlweise in einem tmpfs
oder in einer RW Partition gemountet werden.
/etc/dropbear
Der fscheck
überprüft in regelmässigen Abständen (nach einer gewissen Anzahl Bootvorgängen oder nach einer gewissen Zeit) das Dateisystem beim Boot.
Normalerweise dauert dieser Vorgang nur einige Minuten und ist empfehlenswert.
Dadurch können Dateien wiederhergestellt werden, deren Schreibvorgang durch einen Systemabsturz oder plötzlichen Stromverlust unterbrochen wurden.
In einem reinen RO-System bringt dieser Check aber keinen Nutzen. Der sporadisch verlängerte Bootvorgang kann sogar sehr störend sein.
Eine Partition wird nur Überprüft, wenn die letzte Zahl im /etc/fstab
keine 0 ist.
Bsp. für Partition, welche überprüft wird:
/dev/sda1 / ext4 nosuid,nodev,nofail,x-gvfs-show 0 1
Bsp. für Partition, welche nicht überprüft wird:
/dev/sda1 / ext4 nosuid,nodev,nofail,x-gvfs-show 0 0
sudo touch /forcefsck sudo reboot
Der wird beim nächsten Neustart einmal durchgeführt.
Mit Overlayroot kann einfach ein RO-FS bei einem Ubuntusystem eingerichtet werden
Bei custom Linux-Kernel scheint dies aber nicht richtig zu funktionieren. Nach der Installation bootet Ubuntu ohne Fehlermeldung direkt in den normalen RW-Modus. Dieser Artikel zeigt eine mögliche Lösung, die aber auch nicht garantiert funktioniert
apt-get install overlayroot
sudo nano /etc/overlayroot.conf
overlayroot=„“
to overlayroot=„tmpfs“
mount
overlayroot on / type overlayfs …
beginnt, dan funktioniert Overlayrootoverlayroot on / type overlayfs (rw,lowerdir=/media/root-ro/,upperdir=/media/root-rw) proc on /proc type proc (rw) none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw,noexec,nosuid,nodev) none on /sys type sysfs (rw,noexec,nosuid,nodev) ...
Der PC wird nur einmal ohne overlayroot
starten.
Für eine permanente Deaktivierung siehe nächstes Kapitel.
overlayroot=disabled
bei der Zeile hinzufügen, die mit linux
beginnt.menuentry 'Ubuntu, with Linux 3.5.0-54-generic (Writable)' --class ubuntu --class gnu-linux --class gnu --class os { recordfail gfxmode $linux_gfx_mode insmod gzio insmod part_msdos insmod ext2 set root='(hd0,msdos1)' search --no-floppy --fs-uuid --set=root 28adfe9d-c122-479a-ab81-de57d16516dc linux /vmlinuz-3.5.0-54-generic root=/dev/mapper/faramir-root ro overlayroot=disabled initrd /initrd.img-3.5.0-54-generic }
sudo nano /etc/overlayroot.conf
overlayroot=„tmpfs“
to overlayroot=„“