USB Boot mittels SD-Karte auf nativen USB Boot umstellen - Raspberry Pi 4

USB Boot mittels SD-Karte auf nativen USB Boot umstellen - Raspberry Pi 4

Bereits vor einiger Zeit hatte ich hier auf StaticFloat einen Artikel geschrieben, wie man ohne -den damals noch nicht verfügbaren- nativen USB Boot einen Raspberry Pi 4 dennoch via SD Karte von einem angeschlossenen USB Speicher betreiben kann. Inzwischen hat die Raspberry Pi Foundation nachgeliefert und ein Firmwareupdate herausgebracht. Dieses erlaubt es uns über zwei kleinere Befehle, einen Neustart und eine Konfiguration mittels rpi-config den Pi 4 nativ von dem angeschlossenen USB Speichermedium booten zu lassen.

Auf Anfrage in den Kommentaren des alten Artikels hin gibt es nun einen kleinen Upgradeguide. Dieser soll sicherstellen, dass keine der auf dem USB Medium installierten Programme oder gespeicherten Daten verloren gehen.

Vorwort

Was haben wir letztes mal (im vorherigen Artikel) erreicht?
Kurz gesagt: Wir haben erreicht, dass der Raspberry Pi 4 bei seinem ersten Boot von der SD Karte startet und anschließend den Bootvorgang so verändert, dass der Bootvorgang das eigentliche Dateisystem des angeschlossenen USB Mediums verwendet. Anschließend haben wir im Dateisystem des USB Mediums noch einmal zusätzlich sichergestellt, dass Updates sowohl die Boot-Partition der SD-Karte als auch das Root Filesystem (rootfs) des USB Speichers updated.

Nun aber wir allerdings ein Problem: Das rootfs des USB Speichers ist mit den neuesten Updates versorgt und auch die Boot-Partition der SD-Karte. Es KANN nun also passieren, dass der Pi nicht mehr "einfach so" nur von der SD-Karte oder nach dem Firmwareupdate direkt von dem USB Speicher starten würde. Es kann passieren, muss jedoch nicht so geschehen.


Aktuelle Speicherverwaltung des USB-Boots auf dem Raspberry Pi 4.


Was wollen wir nun tun?

In erster Instanz geht es darum die beiden noch orange markierten Dateisysteme auf den neuesten Stand zu heben. Zugegebener Maßen werden wir uns eigentlich nur damit beschäftigen die Boot-Partition des USB Speichers zu updaten. Die SD-Karte kann im Endeffekt auch neu aufgesetzt werden.

Wir werden im nachfolgenden Kapiteln die folgenden Schritte noch einmal genauer durchgehen:

  1. Raspberry Pi OS und alle Programme auf den neuesten Stand heben.
  2. Die Inhalte der Boot-Partition (SD-Karte) auf den USB-Speicher duplizieren.
  3. Einstellungen des vorherigen Artikels rückgängig machen (Boot Anweisungen & fstab Konfigurationen).
  4. Die SD-Karte neu beschreiben.
  5. Den Pi ohne USB Speicher starten.
  6. Die neue Firmware flashen.
  7. Die Bootkonfigurationen umstellen.
  8. Den Pi 4 nur noch mit USB Speicher angeschlossen starten.

Vorbereitungen

Als ersten Schritt müssen wir die Boot-Partiton der SD-Karte und das rootfs des USB Speichers noch einmal aktualisieren. Dieser Vorgang stellt sicher, dass wir in den nächsten Schritten mit den selben Softwareversionen arbeiten und keine Inkonsistenzen auftreten können.

Hierzu führen wir aus:

sudo apt-get update
sudo apt-get full-upgrade
sudo reboot


Nun sollten alle Versionen der installierten Softwarepakete auf dem neuesten Stand sein und wir können mit einem Kopiervorgang fortfahren. Im nächsten Schritt gilt es also die alten Versionen der Boot-Partition auf dem USB Speicher durch die neuen Versionen auf der SD-Karte zu überschreiben. Normalerweise wurde die Boot-Partition auf dem USB Speicher nicht verwendet und aus diesem Grund wurde diese Partition auch niemals geupdated.

Kopiervorgang der Boot Partition von der SD-Karte auf den USB Speicher.

Hierzu müssen wir die Boot-Partition des USB Speichers mounten. Wir binden die Partition also in das laufende Betriebssystem ein, um darauf zugreifen zu können. Für diesen Vorgang müssen wir jedoch wissen wie die Partition heißt.

Hierzu führen wir folgenden Befehl aus:

sudo blkid


Das Ergebnis sieht dann in etwa so aus (Beispiel aus dem vorigen Artikel):

Wir sehen in diesem Bild nun vier Einträge. Jeder dieser Einträge beschreibt eine Partition, jede Gruppierung ein anderes Speichermedium. Die kryptischen Namen "mmcblk...." sind in der Regel der Speicher der SD-Karte. Wir können nun also auslesen, dass die Partition mit dem Namen "sda1" die Bootpartition des USB-Speichers ist. Diese Information machen wir uns nun zu Nutze und werden die bisher ungenutzte Boot Partition des USB-Speichers an einem zusätzlichen Ort einbinden (verwenden) und können so die Inhalt der unterschiedlichen Boot Partitionen angleichen.

Folgende vier Befehle sind dazu nötig:

sudo mkdir /usbBoot
sudo mount /dev/sda1 /usbBoot
sudo rm -r /usbBoot/*
sudo cp /boot/* /usbBoot/ 

Der erste Befehl erstellt einen Ordner, mit Hilfe dem wir die Boot Partition des USB Speichers gleich erst löschen und dann beschreiben können. Der zweite Befehl bindet die Boot Partition ein und macht diese für Änderungen verfügbar. Die letzten beiden Befehle sorgen für das Löschen der alten Dateien und damit des alten Versionsstandes und das Kopieren des neuen Stands auf diese Partition.

Glückwunsch! Die Boot Partition ist nun auf dem neuesten Stand.

Fertig sind wir jedoch "leider" noch nicht. Wir hatten Konfigurationen an fstab geändert, damit der USB Speicher bei einem Update die Boot Partition des SD-Karte updated. In Zukunft wollen wir ja gerne auf diese verzichten, ergo müssen wir die Konfiguration wieder ändern.
Hierzu geben wir folgenden Befehl ein:

sudo nano /etc/fstab

Innerhalb dieser Datei sollte eine Zeile auftauchen, welche mit "/boot" beginnt. Hier ist die im nachfolgenden Bild ersichtliche rot markierte Zeichenfolge eingetragen. Ändert diese wieder zurück auf die gelb markierte Zeichenfolge und bestätigt das Speichern mit STRG+X, Y und Enter.

Nun sollten wir die Vorbereitungen aber auch alle getroffen haben und der Pi sollte theoretisch vom USB Speicher booten können. Also vorausgesetzt er könnte es überhaupt.

Raspberry Pi von USB booten lassen

Wie bereits erwähnt wäre es nun theoretisch möglich, dass der Pi von dem USB Speichermedium starten könnte. Dieses ist vorbereitet und wieder konsistent.

Was jedoch fehlt ist die eigentliche Möglichkeit des Pi 4 von einem USB Speicher starten zu können. Hierzu müssen wir den Pi 4 noch mindestens drei mal von der SD-Karte booten lassen, ohne dass der USB Speicher überhaupt verwendet wird. Fahrt den Raspberry Pi nun am Besten einmal herunter und steckt alle USB Speichergeräte aus.

Es ist sehr ratsam vor den nächsten Schritten ein komplettes Backup der SD-Karte zu erstellen! Dies geht mit bspw. Win32 Disk Imager unter Windows. Für Mac oder Linux empfehle ich die systemeigenen Partitionierungsprogramme.

Wir müssen uns nun einen konsistenten und funktionierenden Stand auf unserer SD-Karte erstellen, da diese dazu dienen muss die Firmware zu flashen. Das geht am einfachsten, wenn wir die SD-Karte an einem anderen Rechner einfach einmal komplett löschen und neu mit einem Raspberry Pi OS beschreiben. Welche Version verwendet wird ist eigentlich egal. Ratsam ist für unerfahrene Nutzer die "kleine" Version von Raspberry Pi OS mit Desktop.

Fertig? - Dann geht es hier jetzt weiter.

Startet den Raspberry Pi 4 von der SD-Karte. Der USB Speicher bleibt vom Pi getrennt!

Raspberry Pi 4 - Boot von SD-Karte (ohne USB Speicher)


Nach dem ersten Installationswizard und einem eventuellen Neustart führen wir folgende Befehle in der Konsole aus:

sudo apt update
sudo apt full-upgrade
sudo rpi-update


Startet den Raspberry Pi neu.

Nach dem Neustart führen wir folgenden Befehl in der Konsole aus:

sudo rpi-eeprom-update -d -a


Startet den Raspberry Pi erneut neu.

Nach dem Neustart führend wir folgenden Befehl in der Konsole aus:

sudo raspi-config


Es öffnet sich eine Eingabemaske. Ihr könnt über die Pfeiltasten navigieren und über Enter bestätigen.
Innerhalb dieser Maske navigieren wir zum Punkt "Boot Options" -> "Boot ROM Version" -> "Latest" -> "No".
Anschließend können wir die Bootreihenfolge ändern. Dies geht wiederum über die Menüpunkte "Boot Options" -> "Boot Order" -> "USB Boot" -> "Yes".

Raspberry Pi 4 - Boot von USB (Nativ)


Der Pi startet nun neu. Nach dem Neustart kann man den Pi wieder herunterfahren, die SD-Karte entfernen und den USB Speicher einstecken. Der Pi sollte nun beim nächsten Start vom USB Speicher aus starten.

ACHTUNG: Sollte der Pi einmal MIT einer SD-Karte und einem USB-Speicher gestartet werden, so wird IMMER von der SD-Karte gestartet.

Ich wünsche viel Erfolg bei allen weiteren Projekten.

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.

Hat dir dieser Artikel gefallen?

Kommentar hinzufügen

*Pflichtfeld

Hallo Marvin,
vielen Dank, dass du dir die Mühe gemacht und diese Anleitung erstellt hast. Leider ist bei mir irgendein Fehler drin. Und zwar wird mir nur eine sda Partition angezeigt:
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 111.8G 0 disk /
mmcblk0 179:0 0 29.7G 0 disk
├─mmcblk0p1 179:1 0 256M 0 part /boot
└─mmcblk0p2 179:2 0 29.5G 0 part

Ich habe keine Ahnung, wie es dazu gekommen ist.
Der Raspi bootet aber nur in Kombination von SD und SSD, d.h. ziehe ich die SD raus, bootet er nicht, ziehe ich die SSD ab, bootet er auch nicht. Ich denke ich müsste auf der SSD eine weitere Partition anlegen, die dann den /boot Part übernimmt bzw. damit ich die oben aufgeführten Schritte durchführen kann, oder? Geht das jetzt noch, ohne die SSD komplett platt machen zu müssen?

Von der SSD wollte ich vorhin übrigens sicherheitshalber ein Image erstellen mittels Win32DiskImager (SSD per USB an meinen Windows 10 PC, Win32DiskImager starten und Image abziehen), aber das ging nicht, weil ich im Win32DiskImager die SSD nicht als Quelle auswählen konnte.

Hallo Jan,

fangen wir einmal mit Win32DiskImager an. Das Programm "erkennt" die SSD wahrscheinlich nicht, da diese "zu groß" für eine SD-Karte erscheint. Ehrlich gesagt weiß ich nicht welche Windows Alternative dort existiert. Bei einer kurzen Google Suche habe ich leider nur ein Programm der Firma EaseUS gefunden, das von den Beschreibungen her vielversprechend klang.

Zu dem Problem der fehlenden Boot Partition: Hast du bei der Einrichtung die SD Karte mittels einem Image von Raspberry Pi OS/Raspbian von Windows aus beschrieben? Hast du die Boot Partition gelöscht? Normalerweise sollte der Befehl "blkid" die Boot Partition finden, selbst wenn diese nicht verwendet wird.

Eine neue Boot Partition zu erstellen KANN -muss aber nicht- Daten der vorhandenen Partition überschreiben. Eine Partition zu vergrößern ist meistens kein Ding, sie zu verkleinern kann jedoch nicht unproblematisch sein.

Versuche mal diese beiden Befehle einzugeben: "sudo blkid /dev/sda1" und "sudo blkid /dev/sda2"
Kommt bei beiden Befehlen eine Ausgabe oder ist eine Ausgabe leer?

Gruß
Marvin

Also die Partition habe ich jedenfalls nicht bewusst gelöscht. Ich weiß echt nicht, wie das passieren konnte.
Ich werde mir vor weiteren Schritten mal die EaseUs Software anschauen. Ich möchte wirklich sicherheitshalber ein Plattenimage haben ;-)

Die Ausgabe der Befehle haben bei beiden nur eine leere Ausgabe ergeben:
pi@raspi-ioBroker:~ $ sudo blkid /dev/sda1
pi@raspi-ioBroker:~ $ sudo blkid /dev/sda2
pi@raspi-ioBroker:~ $ sudo blkid /dev/sda
/dev/sda: UUID="0d0ee6c2-df66-47c0-80cc-e0394ae1db8a" TYPE="ext4"

Hallo Marvin,
ich habe da vielleicht eine Idee, mit der ich evtl. aus meine komischen Situation wieder raus komme.
Wäre es nicht möglich, die Daten, die auf meiner SSD Festplatte liegen, auf die SD-Karte zu kopieren, so dass das System auch komplett ohne SSD-Festplatte wieder laufen würde.
Wenn das System dann funktioniert, könnte man doch die Partitionen der SD-Karte auf die SSD übertragen, hoffe ich. Dann hätte ich quasi eine "neu erstellte" SSD-Platte mit den Daten der SD-Karte und könnte mich dann dem Boot von SSD widmen.
Oder ist das quatsch, was ich mir da ausgedacht habe?

Marvin

Hallo Jan,

theoretisch sollte diese Methode funktionieren. Hierbei müsste man nur extrem auf die Größe der Partitionen achten. Da könnte es Probleme geben, da das „alte“ Image der Root Partition größer ist, als die neue „richtige“ Partition.

Gruß