Samstag, 22. Juni 2019

Sheevaplug: Debian 10 Buster mit F2FS rootfs

Vorwort

Seit knapp 10 Jahren verrichten die Sheevaplugs bei mir nun als Homeserver ihren Dienst und sind dank der guten Unterstützung von Debian nach wie vor so ziemlich auf der Höhe. (Zumindest für meinen Einsatz) Leider ist der NAND-Speicher mit seinen 512MB aber mittlerweile doch recht wenig und da es in der Zwischenzeit ja alternative Dateisysteme gibt, die keine SD-Karten mehr fressen (sollten), wage ich mich ans Abenteuer, das rootfs komplett auf eine SD-Karte auszulagern und den NAND nicht mehr zu benutzen.
Eigentlich hört sich das ganze sehr banal an, es gibt aber die eine oder andere Falle.
Ich habe auf jeden Fall ziemlich geübt mit Installer-Images, U-Boot Versionen, Bootvariablen etc. Ich bin jetzt aber auch nicht der Profi Embedded-Entwickler.

Key Facts

  • Meine aktuelle U-Boot Version: 2016.11 von hier (offizielle von Debian 9 Stretch) - die aktuelle hat bei mir nicht richtig funktioniert - vermutlich reicht der Bereich von 0x0 bis 0x80000 nicht ganz aus und es fehlen ein paar Bits - ich musste den Sheeva anschliessend mit OpenOCD unbricken, weil ich keine ältere U-Boot Version mehr geladen bekam - weder per TFTP, USB noch SD-Karte
  • Installer: Der Installer von Buster (von hier)
  • F2FS: F2FS wird vom Debian-Installer (noch) nicht unterstützt. Von U-Boot übrigens auch nicht. Ist aber nicht weiter tragisch, man braucht einfach eine Boot-Partition mit z.B. ext2. Die Root-Partition formatiert man im Installer ebenfalls mit z.B. ext2 und ändert sie nach der Installation in F2FS (dreckig: SD-Karte in PC, Files runterkopieren, Partition mit F2FS neu formatieren, Files zurückspielen, SD-Karte zurück). Hat aber ein paar Hürden (siehe unten).

Anleitung

Aber jetzt schön Schritt für Schritt:
  1. Debian Buster ("Stable") auf SD-Karte oder USB-Stick installieren. Das geht am besten mit der altbewährten Anleitung von Martin Michelmayr, zu finden hier 
  2. Debian Buster booten und als root einloggen
  3. F2FS-Tools installieren (apt-get install f2fs-tools)
  4. Im File /etc/initramfs-tools/modules folgende Einträge hinzufügen: f2fs crc32 crc32c (jeweils auf eine neue Zeile)
  5. fstab vom UUID auf Devicenamen ändern (im File /etc/fstab UUID=... durch /dev/mmcblk0p2 ersetzen, zusätzlich beim rootfs [Mountpoint /] der Dateisystemtyp von z.B. ext2 auf f2fs und die Optionen von *noatime oder was weiss ich* auf defaults)
  6. Folgenden Befehl ausführen: update-initramfs -u
  7. Debian herunterfahren
  8. SD-Karte oder Stick in den PC stecken
  9. Root-Partition auf den PC kopieren (cp -ar)
  10. Root-Partition mit F2FS formatieren (mkfs.f2fs /dev/mmcblk0p2 oder /dev/sdb2 tbc)
  11. Root-Partition vom PC auf die SD-Karte zurückkopieren
  12. SD-Karte oder Stick wieder in den Sheeva stecken, nun sollte Buster mit F2FS als Rootfs booten
  13. fertig

 Bemerkungen

  • USB-Stick hat bei mir nicht funktioniert. Entweder sind meine USB-Sticks nicht geeignet, mein USB-Controller im Sheeva hat einen Schuss oder es ist ein Firmware-Fehler vom U-Boot - habe ich nicht näher analysiert
  • mit Stretch bootet der Sheeva nicht ab einem F2FS Rootfs - auch wenn man alles genau so macht wie oben beschrieben (obschon F2FS existiert und auch in die Init-Ramdisk geladen werden kann)
  • Mir geht es bei F2FS nicht um Performance sondern nur darum, dass der Sheeva keine Speicherkarten (mehr) frisst.