ArchLinuxARM auf dem Raspberry Pi read-only betreiben

Häufige Schreibzugriffe auf die SD-Karte eines Raspberry Pi können die Lebenszeit der SD-Karte deutlich verkürzen. Unabhängig davon kann bei einem Stromausfall das Dateisystem auf der SD-Karte beschädigt werden, was zu Datenverlust führen kann. Gleich zwei Gründe, die Root-Partition read-only (“nur lesend”) zu mounten. So finden keine Schreibzugriffe mehr statt und ein Stromausfall macht einem read-only gemounteten Dateisystem auch nichts mehr aus.

Zur Vorbereitung gilt es, die Verzeichnisse zu identifizieren, in die trotz read-only mounten der Root-Partition weiterhin geschrieben werden muss. Dies hängt natürlich von den installierten Diensten (bei mir neben dem Basissystem insbesondere OpenHAB und OpenVPN). Daraus ergeben sich die Verzeichnisse:

  • /var/lib/systemd
  • /var/tmp
  • /var/log
  • /home/alarm/openhab/logs
  • /home/alarm/openhab/webapps/static
  • /var/lib/samba
  • /var/spool/anacron

In diese Verzeichnisse wird nun per Mount eine Ramdisk gehängt, die Optionen der Boot-Parition wird um ,ro ergänzt.

/etc/fstab
1
2
3
4
5
6
7
8
9
10
11
12
# 
# /etc/fstab: static file system information
#
# <file system> <dir> <type> <options> <dump> <pass>
/dev/mmcblk0p1 /boot vfat defaults,ro 0 0
tmpfs /var/lib/systemd tmpfs defaults,size=10M 0 0
tmpfs /var/tmp tmpfs defaults 0 0
tmpfs /var/log tmpfs defaults 0 0
tmpfs /home/alarm/openhab/logs tmpfs defaults 0 0
tmpfs /home/alarm/openhab/webapps/static tmpfs defaults 0 0
tmpfs /var/lib/samba tmpfs defaults,noauto 0 0
tmpfs /var/spool/anacron tmpfs defaults 0 0

Um die Root-Parition Read-only zu mounten wird die Kernel-Option rw auf ro geändert:

/boot/cmdline.txt
1
root=/dev/mmcblk0p2 ro rootwait console=ttyAMA0,115200 console=tty1 selinux=0 plymouth.enable=0 smsc95xx.turbo_mode=N dwc_otg.lpm_enable=0 kgdboc=ttyAMA0,115200 elevator=noop

Jetzt heisst es neu starten und prüfen ob alle Dienste noch wie gewünscht funktionieren. Hier hilft ein Blick auf die Ausgabe von sudo systemctl --failed. Sollten hier Dienste aufgelistet werden, sollte geprüft werden, warum diese nicht gestartet werden konnten und ggf. Ergänzungen in der Datei /etc/fstab vorgenommen werden.