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. Sollte es mehrere Einträge mit der selben PARTUUID geben, so schaut bitte den letzten Absatz des Artikels an.
  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.


UPDATE 2.1.2020 (Vielen Dank an Rene):

Beide Speichermedien besitzen die selbe UUID

Bei der Installation von Raspbian auf einen USB-Stick und gleichzeitig auf eine SD-Karte kann es passieren, dass beide Speichermedien zwar einen unterschiedlichen Pfad zur Partition bekommen (z.b. /dev/mmcblk0p1 und /dev/sda1), jedoch die selbe UUID besitzen.
Falls dieses Problem auftauchen sollte, so müssen wir die entsprechende UUID des zweiten Speichermedium (des USB-Sticks/der USB-Festplatte) manuell ändern.
Hierzu benötigen wir das Programm fDisk.
Nun starten wir das Programm aus dem Terimal heraus mit folgendem Befehl:

sudo fdisk /dev/sda

Wichtig ist, dass ihr "/sda" durch die Festplatte ersetzt, dessen UUID geändert werden soll. Im Idealfall ist das der Pfad zum USB-Stick oder der USB-Festplatte, aber NICHT der der SD-Karte.

Anschließend gebt ihr folgende Buchstaben im Wizard ein und bestätigt jedes mal mit der Enter-Taste:

  1. p
  2. x
  3. i
  4. 0xd34db33f  (Neue UUID Festplatte; Frei wählbar; 8-Stellig nach dem "0x"; Darf aus den Zeichen "0123456789abcdef" bestehen)
  5. r
  6. w

Das war es schon. Nun können wir mit Punkt 5 der obigen Liste wieder fortfahren.

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

Christian Preiß

funktioniert soweit, nur funktioniert bei USB Boot kein Netzwerk

Marvin

Hallo Christian, ich schreibe diesen Kommentar gerade von meinem Pi 4. Hier funktioniert alle Bestens. Funktioniert das Lan oder das W-Lan nicht? Ggf. muss hier noch einmal das korrekte Land eingestellt werden, aber das kann ich aktuell nur vermuten. Gruß, Marvin

Rene

Hallo. Bei der PARTUUID nach angesteckter USB SSD sind diese bei beiden Partitionen die gleichen wie bei den SD-Karten Partitionen?! Scheint ja doch nicht so "unique" zu sein in diesem Fall :) Was mache ich nun?? Danke und frohes neues!

Marvin

Hallo Rene, meine Vermutung ist, dass das Flashen des Raspbian auf die beiden Speichermedien (SD-Karte und USB-Stick/Festplatte) bei beiden Partitionen den selben Wert geschrieben hat. Ich werde den Artikel einmal um die Fehlerlösung aktualisieren. Gib mir etwa eine Stunde. Gruß, Marvin

Marvin

Hallo Rene, der Artikel wurde aktualisiert.

Rene

Hallo Marvin,

vielen dank, werde das nun nochmal genau Schritt für Schritt durchgehen und testen und gebe dann Bescheid, wenn nun alles mit deiner Anleitung passt :)

Danke und Gruß

Rene

Kleine Anmerkung:
1. Textfehler: "Wichtig ist, dass ihr "/sda" durch die Festplatte ersetzt, dessen UUID geändert werden soll. Im Idealfall ist das der Pfad zum USB-Stick oder der USB-Festplatte, aber NICHT der des USB-Sticks."
Nicht der USB-Stick? :)

2. Funktioniert es mit gdisk nicht, die PARTUUID bleibt dieselbe, es kommt lediglich eine PTUUID dazu.
Ich hatte eine andere Anleitung im Netz gefunden, diese hatte ich bereits funktionierend getestet...
Ich schicke dir gleich mit der nächsten Nachricht den Link, evtl. kannst du deine Anleitung mittels dieser dann aktualisieren.
Würde dies auch komplett mit rein nehmen, da es IMMER der Fall sein wird, dass mit dem gleichen Image auch die gleichen UUIDs vergeben werden (warum auch immer)

Gruß
René

Marvin

Hallo Rene,
vielen Dank für deine Anmerkungen. Ich werde den Artikel gleich mal ändern und natürlich muss es "SD-Karte" und nicht "USB-Stick" heißen.

Gruß,
Marvin

Rene

PS: Allgemein würde ich den Rest ab USB Boot Instructions übernehmen (also von dir ins deutsche übersetzt), da die Einstellungen dort noch optimaler sind bzgl. fstab usw. , da fehlt mir noch etwas in deiner Anleitung.
Ansonsten klappt deine Anleitung aber soweit :)

Rene

sorry, sehe grad, hast das mit dem fstab doch genauso drin, nur etwas anders geschrieben, mein Fehler :)
Also lediglich das mit dem fdisk ändern (PARTUUID) und dann passt alles!

Danke für die gute deutsche Anleitung :)

Chris

Hi,

die Anleitung zur Änderung der UUID ändert nur den Festplattenbezeichner, aber nicht die UUID.

VG