Raspberry Pi von USB, NVMe-SSD, SD-Karte, Netzwerk & co starten: Das solltest du zur Startreihenfolge wissen

Als Video ansehen
Bereitgestellt über YouTube

Raspberry Pi von USB, NVMe-SSD, SD-Karte, Netzwerk & co starten: Das solltest du zur Startreihenfolge wissen

Betriebssystem ausschließlich auf der Micro-SD Speicherkarte? Das gehört schon längst der Vergangenheit an! Inzwischen kann der Raspberry Pi von einer ganzen Reihe an verschiedenen Medien starten. Hier erfährst du, welche es gibt, wofür sie nützlich sind und wie man sie ändern kann. Dafür gibt es verschiedene Methoden, die sich an Einsteiger und Fortgeschrittene richten.

Das steckt hinter der Startreihenfolge

Viele werden den Begriff schon von X86 PCs und Notebooks kennen: Im BIOS/UEFI wird festgelegt, von welchen Schnittstellen bzw. Geräten es nach der Initialisierung starten soll. Dabei kann es sich um fest verbaute Laufwerke wie SSDs handeln, auf denen ein Bootloader liegt, der wiederum das Betriebssystem startet. Oder um Wechseldatenträger. Früher waren das CDs/DVDs als Startmedium, die als Live-Systeme direkt gestartet bzw. zur Installation des Betriebssystems genutzt wurden. Inzwischen haben sie USB-Sticks abgelöst.

Im Detail ist das bei Einplatinencomputern wie dem Raspberry Pi etwas anders.123 Dort kann man leider keine generischen Installationsmedien verwenden, weil diese aufgrund fehlender Standards für jedes Gerät einzeln angepasst werden müssen. Grundsätzlich ist das Prinzip jedoch gleich: Statt eines BIOS/UEFI existiert beim Raspberry Pi eine eigene Firmware, die versucht, das Betriebssystem von einem Medium zu starten. Ursprünglich lag das auf einer Micro-SD Speicherkarte, was bis heute dem offiziellen Standard-Weg entspricht. Über die Jahre wurde der Ruf nach langlebigeren sowie mit steigender Leistungsfähigkeit des Raspberry Pi auch schnelleren Medien laut.

Bis zum Raspberry Pi 4 war das Starten von USB die einzige Alternative: Hier wird das Betriebssystemabbild auf eine per USB-Adapter oder Gehäuse angeschlossene SSD übertragen. Seit dem Raspberry Pi 5 steht dank PCIe mit NVMe eine native Alternative zur Verfügung, über die sich M.2 SSDs anschließen lassen. Damit der Raspberry Pi von USB oder NVMe starten und damit eine Speicherkarte vollständig ablösen kann, muss dies in der Startreihenfolge ggf. angepasst werden. Wie das funktioniert und worauf du achten solltest, zeigen die folgenden Abschnitte.

Der einfache, aber eingeschränkte Weg per raspi-config

Das Werkzeug raspi-config enthält als zentrale Oberfläche die meisten Einstellungen in recht einfach zu bedienen Menüs. So finden sich Einsteiger leichter zurecht, die mit der GNU/Linux Kommandozeile noch wenig vertraut sind. Öffne es mit sudo raspi-config als Root und navigiere zu 6 Advanced Options > A4 Boot Order. Dort stehen drei Optionen zur Verfügung:

B1 versucht es zuerst mit der Micro-SD Speicherkarte, dann per NVMe von M.2 SSDs (nur beim Raspberry Pi 5) und schlussendlich von möglicherweise angeschlossenen externen USB-Laufwerken.
B2 beginnt mit NVMe, es folgt USB und die Speicherkarte.
B3 sucht auf der Speicherkarte nach einem Betriebssystem, andernfalls wird per Netzwerk gebootet.

Für viele sind dies wohl die wichtigsten Varianten: Wer die Karte nutzt, wählt B1. Für externe USB-Speichergeräte ist B2 am besten geeignet. B3 ist schon spezieller und vor allem dann sinnvoll, wenn man eine größere Zahl an Raspberry Pis besitzt oder die Pis aus der Ferne installiert werden sollen. Hier spart man sich das händische Überspielen des Raspberry Pi OS auf die Speicherkarte, die anschließend händisch in den Pi gesteckt werden muss. Stattdessen bekommt er über das Netzwerk Anweisungen, welches Abbild zu starten ist und wo dies liegt. Das ist praktisch, erfordert jedoch vorbereitend die dafür notwendige Infrastruktur.

Hinweis: Um PCI-Express mit dem Raspberry Pi zu nutzen, muss es einmalig in der config.txt aktiviert (/boot/firmware/config.txt, zuvor /boot/config.txt) aktiviert werden:

[all]
dtparam=pciex1

Volle Kontrolle über die Startreihenfolge

Wie ich im Beitrag zu raspi-config bereits erwähnt habe, ist das Programm in erster Linie eine einheitliche Oberfläche für diverse Einstellungen – teilweise spezifische des Raspberry Pi, andere für grundlegende GNU/Linux-Werkzeuge. Oder anders ausgedrückt: Mit raspi-config werden Einstellungen von anderer Software gesetzt. Es ruft wiederum deren Kommandozeilenwerkzeuge auf, falls verfügbar. Oder ändert alternativ ihre Konfigurationsdateien. Nutzen wir diesen direkten Weg zum Ändern von Einstellungen, haben wir teils zusätzliche Möglichkeiten, da raspi-config sich auf die wichtigsten Beschränkt.

Im Falle der Startreihenfolge wird diese in der Variable BOOT_ORDER der Firmware eingestellt. Man kann sie mit folgendem Befehl bearbeiten:

sudo rpi-eeprom-config --edit

Es öffnet die aktuelle Bootloader-Konfiguration im Standard-Texteditor. Wurde er nicht bewusst auf vim oder einen anderen Editor geändert, ist das nano. Ab Werk sind nur wenige Variablen gesetzt:

BOOT_ORDER ist eine 32-Bit Ganzzahl ohne Vorzeichen, d.H. es sind nur positive Werte >= 0 erlaubt. Jede der insgesamt maximal 8 möglichen Ziffern gibt einen möglichen Bot-Modus an. Allerdings wird die Variable von rechts nach links gelesen. Ein Blick in die Dokumentation gibt Auskunft über die aktuell und ehemals unterstützen.4

Den Standardwert 0xf41 können wir somit wie folgt aufschlüsseln:

  • 1 steht für die SD-Karte. Der Bootloader versucht dort zuerst ein Betriebssystem zu finden, das gestartet werden kann, weil er die Variable von rechts statt links ließt.
  • 4 erlaubt das Starten von extern angeschlossenen USB-Speichermedien wie z.B. externe Festplatten/SSDs oder USB-Sticks.
  • f ist kein eigenes Gerät, sondern sorgt für eine Schleife: Konnte von den beiden vorherigen nicht gestartet werden, beginnt die festgelegte Reihenfolge erneut. Der Bootloader würde in diesem Beispiel also erst die Karte und dann USB versuchen. Dadurch können Medien nachträglich ohne händischen Neustart angeschlossen werden. Ist das nicht gewünscht, kann e alternativ den Start mit einer Fehlermeldung unterbrechen.

Wie die Tabelle zeigt, sind eine ganze Reihe an Modus verfügbar. Ihr Verhalten unterscheidet sich teilweise je nach verwendetem Raspberry Pi Modell – manche sind gar nur für bestimmte verfügbar oder können auf einzelnen nicht genutzt werden. HTTP ist beispielsweise recht neu: Man hat es hinzugefügt, um direkt in den Raspberry Pi Imager zu booten. Das ermöglicht die Netzwerk-Installation, welche ich bereits 2022 als Beta-Funktion vorgestellt habe. Sie ist inzwischen stabil für den Raspberry Pi 4 verfügbar. Die Firmware des Raspberry Pi 5 unterstützt sie bislang nicht.

In dieser Konfiguration kann man sie auf dem 4er übrigens mit NET_INSTALL_ENABLED=1 aktivieren bzw durch 0 abschalten – aktiviert verzögert sie den Startprozess minimal um etwa eine Sekunde. Ebenfalls interessant kann die Gruppierung sein: Einträge in der Gruppe [all] werden immer geladen. Man kann alternativ Bedingungen festlegen: [gpio8=0] wird beispielsweise nur geladen, wenn an GPIO-Port #8 kein Signal anliegt (low). Standardmäßig steht dies auf 1 (high). So könnte man einen Schalter anschließen, der eine bestimmte Startreihenfolge aktiviert/deaktiviert.

Das manuelle festlegen der BOOT_ORDER Variable hat nicht nur den Vorteil, dass uns solche erweiterten Möglichkeiten zur Verfügung stehen, die raspi-config fehlen. Wir können die Startreihenfolge zudem beliebig fein festlegen. Insbesondere beim Testen ist das praktisch: Haben wir z.B. B2 NVMe/USB in raspi-config aktiviert, wird eine per SSD oder NVME (RPI5) angeschlossene SSD immer bevorzugt. Soll jedoch der nächste Start zur Speicherkarte erfolgen, um etwa die Leistung vergleichen zu können, muss die SSD ausgesteckt werden. Mindestens nervig und auf Dauer eine mechanische Belastung für die Stecker, wenn das öfter vorkommt. Schließen wir USB oder NVMe dagegen schlicht per BOOT_ORDER aus, kann alles angeschlossen bleiben. Es wäre sogar möglich, das Startlaufwerk aus der Ferne zu wechseln.

Falls etwas nicht funktioniert: Die Firmware aktualisieren

Zur Firmware gehört der Bootloader, welcher vor dem Raspberry Pi OS als Betriebssystem gestartet wird. Die in den folgenden Schritten festgelegten Startreihenfolge schreibt der Raspberry Pi daher in die Konfiguration des Bootloaders. Beim Starten lädt er diese und versucht, von ausgewählten Medium zu starten. Wenn neue Funktionen eingebaut oder Fehler in vorhandenen korrigiert werden, folgt ein Firmware-Update. Standardmäßig aktualisiert der Raspberry Pi die Firmware erst einige Zeit später (default Zweig, früher critical). Nur kritische Fehlerkorrekturen werden schneller ausgeführt. Die neue Netzwerk-Installation des Raspberry Pi 4 war einige Zeit sogar nur im Beta-Bootloader verfügbar – dieser ist jedoch von allen dreien am potenziell instabilsten und sollte nur von erfahrenen Nutzern installiert werden.

Falls alles funktioniert, ist das in Ordnung – in den meisten Fällen reicht default aus. Sollte es zu Problemen kommen, macht es Sinn, den Bootloader zunächst auf die aktuellste stabile Version zu aktualisieren. Das funktioniert per sudo raspi-config im Menü 6 Advanced Options > A5 Bootloader Version. Latest ist hierbei die neue Bezeichnung für Stable.5

Im Hintergrund ändert dies den Wert der Variable FIRMWARE_RELEASE_STATUS in /etc/default/rpi-eeprom-update. Wie dies im Detail funktioniert, habe ich im Beitrag zum Aktivieren von USB-Boot & dem Aktualisieren der Firmware bereits ausführlicher beschrieben.

Fazit

Die Startmöglichkeiten des Raspberry Pi sind zunehmend gewachsen – jüngst um M.2 NVMe SSDs durch die neue PCIe-Schnittstelle des RPI5. Eine Übersicht der Möglichkeiten füllt bereits einen eigenen Beitrag. Außerdem bietet das Raspberry Pi OS mit raspi-config eine einfache Oberfläche, um die Wichtigsten zu aktivieren. Erfahrenere Nutzer können in der Firmware alle Möglichkeiten und Kombinationen ausschöpfen. Für viele Anwendungsfälle gibt es damit bessere Alternativen zur Speicherkarte: Sei es z.B. M.2 SSDs für höherer Geschwindigkeit sowie Lebensdauer. Oder komplexere Wege, wie Booten über das Netzwerk.

Quellen

  1. https://www.raspberrypi.com/documentation/computers/raspberry-pi.html#raspberry-pi-boot-modes ↩︎
  2. https://www.raspberrypi.com/documentation/computers/raspberry-pi.html#raspberry-pi-4-and-raspberry-pi-5-boot-flow ↩︎
  3. ↩︎
  4. https://www.raspberrypi.com/documentation/computers/raspberry-pi.html#BOOT_ORDER ↩︎
  5. https://www.raspberrypi.com/documentation/computers/raspberry-pi.html#bootloader-release ↩︎

Leave a Reply