Raspberry Pi

Raspberry Pi: USB Boot einrichten

Als Speichermedium für das Betriebssystem des Raspberry Pi dient bei allen Modellen in erster Linie eine SD-Karte beziehungsweise eine MicroSD-Karte. Die Lebensdauer einer Speicherkarte ist jedoch, vor allem bei intensiver Nutzung, in der Lebendauer begrenzt. Aus diesem Grund war ein gewünschtes Feature der Raspberry Pi Community die Möglichkeit, den Raspberry Pi von einem USB Stick zu booten. Im Zuge des Raspberry Pi 3 wurde nun die Betaversion der neuen Firmware veröffentlicht, die den USB Boot eines Linux Images am Raspberry Pi ermöglicht, ohne das eine SD-Karte notwendig ist.

Raspberry Pi 3 von USB Stick booten

SD-Karten und deren Nachteile

Das Image des Betriebssystems für den Raspberry Pi wird bisher auf einer Speicherkarte bereitgestellt. Jedoch ist die Speicherkarte in der Mehrzahl der Fälle einer der Hauptgründe für eine Fehlfunktion des Systems. Besonders bei intensiver Nutzung und vielen Zugriffen auf die SD-Karte bleibt ein Versagen der Speicherkarte mit der Zeit leider nicht aus.

Geschuldet ist die begrenzte Lebensdauer dadurch, dass die Speicherzellen einer SD-Karte eine maximale Anzahl an Schreibzyklen haben. Anschließend sind die Speicherzellen unbrauchbar und materialmüde. Je nach Hersteller sind die Spezifikationen wie Schreibgeschwindigkeit und Kapazität zwar angegeben, dennoch sind enorme Qualitätsunterschiede, welche sich auf Performance und Lebensdauer auswirken, zu bemerken. In der Regel macht eine SD-Karte zwischen 10.000 und 100.000 Schreibzyklen mit.

Raspberry Pi USB Boot aktivieren

Der Raspberry Pi bootet mit Hilfe eines Boot ROM. Dieser beinhaltet ein Programm, welches beispielsweise im Falle einer SD-Karte, den Bootcode (bootcode.bin und start.elf) von der Speicherkarte in den RAM schreibt und das Booten dann von da aus fortgesetzt wird. Der entsprechende Boot ROM wurde nun um den Boot Mode USB erweitert und funktioniert aktuell nur mit dem Raspberry Pi 3.

Um den USB Boot am Raspberry Pi 3 zu aktivieren, müssen wir die neuen modifizierten Dateien bootcode.bin und start.elf verwenden. Dafür wird die Firmware des Pi mittels rpi-update auf den nächsten Branch gesetzt. Zuvor aktualisieren wir unser System.

sudo apt-get update
sudo BRANCH=next rpi-update

Anschließend kann der USB Boot aktiviert werden. Dieser ist auf Grund des Betastatuses noch standardmäßig deaktiviert. Der folgende Befehl fügt an das Ende der Datei /boot/config.txt die Zeile program_usb_boot_mode=1 hinzu. Alternativ kann dies auch mit dem Editor nano manuell gemacht werden.

echo program_usb_boot_mode=1 | sudo tee -a /boot/config.txt

Jetzt muss der Raspberry Pi 3 neu gestartet werden.

sudo reboot

Nach dem Neustart überprüfen wir, ob der USB Boot erfolgreich aktiviert wurde.

vcgencmd otp_dump | grep 17:

Als Ausgabe muss die Angabe 17:3020000a ersichtlich werden. Damit ist der USB Boot am Raspberry Pi 3 erfolgreich aktiviert.

Jetzt könnte man die Zeile program_usb_boot_mode aus der config.txt wieder entfernen, damit man die SD-Karte mit einem anderen Pi verwenden kann, der kein USB Boot programmiert bekommen soll. Dies macht man am besten händisch mit nano.

sudo nano /boot/config.txt

Bootfähigen USB Stick erstellen (mit Raspbian)

Zum Erstellen eines bootfähigen USB Sticks, oder alternativ einer USB Festplatte, stecken wir diesen an den Raspberry Pi 3 und starten den Einplatinencomputer. Das USB Gerät wird anschließend partitioniert, formatiert und das aktuelle System auf der SD-Karte auf das USB Medium kopiert.

Mit folgendem Befehl können wir nachschauen, welche Geräte angesteckt sind.

sudo fdisk -l

In der Ausgabe sollte die SD-karte, als auch der angesteckte USB Stick ersichtlich werden.

  • /dev/mmcblk0 – SD-Karte
  • /dev/sda – USB Stick

Zum erstellen der Partitionen verwenden wir das Tool parted. Auf dem USB Stick legen wir eine 100MB FAT32 Boot-Partition an. Der restliche Speicher wird als ext4 Linux Partition genutzt. Los gehts :)

sudo parted /dev/sda
(parted) mktable msdos

Den Start des Tools beantworten wir mit Yes. Anschließend erstellen wir die genannten Partitionen. Mit print kann die Eingabe, bevor diese auf dem USB Stick erstellt wird, überprüft werden.

(parted) mkpart primary fat32 0% 100M
(parted) mkpart primary ext4 100M 100%
(parted) print

Anschließend können wir das neue Dateisystem auf den USB Stick schreiben.

sudo mkfs.vfat -n BOOT -F 32 /dev/sda1
sudo mkfs.ext4 /dev/sda2

Die neuen Partitionen auf dem USB Stick mounten wir nun an unserem System und kopieren das aktuelle System der SD-Karte auf das USB medium.

sudo mkdir /mnt/usbdev
sudo mount /dev/sda2 /mnt/usbdev/
sudo mkdir /mnt/usbdev/boot
sudo mount /dev/sda1 /mnt/usbdev/boot/
sudo apt-get update; sudo apt-get install rsync
sudo rsync -ax --progress / /boot /mnt/usbdev

Damit wir das System auf dem USB Stick zukünftig verwenden können, müssen die SSH Host Keys erneuert werden. Andernfalls würde das System nicht starten.

cd /mnt/usbstick
sudo mount --bind /dev dev
sudo mount --bind /sys sys
sudo mount --bind /proc proc
sudo chroot /mnt/usbdev
rm /etc/ssh/ssh_host*
dpkg-reconfigure openssh-server
exit
sudo umount dev
sudo umount sys
sudo umount proc

Boot Parameter konfigurieren

Damit unser System auf dem USB Stick funktioniert, müssen wir diesem noch mitteilen, was gestartet werden soll. Dazu definieren wir die angelegte Boot Partition als primäre Boot Partition in der Datei /boot/cmdline.txt.

sudo sed -i "s,root=/dev/mmcblk0p2,root=/dev/sda2," /mnt/usbstick/boot/cmdline.txt

Außerdem muss dies auch in fstab definiert werden.

sudo sed -i "s,/dev/mmcblk0p,/dev/sda," /mnt/usbstick/etc/fstab

Abschließend können den Stick wieder unmounten und den Pi erstmals nur vom USB Stick starten (SD-Karte entfernen nach herunterfahren).

cd ~
sudo umount /mnt/usbdev/boot
sudo umount /mnt/usbdev
sudo reboot

Hinweise und USB Boot für Festplatten

Mit Hilfe des neuen Boot Modes kann der Raspberry Pi 3 von einem USB Medium gebootet werden. Da diese Technik noch recht frisch ist und in der Betaphase, kann es noch zu Problemen kommen. Insbesondere werden noch nicht alle USB Sticks von den zahlreichen Herstellern unterstützt. Eine bessere Unterstützung in dieser Hinsicht sollte jedoch in absehbarer Zeit gegeben sein.

Ein weiterer wichtiger Punkt ist die Verwendung einer USB Festplatte. Grundlegend ist dies möglich und auch eine recht gute Sache. Aufpassen muss man hier jedoch auch wieder auf die Kompatibilität der Festplatte. Einige Festplatten brauchen eine kurze Anlaufzeit. Diese Zeit ist zwar verschwindend gering, kann aber dennoch Auswirkungen haben. Der Bootloader des Raspberry Pi versucht dementsprechend von der Festplatte zu Booten. Wenn diese aber noch nicht “hochgefahren” ist, kann der Timeout des Bootloaders zuschlagen.

USB Boot für Raspberry Pi 1, 2 und Zero

Bisher funktioniert der neue Boot Mode lediglich mit dem Raspberry Pi 3. Ältere Modelle arbeiten mit dem Bootloader im SoC BCM2837. Trotzdem ist das Booten via USB auf Vorgängermodellen über Umwege möglich. Die SD-Karte ist dabei aber zwingend notwendig und fungiert als Boot Disk.

Hinterlasse eine Antwort

Kommentare

  • Hallo Tony,

    erst einmal vielen Dank für die sehr übersichtliche und auch genügend ausführliche Anleitung.

    Beim befolgen bin ich an einer Stelle gestolpert:
    kann es sein, dass du bei den Anweisungen zum Erneuern des SSH-Keys – und auch weiter unten beim Redefinieren der Bootparameter – statt “/mnt/usbdev” das nicht existierende Verzeichnis /mnt/usbstick” verwendet hast?
    Inzwischen bootet mein Raspb.V3 schon mal ohne SDcard .. leider mit einer Fehlermeldung bzgl. SSH-Key: angeblich hätte ich das StandardPasswort nicht geändert.

    Beim Boot von der SDcard will er aber das neue PW (!?!)

    Es hat aus irgend einem Grund bei mir die Anpassung des SSH-Keys nicht funktioniert.

    Kannst du mir einen Tipp geben, wie ich DAS nachträglich auf dem USB-Stick korrigieren/anpassen oder alternativ SSH vorübergehend erst einmal abschalten kann? … oder muß ich nun die ganze Prozedur noch einmal komplett durchführen?

    Wäre es nicht sinnvoll, die Umstellung auf USB-Stick erst einmal ohne SSH einzurichten und dann beim neuen, laufenden System erst das SSH zu aktivieren?

    Danke und Gruß, stepfl

  • Das müsste doch auch anders möglich sein?
    Wenn ich z.B. ein frisch installiertes Raspian benutze, um den USB Bootloader “einzuschalten”, ich aber auf der SSD dann Raspberrymatic laufen lassen will, so kann ich doch mit etcher die SSD direkt beschreiben, oder?
    Dann würde man sich den ganzen Umweg über gpart sparen, was in meinem Fall sowieso nicht funktionieren würde.