Raspberry Pi: SD-Karte Read-Only machen

Eines meiner aktuellen Projekte (Details dazu ein anderes Mal) basiert auf einem Raspberry Pi. Bei mir ist es sogar noch ein alter Pi der ersten Generation – funktioniert aber noch einwandfrei. Die SD-Karte altert, wie jede SD-Karte, durch Schreibvorgänge. Durch häufiges oder dauerhaftes Nutzen des Raspi altert die SD-Card also schneller. Dies möchte ich verhindern bzw. verlangsamen, indem ich die SD-Karte Read-Only setze.

Basierend auf diesem Artikel habe ich mir die für mich passenden Maßnahmen herausgesucht. Es gibt noch andere Methoden und Maßnahmen, dem Raspi das Schreiben abzugewöhnen, aber diese scheinen aus meiner Sicht bzw. für meinen Zweck am besten zu passen:


Strategie ist:

  1. Log an den Remote Log-Server schicken
  2. Schreiben verhindern (Swap, div. Pakete löschen)
  3. Div. Verzeichnisse, die noch geschrieben werden (müssen), als Ramdisk mounten
  4. / und /boot Readonly mounten

Was ich konkret getan habe:

  1. Syslog nach remote schicken: vi /etc/rsyslog.d/90-dstk-graylog.conf:
    *.* @192.168.99.99:514;RSYSLOG_SyslogProtocol23Format
    
  2. Swap entfernen:
    systemctl disable dphys-swapfile
    apt-get remove dphys-swapfile
    
  3. Geänderte Dateien suchen, um schreibende Pakete zu finden. Dazu findet dieser find alle seit dem letzten Boot geänderten Dateien (genauer stehts im oben verlinkten Artikel):
    find / /boot -xdev -newermt "$(cat /etc/fake-hwclock.data) UTC" -ls
    
  4. Unwichtige Pakete entfernen, die “zu viel” schreiben (ich hab nur eins gelöscht):
    apt-get remove logrotate
    
  5. Verzeichnisse in Ramdisk verlagern: vi /etc/fstab:
    tmpfs /tmp       tmpfs nodev,nosuid 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
    

    Dann erst nochmal rebooten und beobachten.

  6. Root (/) und /boot-Filesysteme auf Read-Only setzen: vi /etc/fstab: Dort entsprechend bei den Optionen “ro” einfügen:

    PARTUUID=29663969-01  /boot           vfat    defaults,ro          0       2
    PARTUUID=29663969-02  /               ext4    defaults,noatime,ro  0       1
    

Wenn ich später nochmal was am System machen will, hänge ich die beiden Dateisysteme wieder mit RW ein:

mount -o remount,rw /
mount -o remount,rw /boot

Jetzt ist die SD-Karte Read-Only und das System läuft komplett ohne auf die SD-Karte zu schreiben – sogar die syslog-Ausgaben kann ich trotzdem noch lesen 😀
Weiterer “Nebeneffekt”: Ich kann den Raspberry Pi hemmungslos im Betrieb ausschalten (lassen), ohne dass das Dateisystem beschädigt werden könnte.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.