Raspberry Pi 4 - Boot von USB

Raspberry Pi 4 - Boot von USB

Wer aktuell sein Raspbian auf seinem Raspberry Pi 4 von einem angeschlossenen USB-Drive starten will, der guckt in die Röhre.
Ich habe ja ehrlich gesagt nicht schlecht geschaut, als ich mein Geekworm Raspberry Pi 4 Sata Board angeschlossen hatte und nichts passierte, obwohl das Teil eigentlich genau dafür da ist.
Es ist nämlich noch nicht möglich den Raspberry Pi 4 dazu anzuweisen von einem USB-Gerät aus zu booten. Auf den älteren Modellen ist es möglich per Konsolenbefehl ein bestimmtes Bit zu setzen, welches dem Pi erlaubt von angeschlossenen USB-Massenspeichern zu booten. Der RPi 4 jedoch verwendet einen anderen CPU und damit einen anderen Chip, für welchen dieses Feature noch nicht freigeschaltet ist. Es gibt jedoch Wege dieses Problem zu umgehen.

Raspberry Pi 4 von USB booten

Wer nichts desto trotz in den Genuss des neuen und vor allem schnelleren USB 3.0 Anschlusses kommen möchte, der kann sich wie folgt behelfen:

Wir booten weiterhin von der SD-Karte, ABER nach dem "Einstieg" zum Boot verweisen wir auf ein parallel installiertes Raspbian auf dem angeschlossenen USB-Massenspeichers.
Befolgt folgende 10 Schritte dazu:

  1. SD-Karte vorbereiten: Bitte installiert Raspbian wie gehabt auf eurer SD-Karte. Eine Anleitung dazu gibt es hier: Installing operating system images
  2. USB-Speicher vorbeiten: Nun installiert Rasbian erneut auf der USB-Festplatte oder dem USB-Stick. - Steckt diese/diesen noch nicht ein.
  3. Raspberry Pi 4 starten: Wir müssen den Raspberry Pi 4 nun einmal anschalten. In diesem Falle booten wir noch ganz normal von der SD-Karte.
  4. Raspbian updaten: Um sicherzustellen, dass alle möglichen Fehler behoben sind und die Programme optimal funktionieren installiert einmal über die Konsole die neuesten Updates: "sudo apt-get update && sudo apt-get upgrade"
  5. Speicher identifizieren: Führt nun bitte zweimal folgenden Befehl in der Konsole aus: "sudo blkid". Das erste mal ohne das USB-Gerät und ein zweites mal mit eingestecktem USB-Massenspeicher. Es sollten beim zweiten mal einige Einträge hinzugekommen sein. Vor allem ein Eintrag, der das Label "rootfs" trägt. Notiert euch die PARTUUID des Eintrags.
  6. cmdline.txt bearbeiten: Als erstes sollten wir uns eine Kopie der Datei erstellen. Dazu führt ihr aus: "cp /boot/cmdline.txt /boot/cmdline.txt.old". Anschließend bearbeiten wir die Datei und suchen nach einer Stelle, die in etwa so aussieht "... root=PARTUUID=da1403a8-01 rootfstype=...". Hier ersetzen wir dann die alte UUID, durch die, die ihr euch notiert habt.
  7. Raspberry Pi 4 neustarten: Nach dem Neustart wird euer Pi 4 weiterhin von der SD-Karte booten, aber ausschließlich bis zur Datei /boot/cmdline.txt kommen und anschließend den Rest des Betriebssystems von dem angeschlossenen USB-Speichers laden. Ihr habt es nun eigentlich schon geschafft!
  8. fstab bearbeiten: Trotz der "kleinen" Euphorie müssen wir nun noch ein bisschen Finetuning betreiben. Lest euch am besten dazu den Abschnitt unter dieser Liste einmal durch.
  9. Dateisystem expandieren: Bitte einmal in der Konsole ausführen: "sudo raspi-config --expand-rootfs"
  10. Raspbian updaten: Bitte einmal in der Konsole ausführen, um das eigentliche Betriebssystem noch einmal zu updaten: "sudo apt-get update && sudo apt-get upgrade"

Getestet habe ich das Ganze erfolgreich mit dem eingangs erwähnten Geekworm Raspberry Pi 4 SATA Expansion Board und meinem SSD mSata Raspberry Pi Hat.

fstab bearbeiten

fstab dient unter Linux zur Einbindung von -grob gesagt- Partitionen/Laufwerken.
Jede Partition auf einer Festplatte bekommt eine sogenannte UUID zugesprochen. Diese ist eindeutig und wird bei fstab beispielsweise dafür verwendet die Partitionen als bestimmte Pfade in Linux zu mounten. Legen wir in der Datei "/etc/fstab" nun also fest, dass die Partition mit der UUID "123456-01" dem Pfad /boot entsprechen soll, dann wird die Partition "123456-01" auch aufgerufen, sobald wir den Pfad/das Verzeichnis /boot öffnen.
Hier liegt das Problem. Wir haben zwei Partitionen auf zwei "Festplatten", die meinen /boot zu sein. Einmal die Partition auf dem USB-Speicher und dann die, die auf der SD-Karte liegt. Im Standard wird das Linux auf dem USB-Speicher auch auf das /boot verweisen, welches auf dem USB-Speicher liegt. Dies wollen wir ändern.
Warum?
Na weil ich ja eigentlich "nur" das Verzeichnis /boot von der SD-Karte verwenden UND dieses auch per "sudo dist-update" auf den neuesten Stand bringen wollen.

Bitte führt also in der Konsole einmal den folgenden Befehl aus:

lsblk -o name,label,partuuid

Es erscheint wieder eine Liste an Speichern und deren Partitionen. Notiert euch die UUID, deren Speicher in ungefähr so lautet "mmcblk0" und den Eintrag  "system-boot" enthält.

Diesen Eintrag fügen wir nun über den Befehl "sudo nano /etc/fstab" in der Zeile ein, in der auch "/boot" steht. Ihr müsst dafür lediglich die bereits bestehende UUID ersetzen.

Marvin

Ich bin ein Mensch, der sich neben der Programmierung noch für tausend andere Dinge interessiert, die mal mehr und mal weniger verrückt sind. Vor allem aber bin ich Feuer und Flamme mit der Programmierung von eigenen kleinen Apps und Programmen, die mein Leben bereichern.

Kommentar hinzufügen

*Pflichtfeld