Wenn man seinen Raspberry an eine unsichere Stromquelle hängt, oder sonstwie in die Versuchung kommt, ihn einfach auszuschalten ohne vorher ein Shutdown gemacht zu haben, kommt es ab und zu vor, dass dadurch das Linux Dateisystem korrupt wird.
Um dies zu vermeiden, sollte man die Root Partition Read-Only machen und nur seine beweglichen Daten auf einer extra Partition ablegen. Im Netz findet man verschiedene Anleitungen, wie man eine Konfiguration mit einer Read-Only Root Partition macht, aber das deckt ja nicht den Normalfall ab. Man will meist auch Daten produzieren und die lokal ablegen. Dazu braucht man also eine Extra Partition, die R/W ist. Dort kann es aber in der Tat passieren, dass diese Partition korrupt wird, aber man kommt trotzdem an das System – es bleibt bootbar. Die R/W Partition kann man nun reparieren, wobei es leider manchmal zum Datenverlust kommt – aber nur für die dynamischen Daten! Deswegen sollte man auch im R/W System die statischen Daten des Users von den dynamischen Daten des Users trennen.
Um die SD Karte ohne Datenverlust mit einer weiteren Partition zu versehen, siehe meinen Artikel Raspberry – Aufteilung der SD Karte.
Danach ist dann noch folgendes zu machen (im Prinzip dynamische Daten auf tempfs Partitionen verschieben, die nicht R/O ist). Folgendes ist wieder mit root Rechten zu machen, also entweder ‚su – ‚ oder mit sudo:
cd /etc
mv resolv.conf /run
ln -s ../run/resolv.conf
vi fstab
Die fstab sollte dann folgende Einträge besitzen – eventuell seinen eigenen Bedürfnissen anpassen (z.B. PARTUUID):
proc /proc proc defaults 0 0
PARTUUID=2963814f-01 /boot vfat ro,defaults 0 2
PARTUUID=2963814f-02 / ext4 ro,defaults,noatime 0 1
PARTUUID=2963814f-03 /mnt/home ext4 defaults,noatime 0 1
# a swapfile is not a swap partition, no line here
# use dphys-swapfile swap[on|off] for that
# more for r/o systems:
tmpfs /var/lib/systemd tmpfs mode=0755 0 0
tmpfs /var/lib/private tmpfs mode=0700 0 0
tmpfs /var/log tmpfs nodev,nosuid 0 0
tmpfs /var/tmp tmpfs nodev,nosuid 0 0
tmpfs /var/cache tmpfs nodev,nosuid 0 0
tmpfs /tmp tmpfs nodev,nosuid,mode=1777 0 0
Dynamsche Teile des System liegen nun teilweise auf einer Memory Filesystem, desssen Inhalt nach einem Reboot natürlich weg ist!
Weiter noch anpassen:
cd /boot
vi cmdline.txt --> hier ist 'ro' einzufügen! z.B. so:
console=serial0,115200 console=tty1 root=PARTUUID=5315105e-02 ro rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait
Nach einem Reboot ist jetzt die / Partition nur noch r/o, d.h. ein Benutzer kann nichts mehr speichern! Also ziehen wir die Benutzer auf die r/w Partition um! Zuerst machen wir / wieder r/w
sudo mount -o remount,rw /
Oh – das geht nicht, aber bei einem anderen System geht es … hm
sudo mount -o remount,rw /dev/root /
Damit ging es … umgekehrt geht es auch:
sudo mount -o remount,ro /
Hier hatte ich mal das Problem, dass das nicht ging mit der Meldung mount: /: mount point is busy. Dann hilft wohl nur ein reboot.
Nun sollte man die normalen User noch auf die R/W Partition umziehen.
cd /home
mv pi /mnt/home
ln -s /mnt/home/pi pi
vi /etc/passwd --> die nötigen User entsprechend ändern
Probleme:
ein apt-get upgrade ging nicht, da /var/cache im tmpfs zu klein war!
Abhilfe: das Directory, was zu klein war, auf die r/w Partition legen und einen Link dahin anlegen!
Tipp: wie stelle ich fest, was r/o ist:
awk '$4~/(^|,)ro($|,)/' /proc/mounts