Standardmäßig bootet der Raspberry Pi von einer SD-Karte. Das mag für den Hausgebrauch ausreichen, ist aber auf einem produktiven System, das (mit einem Beta-Betriebssystem) rund um die Uhr längere Zeit im Einsatz ist und kontinuierlich Daten lesen und schreiben soll (irgendeine Form der Persistenz muss sein, sonst wird die Erstellung von Zeitreihen schwierig) unglücklich: Die Zugriffszeiten bei SD-Karten sind ausbaufähig, und die Teile verkraften nur eine gewisse Anzahl an Schreibvorgängen.

Grund Genug also, dem Raspi die SD-Karte abzugewöhnen und ihm eine Festplatte zu verpassen.

Das ist für mich jetzt komplettes Neuland: Ich habe noch nie einen Raspi für den Boot von Festplatte umgerüstet. Da ich das Rad nicht neu erfinden kann bzw. will, habe ich mir die Infos dafür hier „zusammen geliehen“. In der Theorie ist das ganz leicht: Firmware des Raspi aktualisieren, Festplatte mit RaspberryPiOS anstöpseln, booten – und hoffen, dass es klappt. Wie sagte mal ein bekannter Fußballer: „Schaun mer ma, dann sehn mer scho“…

Firmware-Update

Das Ganze besteht aus zwei Schritten: Zuerst wird der Raspi aktualisiert:

sudo apt-get update

sudo apt-get upgrade

sudo rpi-update

[singlepic id=338 w=800]

Wie ihr seht, ist jetzt ein Reboot erforderlich – nix leichter als das:

sudo reboot

Nach dem Neustart erfolgt das eigentliche Firmware-Update:

sudo apt install rpi-eeprom

Danach muss in der Datei /etc/default/rpi-eeprom-update das „critical“ durch ein „beta“ ersetzt werden:

sudo nano /etc/default/rpi-eeprom-update

[singlepic id=339 w=800]

Dann ist es soweit: Die Firmware wird aktualisiert:

sudo rpi-eeprom-update -d -f /lib/firmware/raspberrypi/bootloader/beta/pieeprom-2020-05-15.bin

[singlepic id=340 w=800]

Danach ist mal wieder ein Reboot fällig.

Nach dem Reboot setzen wir folgende zwei Befehle ab und überzeugen uns, dass alles geklappt hat:

vcgencmd bootloader_version

vcgencmd bootloader_config

[singlepic id=341 w=800]

Interessant ist hier die BOOT_ORDER (letzte Zeile): Die Dokumentation nennt folgende Werte:

  • 0x0 – NONE (stop with error pattern)
  • 0x1 – SD CARD
  • 0x2 – NETWORK
  • 0x3 – USB device boot (usbboot) – Compute Module only.
  • 0x4 – USB mass storage boot
  • 0xf – RESTART (loop) – start again with the first boot order field.

Wenn ich diesen Wert richtig interpretiere, heißt das soviel wie „Boote zuerst von der Festplatte, danach von der SD-Karte“. Also sollte alles hinhauen…

Die Festplatte

Bevor wir jetzt eine USB-Festplatte anschließen, müssen wir diese vorbereiten. Das ist aber nicht weiter wild: Sie muss nur das Betriebssystem-Image erhalten, das wir auf die SD-Karte geflasht haben, als wir den Raspi klargemacht haben. Außerdem muss auch hier die Datei mit dem Namen ssh vorhanden sein. Dann ist es soweit: Wir können sie anschließen.

Bevor es nun aber wirklich losgeht, kopieren wir noch einige Dateien auf die Platte (die wir zuerst noch mounten):

sudo mkdir /mnt/ssd

sudo mount /dev/sda1 /mnt/ssd

sudo cp /boot/*.elf /mnt/ssd

sudo cp /boot/*.dat /mnt/ssd

Danach schalten wir den Raspi aus:

sudo poweroff

Jetzt kann die SD-Karte entfernt und der Raspi wieder eingeschaltet werden. Nach ein paar Sekunden sollten wir uns verbinden können – die Warnung, dass der SSH-Key nicht mehr stimmt, ist korrekt – technisch gesehen haben wir das Betriebssystem neu installiert, und dadurch wurden auch neue SSH-Keys generiert.

Achtung: Da es sich um eine Neuinstallation handelt, lautet das Passwort wieder „raspberry“ – das System kann dann wieder mit raspi-config eingerichtet werden.

Das war’s – der Raspberry Pi bootet jetzt von einer angeschlossenen USB-Festplatte. Im nächsten Teil installieren wir Docker, damit wir uns dann (endlich) mit Home Assistant befassen können.