USB-Boot für den Raspberry Pi 4

Seit Anfang September 2020 gibt es ein EEPROM-Update für den Raspberry Pi 4, das eine von älteren Modellen bekannte Funktion endlich auf für die Version 4 implementiert: Das Booten von externen USB-Datenträgern. Damit können Sie Ihren Raspberry Pi 4 ohne die auf Dauer oft unzuverlässige SD-Karte betreiben.

Testaufbau: Raspberry Pi 4B mit einer älteren SATA-SSD, die über ein USB-Kabel angeschlossen ist

Updates: Hinweis auf Inkompatibilitäten mit verschiedenen USB/SATA-Adaptern, Warnung vor rpi-update. Tipp: Werfen Sie unbedingt auch einen Blick in das Raspberry-Pi-Forum.

Vorbereitungsarbeiten

Um den USB-Bootprozess auszuprobieren, habe ich das neueste 32-Bit-Image von Raspberry Pi OS heruntergeladen und mit Etcher auf eine SD-Karte übertragen. Die erforderliche neueste Firmware ist in diesem Fall bereits inkludiert.

Wenn Sie eine ältere Raspberry-Pi-OS- bzw. Raspbian-Installation haben, müssen Sie sich selbst um alle Updates für das Betriebssystem, die Firmware und das EEPROM kümmern. Anschließend ist ein Reboot erforderlich.

sudo -s
apt update
apt full-upgrade
(rpi-update           siehe Hinweis unten)
rpi-eeprom-update 

  BCM2711 detected
  Dedicated VL805 EEPROM detected
  BOOTLOADER: up-to-date
    CURRENT: Do Sep  3 12:11:43 UTC 2020 (1599135103)
    LATEST: Do Sep  3 12:11:43 UTC 2020 (1599135103)
  FW DIR: /lib/firmware/raspberrypi/bootloader/critical
  VL805: up-to-date
    CURRENT: 000138a1
    LATEST: 000138a1

WARNUNG Mehrere Leser haben mir über massive Probleme mit rpi-update berichtet. Gleichzeitig reichen der Kernel und die Firmware, die Sie im Rahmen normaler Updates erhalten, für USB-Boot aus. Kurzum: In den meisten Fällen sollte es möglich sein, USB-Boot ohne rpi-update zum Laufen zu bringen. Führen Sie das Kommando also nur als letzten Notweg aus (und machen Sie auf jeden Fall vorher ein Backup Ihrer wichtigen Daten).

Bei einer aktuellen Version des Raspberry Pi OS wird das EEPROM schon dahingehend vorkonfiguriert, sowohl die SD-Karte als auch allfällige USB-Datenträger als Bootmedium zu berücksichtigen. Bei älteren Installationen sollten Sie auch das kontrollieren. Dazu führen Sie sudo raspi-config aus und wählen die folgenden Menükommandos aus:

  • 3. Boot Options
  • B4 Boot Order
  • B1 USB BOOT
Aktivierung des USB-Boot-Modus mit raspi-config

Wichtig für den späteren Bootprozess ist, dass die Datei /boot/cmdline.txt keinen absoluten Pfad zur Boot-Partition enthält, sondern deren UUID (Parammeter root=PARTUUID=...). In meinem Fall sieht cmdline.txt so aus:

console=serial0,115200 console=tty1 root=PARTUUID=9e49548b-02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait quiet splash plymouth.ignore-serial-consoles

SD-Karte auf die Festplatte/SSD klonen

Damit Sie in Hinkunft vom USB-Datenträger booten können, müssen Sie den Inhalt der SD-Karte auf die mit dem Raspberry Pi verbundene Festplatte oder SSD kopieren. Am einfachsten geht das direkt im Raspberry Pi OS mit dem Programm Zubehör / SD-Card Copier. Beachten Sie, dass Sie dabei sämtliche Daten verlieren, die sich bisher auf dem USB-Datenträger befanden.

Anschließend fahren Sie den Raspberry Pi herunter, entfernen die SD-Karte, schalten den Pi wieder ein und hoffen, dass er nun den USB-Datenträger als Boot-Device akzeptiert.

Hinweis Der Raspberry Pi kann eine kleine USB-Disk (SSD oder 2,5-Zoll-Laufwerk) mit Strom versorgen. Dazu ist es aber wichtig, dass das Netzteil für den Raspberry Pi ausreichend stark ist! Verwenden Sie zumindest ein Netzteil mit 15 W! Andernfalls brauchen Sie für die USB-Disk ein eigenes Netzteil.

Raspberry-Pi-Image direkt auf die USB-Disk schreiben

Anstatt den Umweg über die SD-Karte zu nehmen, habe ich versucht, ein aktuelles Raspberry-Pi-OS-Image mit Etcher direkt auf die SSD zu schreiben. Die so initialisierte Disk habe ich an einen Raspberry Pi ohne SD-Karte angeschlossen — und siehe da, auch das funktioniert! Wenn Sie also nicht eine vorhandene Installation auf ein USB-Gerät übertragen, sondern eine Neuinstallation durchführen möchten, ist das der einfachste und schnellste Weg!

Hinweis Der Boot-Prozess setzt voraus, dass der Raspberry Pi ein aktuelles EEPROM hat. Sie müssen also auf jeden Fall vorweg mit rpi-eeprom-update sicherstellen, dass diese Voraussetzung erfüllt ist.

Praktische Erfahrungen

Die Hoffnung, dass der Boot-Prozess von einer SATA-SSD vielleicht schneller als von einer SD-Card erfolgen würde, haben sich nicht erfüllt. Der eigentliche Boot-Prozess geht zwar flott vor sich — aber es dauert ziemlich lange (fast eine halbe Minute), bis dieser startet. In der Wartezeit zeigt der Raspberry Pi eine Statusseite an. Warum die Erkennung der USB-Disk solange dauert, ist schwer zu verstehen.

Anstatt flott zu booten, zeigt der Raspberry Pi zuerst einmal eine Weile irgendwelche Statusinformationen an.

Ich habe für meine Tests eine ältere SSD mit 256 GByte verwendet. Nahezu der gesamte Platz steht nun im Root-Dateisystem zur Verfügung. Eindrucksvoll:

df -h -t ext4 -t vfat

Dateisystem    Größe Benutzt Verf. Verw% Eingehängt auf
/dev/root       229G    2,9G  217G    2% /
/dev/sda1       253M     54M  199M   22% /boot

Stark I/O-lastige Arbeiten, z.B. Updates, erfolgen nun spürbar schneller als mit einer SD-Karte. (Benchmark-Tests habe ich keine durchgeführt — aber sobald mir welche bekannt sind, werde ich hier einen Link angeben.)

Update: Stark abhängig vom USB/SATA-Controller

Ein Hinweis im Forum hat mich dazu gebracht, mein Setup mit einem zweiten USB/SATA-Controllern zu testen. Ergebnis:

  • Controller 1 (USB-3-Stecker für Labor-Setups, Aufschrift »GHB«, ID laut lsusb: 174c:55aa ASMedia Technology Inc. Name: ASM1051E SATA 6Gb/s bridge, ASM1053E SATA 6Gb/s bridge, ASM1153 SATA 3Gb/s bridge, ASM1153E SATA 6Gb/s bridge): der Raspberry Pi bootet erst nach ca. 30 Sekunden, läuft dann aber stabil

  • Controller 2 (Gehäuse für SATA-Disks, USB 3, Aufschrift »inateck«, ID laut lsusb: 152d:0578 JMicron Technology Corp. / JMicron USA Technology Corp. JMS567 SATA 6Gb/s bridge): der Raspberry Pi bootet sofort, bleibt aber hängen :-( Das Grafiksystem wird manchmal erreicht, manchmal nicht. Das System ist nicht benutzbar.

Links mein SATA/USB-Controller 1, rechts Controller 2

Mit anderen Worten: Der USB-Bootprozess hängt stark vom verwendeten Adapter ab! Es ist ein Lotteriespiel, ob das Zusammenspiel überhaupt klappt. Ich denke, es gibt keinen schlimmeren Standard als USB3 …

Quellen

Referenz über funktionierende Adapter und Tipps, wie man nicht funktionierende Adapter zur Zusammenarbeit überredet (vielen Dank für alle diesbezüglichen Forum-Beiträge!):