Raspberry Pi 3: Von USB-Sticks und SSD-Festplatten booten

Mit der ursprünglichen Ankündigung des Raspberry Pi 3 haben die Entwickler weitere Boot-Optionen für den kleinen Rechner in Aussicht gestellt. Eine davon ist das Booten von USB-Massenspeicher. Diese Ankündigung wurde jetzt mit einem experimentellen Bootloader umgesetzt. Mit diesem kann der Raspberry Pi 3 von SSD-Festplatten und USB-Sticks booten. Eine mircoSD-Karte ist zukünftig nicht mehr notwendig.

Die Einrichtung zum Booten von USB-Sticks und SSD-Festplatten für den Raspberry Pi 3 ist nicht kompliziert. Anwender, die mehr Speicherplatz benötigen, beispielsweise für die Installation von ownCloud auf dem Raspberry Pi, können sich jetzt einige Schritte bei der Einrichtung sparen. Jedoch gilt zu bedenken, dass sich die veröffentlichte Version noch im Beta-Status befindet. Zudem funktioniert diese Anleitung nur mit einem Raspberry Pi 3 und nicht mit den Modellen 2 und 1.

Update (06.10.2016): Durch die Hinweise in den Kommentaren ist mir aufgefallen, dass WordPress die Kommandozeilen falsch darstellt. Das wurde jetzt durch entsprechende Textboxen behoben. Vielen Dank an kiar.

Raspberry Pi 3: Von USB-Sticks und SSD-Festplatten booten
Raspberry Pi 3: Von USB-Sticks und SSD-Festplatten booten (Bild: raspberrypi.org)

Raspberry Pi 3: Von USB-Sticks und SSD-Festplatten booten

Die Vorab-Version des Bootloaders wird mit dem kommenden Raspbian-Release eingesetzt und ermöglicht das Booten von USB-Laufwerken. Dadurch lässt sich zukünftig die Nutzung der microSD-Karten vermeiden, die für gelegentliche Wackelkontakte und Zugriffsprobleme bekannt sind. Wer die Anleitung umsetzen möchte, muss bedenken, dass sich die Funktion noch in der Testphase befindet.

Hinweis: Nicht alle USB-Sticks und SSD-Festplatten funktionieren mit dieser Anleitung. Einige USB-Massenspeicher starten zu langsam. Der Bootloader erwartet eine Reaktion innerhalb von 2 Sekunden. Diese Antwortzeit lässt sich gegebenenfalls auch auf 5 Sekunden erhöhen. USB-Sticks und SSD-Festplatten, die innerhalb dieser Zeit nicht reagieren, werden vom Bootloader nicht berücksichtigt.

Damit der Raspberry Pi 3 von einer SSD-Festplatte oder USB-Stick bootet, muss der USB boot mode aktiviert werden. Um diesen aktivieren zu können, wird eine spezielle start.elf und bootcode.bin Datei benötigt. Diese lassen sich über den „next“-branch beim rpi-update installieren.

Schritt 1: Raspbian auf SD-Karte installieren

Vor dem Start wird eine lauffähige Installation von Raspbian auf einer microSD-Karte benötigt. Die Einrichtung wird hier im Blog ausführlich erklärt.

Schritt 2: /boot-Verzeichnis bearbeiten

Das /boot-Verzeichnis der Raspbian-Installation ist mit experimentellen Boot-Dateien auszustatten. Anwender die Raspbian Lite nutzen, müssen vorher das rpi-update ausführen.

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

Anschließend lässt sich der USB boot mode wie folgt einschalten:

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

Dadurch wird die Zeile program_usb_boot_mode=1 an das Ende der Datei /boot/config.txt gesetzt. Danach ist der Raspberry Pi neuzustarten.
sudo reboot

Nach dem Neustart ist zu prüfen, ob der OTP (One-Time Programmable Speicher) programmiert wurde:

vcgencmd otp_dump | grep 17:

Das Ergebnis sollte wie folgt lauten:

17:3020000a

Dabei ist zu prüfen, dass das Ergebnis 0x3020000a richtig ist.

Der Raspberry Pi 3 ist jetzt fähig, von einem USB-Stick oder einer SSD-Festplatte zu booten.

Schritt 3: Optional: USB boot mode entfernen

Wenn ihr die mircoSD-Karte mit der Raspbian Installation in verschiedenen Raspberry Pis im Einsatz habt, würde jeder Neustart dazu führen, dass der USB boot mode auf jedem Geräten aktiviert wird. Sollte das nicht gewünscht sein, müsst ihr die Zeile program_usb_boot_mode wieder aus der config.txt entfernen. Vergewissert euch dabei, dass am Ende der Datei keine leere Zeile übrig bleibt. Folgender Befehl ruft die config.txt auf:

sudo nano /boot/config.txt

Schritt 4: USB-Speicher vorbereiten

Warnung: Der USB-Massenspeicher, von dem der Raspberry Pi 3 zukünftig booten soll, darf keine wichtigen Dateien enthalten, da dieser vollständig gelöscht wird.

Verbindet den USB-Massenspeicher mit dem Raspberry Pi. Anstatt das Raspbian Image neu herunterzuladen, wird dieses einfach von der mircoSD-Karte auf den USB-Speicher kopiert. Dazu nutzen wir den Linux CP-Befehl zum Kopieren von Dateien. Die Quelle ist die mircoSD-Karte /dev/mmcblk0 und das Ziel der USB-Speicher /dev/sda. Prüft vor dem Ausführen, dass die Angaben richtig sind. Diese können sich ändern, wenn weitere USB-Geräte verbunden sind.

Mit dem parted Befehl wird eine 100 MB große FAT32 Partition erstellt, gefolgt von einer Linux ext4 Partition, welche den restlichen Speicherplatz einnimmt.

sudo parted /dev/sda

(parted) mktable msdos

Warning: The existing disk label on /dev/sda will be destroyed and all data on this disk will be lost. Do you want to continue?
Yes/No? Yes
(parted) mkpart primary fat32 0% 100M
(parted) mkpart primary ext4 100M 100%
(parted) print
Model: SanDisk Ultra (scsi)
Disk /dev/sda: 30.8GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:

Number Start End Size Type File system Flags
1 1049kB 99.6MB 98.6MB primary fat32 lba
2 99.6MB 30.8GB 30.7GB primary ext4 lba

Euer parted Ergebns sollte ähnlich wie aus meinem Beispiel oben aussehen. Anschließend sind die Dateisysteme für boot und root zu setzen:

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

Mountet das Ziel-Dateisystem und kopiert das laufende Raspbian-System auf den USB-Massenspeicher:

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

Die SSH-Host Keys müssen wiederhergestellt werden:

cd /mnt/target
sudo mount --bind /dev dev
sudo mount --bind /sys sys
sudo mount --bind /proc proc
sudo chroot /mnt/target
rm /etc/ssh/ssh_host*
dpkg-reconfigure openssh-server
exit
sudo umount dev
sudo umount sys
sudo umount proc
Anschließend ist die /boot/cmdline.txt zu bearbeiten, so dass diese den USB-Massenspeicher anstatt die mircoSD-Karte als root-Dateisystem verwendet:

 

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

Das gleiche gilt für fstab:

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

Danach muss man das Ziel-Dateisystem unmounten und den Raspberry Pi 3 ausschalten:

cd ~
sudo umount /mnt/target/boot
sudo umount /mnt/target
sudo poweroff

Abschließend den Strom-Stecker von Raspberry Pi abziehen und die mircoSD-Karte entfernen. Jetzt kann der kleine Rechner wieder mit Strom versorgt werden und sollte direkt von USB-Massenspeicher booten.

Persönliche Meinung

Wer große Mengen an Daten auf dem Raspberry Pi speichern möchte, musste bisher Raspbian von der microSD-Karte laufen lassen und anschließend ein USB-Massenspeicher einbinden und diesen als Speicherort festlegen. Beispielsweise für die Installation von Seafile auf dem Raspberry Pi. Dieser Umweg entfällt zukünftig. Auch das Problem mit den Wackelkontakten der mircoSD-Karte lässt sich auf diese Weise vorbeugen.

Ist für euch das Booten vom USB-Massenspeicher für den Raspberry Pi ein großer Vorteil? Schreibt mir eure Meinung in den Kommentaren.

Quelle: Raspberrypi.org

14 Gedanken zu „Raspberry Pi 3: Von USB-Sticks und SSD-Festplatten booten

  • 24. August 2016 um 18:26
    Permalink

    nix geht!
    meine fresse nochmal! wie kann man nur eine anleitung veröffentlich die nicht funktioniert?! das schlimmste ist, dass nach schritt2 sudo reboot keine ssh verbindung aufgebaut werden kann. alter, LÖSCH diese anleitung!!!!!!

    Antwort
    • 25. August 2016 um 7:53
      Permalink

      Hallo Jonny,

      die Anleitung funktionierte bei mir fehlerfrei. Der Beitrag beschreibt die Vorgehensweise von Raspberrypi.org.

      Hast du sichergestellt, dass dein USB-Speicher schnell genug ist. Eine herkömmliche USB-Festplatte funktioniert beispielsweise nicht.
      Es sollte ein schneller USB-Stick oder eine SSD sein.

      Bitte achte auf deine Ausdrucksweise.

      Grüße Benjamin

      Antwort
  • 21. September 2016 um 13:59
    Permalink

    Ich kriege das laut deiner Anleitung nicht hin. Komme bis zu den Partitionen und wenn er dann die Sd-Karte kopieren soll sagt er mir das die dateien in benutzung sind und nicht kopiert werden können.

    Antwort
  • 24. September 2016 um 15:01
    Permalink

    Gibt es mittlerweile eineLösung für dieses HowTo? Wenn´s nicht funzt, nütz es wohl niemandem..Vielleicht wäre ein Link auf den entsprechenden Raspberry-Forum Eintrag hilfreich?

    Antwort
  • 3. Oktober 2016 um 13:26
    Permalink

    sudo mount –bind /dev dev
    sudo mount –bind /sys sys
    sudo mount –bind /proc proc
    sind falsch, müssen heißen
    sudo mount –bind /dev dev
    sudo mount –bind /sys sys
    sudo mount –bind /proc proc

    Antwort
    • 3. Oktober 2016 um 13:33
      Permalink

      Das verwendete CMS stellt scheinbar keine doppelten Bindestriche dar, sondern macht einen langen Bindestrich daraus.
      Die bind-Befehle brauchen aber 2 Bindestriche davor.

      Antwort
      • 6. Oktober 2016 um 18:57
        Permalink

        Hallo kiar,

        vielen Dank für deinen Hinweis. Ich habe die Darstellung im Beitrag überarbeitet.

        Beste Grüße
        Benjamin

        Antwort
        • 4. Januar 2017 um 15:08
          Permalink

          Trotzdem alles bei mir nach Anleitung funktioniert hat, ich will auch mit meckern. Nein, war ein Scherz. Allerdings hast Du vergessen für die Überschlauen anzugeben,daß das Partitionsprogramm mit „quit“ beendet werden muß, bevor man weiter nach Anleitung fortsetzen kann. Danke, bei mir hat alles prima geklappt.

          Antwort
  • Pingback: Wordpress: Code in Beiträgen richtig darstellen – random brick [DE]

  • 18. November 2016 um 21:51
    Permalink

    Hallo Benjamin,
    Top Anleitung – viiiiiielen Dank!

    Eine Frage zum Verständnis zur Nutzung von rsync:
    Du mountest / und boot Partition ins target und dann
    sudo rsync -ax –progress / /boot /mnt/target

    wäre es nicht möglich auch so zu kopieren (nach der mounterei):
    sudo rsync -a –progress / /mnt/target

    Gruß
    *michi*

    Antwort
    • 19. November 2016 um 9:06
      Permalink

      Hallo Michael,

      das müsste man ausprobieren. Ganz sicher bin ich mir da nicht.

      Grüße Benjamin

      Antwort
  • 19. November 2016 um 15:24
    Permalink

    Hallo Benjamin,

    recht herzlichen Dank für die super Anleitung – hat bei mir auf Anhieb funktioniert, bis zum apt-get update / upgrade. Danach ist das System nicht mehr hochgefahren. Nach der erneuten Ausführung der Anleitung funktioniert es wieder bis zum Update… Kannst Du mir sagen was da falsch läuft?

    Gruß von Frank

    Antwort
  • 27. November 2016 um 13:46
    Permalink

    Hallo Benjamin,
    echt top Deine Anleitung.
    Das funktionierte bei mir astrein. Jetzt habe ich eien m.2 ssd am raspy 🙂
    Respekt!

    Einzige Besonderheit: nachdem alles über die usb-ssd lief und bootete, habe ich einen dist-upgrade gemacht. Danach ging gar nix mehr (bootete nicht mehr).
    Ich habe dann die /boot partition nochmal von der sd Karte auf die usb ssd kopiert. Dann hat wieder alles funktioniert.
    Hast Du eine Idee was da schief egangen sein könnte?
    Traue mich nicht mehr einen dist-upgrade zu machen.

    Gruß
    *michi*

    Antwort
    • 28. November 2016 um 17:04
      Permalink

      Hallo *michi*,

      das ist komisch, denn eigentlich wurde die Version mit der aktuellen Version ausgeliefert.
      Wieso das dist-upgrade das Booten von der SSD-Festplatte zerstört, kann ich dir leider nicht erklären.

      Das wäre evtl. etwas für ein entsprechendes Raspberry Pi Forum.

      Grüße Benjamin

      Antwort

Kommentar verfassen