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

25 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
      • 18. Dezember 2017 um 13:42
        Permalink

        Hi Benjamin,
        Ich muß Deiner Ausführung widersprechen.
        Ich bekam am Samstag, 16.12.2017 meinen neuen Raspberry.
        Ich habe den USB-Boot laut Anleitung durchgeführt.
        Da ich meine neue Festplatte erst morgen bekomme, habe ich eine Festplatte genommen, die schon asbach uralt ist. Dieser würde ich definitiv keine Daten anvertrauen. Aber zum testen reicht es.
        So der Raspberry hat während des Bootvorganges einen Neustart gemacht. Es hat ewig gedauert, bis das System oben war. Aber es ging.
        Ich habe mir bewußt KEINE SSD bestellt, weil dieser Raspberry als reiner Logserver arbeiten soll um alle Zustände der CCU und den dazugehörigen Aktoren/Sensoren zu protokollieren.
        Aufgrund der Datenmenge wird auch in einschägigen Foren vor dem Eisatz von SD/SSD gewarnt.
        Gruß, Mathias

        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
  • 18. Juli 2017 um 0:00
    Permalink

    Also die Anleitung ist Super.
    Ich habe einen ziemlich neuen RaspPi 3 da scheint kein Update nötige gewesen zu sein nur dei
    Änderunge in der „config.txt“

    Ich habe normale Festplatten benutzt und da passierte erst gar nix.
    Dann habe ich die mal eine Weile vergessen und siehe da der Regebogen Bootscreen tauchte auf und
    die wollte immer noch von der SD-Karte booten.
    Dann noch mal nachgeschaut : Die sed Kommandos hatten die boot Datei gar nicht geändert und
    in der Fstab standen einfach falsche Werte weil ich ein NOOBS SD-Karte hatte und da Partition 7 und 8 drinn standen.
    Boot auf 2 und die fstab auf sda1 und sda2 geändert und schon klappt es !
    Super Anleitung, etwas mitdenken und auf den Bildschirm gucken sollte man schon können.
    Danke !

    Ulli

    Antwort
  • 18. Juli 2017 um 1:17
    Permalink

    Auf die Art habe ich jetzt auch ein UBUNTU-MATE zum booten von einer Festplatte gebracht.
    Von der Plattform antworte ich gerade 🙂

    Antwort
  • 26. Januar 2018 um 15:29
    Permalink

    Stand Januar/ 2018—PI3—-Stretch

    Danke, am Ende hat es funktioniert.
    sudo sed hat keine Funktion … root=/dev/sda2 usw. funtioniert nicht, denn es wird die PARTUUID verlangt.
    Diese kann mann sich mit sudo blkid anzeigen lassen und dann in die jeweiligen Dateien eintragen. Dabei sieht man auch falsche oder keine Label für die jeweiligen Partitionen.
    Mit sudo e2label /dev/sda1 boot und sudo e2label /dev/sda2 rootfs kann man das anpassen.
    THX, ich bin mit einer laufenden und funktionierende Installation umgezogen!

    Antwort
    • 28. Januar 2018 um 16:36
      Permalink

      Vielen Dank für die Anleitung! Nach dem Lesen zahlreicher Blogeinträge und vielen Fehlschlägen ist es nun auch mir gelungen meinen Pi von einer SSD booten zu lassen. Danke auch für den Kommentar, JL LaubegastJens. Genau das Problem hatte ich auch und nachdem ich die Änderungen vorgenommen habe, die du vorgeschlagen hast, ging es einwandfrei. Endlich!

      Antwort
  • 26. September 2018 um 20:55
    Permalink

    Vielen Dank für die wirklich gute Anleitung! Genau danach habe ich gesucht. Ich habe meine RaspberryPi mit einer 64GB SSD von Suptronic (X850) verbunden, und sie lief auf Anhieb. Ich hatte auf der SD bereits ein installiertes System mit eigenen Programmen. Nach dem Kopieren auf die SSD hat alles nach dem Reboot sofort funktioniert. Ok das PartUUID Thema hatte ich vorausgesehen und im Vorfeld bearbeitet.

    Antwort
  • 3. Dezember 2018 um 15:13
    Permalink

    Bei mir gibt es ab „sudo rsync -ax –progras… Probleme:
    ———————————————
    sudo rsync -ax –progress / /boot /mnt/target/
    sending incremental file list
    rsync: chown „/mnt/target/boot“ failed: Operation not permitted (1)
    rsync: recv_generator: mkdir „/mnt/target/boot/System Volume Information“ failed: Cannot allocate memory (12)
    *** Skipping any contents from this failed directory ***
    rsync: recv_generator: mkdir „/mnt/target/boot/overlays“ failed: Cannot allocate memory (12)
    *** Skipping any contents from this failed directory ***
    boot/
    ….
    ———————————————-

    UND Siehe auch noch:

    ———————
    boot/start_db.elf
    5,120,484 100% 23.14MB/s 0:00:00 (xfr#25, ir-chk=1003/1194)
    boot/start_x.elf
    4,057,956 100% 15.54MB/s 0:00:00 (xfr#26, ir-chk=1002/1194)
    boot/System Volume Information/
    rsync: mkstemp „/mnt/target/boot/.COPYING.linux.nzun3c“ failed: Cannot allocate memory (12)
    rsync: mkstemp „/mnt/target/boot/.LICENCE.broadcom.UAZWKf“ failed: Cannot allocate memory (12)
    rsync: mkstemp „/mnt/target/boot/.LICENSE.oracle.lTMyni“ failed: Cannot allocate memory (12)
    rsync: mkstemp „/mnt/target/boot/.bcm2708-rpi-0-w.dtb.umwPWk“ failed: Cannot allocate memory (12)
    rsync: mkstemp „/mnt/target/boot/.bcm2708-rpi-b-plus.dtb.F2vdtn“ failed: Cannot allocate memory (12)
    —————————————

    KANN DA JEMAND WEITERHELFEN????

    Antwort
  • 15. März 2019 um 19:34
    Permalink

    Hallo,

    ich habe es nach diesem Script probiert, und es lauft nicht, Raspberry booted nur von der SD-Karte.

    Mir sind diese Zeilen suspekt

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

    Die datei cmdline.txt enthält nicht den Ausdruck

    1) root=/dev/mmcblk0p2

    dieser Ausdruck soll ja ersetzt werden durch

    root=/dev/sda2

    Wenn es den Ausdruck 1 nicht gibt, passiert nichts, wenn ich es richtig verstanden habe. Ich habe mir die Date nach der installation angesehen. Verstehe ich dort etwas nicht richtg. Habe es mehrfach versucht, mit unterschiedlichen USB-Sticks und unterschiedlicher Größe, 16, 32 Giga.
    Bin für jeden Tip dankbar.

    Reinhold

    Antwort
  • 13. Juni 2019 um 11:10
    Permalink

    Eine weitere Lösung:
    Die 2 letzten Zeilen (sind veraltet)
    sudo sed -i „s,root=/dev/mmcblk0p2,root=/dev/sda2,“ /mnt/target/boot/cmdline.txt
    sudo sed -i „s,/dev/mmcblk0p,/dev/sda,“ /mnt/target/etc/fstab

    Ich habe mit blkid die PARTUUID herausgelesen und die /etc/fstab und /boot/cmdline.txt auf der SSD von Hand geändert.
    Danach habe ich SD-Karte entfernt und von der SSD gebootet.(langsam)
    Für den schnelleren Start habe ich die SD-Karte wieder eingeschoben und mit mount die boot-partition hinzugefügt.
    Auf der SD-Karte wird die /boot/cmdline.txt, mit der /boot/cmdlinte.txt der SSD überschrieben.

    Viel Spaß 🙂

    Antwort
  • 25. November 2023 um 16:03
    Permalink

    Hallo zusammen,
    mitlerweile reicht es mit der Raspberry Lite einmal zu starten in der der Eintrag in der config.txt eingetragen ist.
    Anschließen kann das gewünsche Betriebssystem auf einen Sick installiert werden. Am besten über den Raspberry Pi Imager.

    Viel Spaß

    Antwort
  • 1. Januar 2024 um 12:42
    Permalink

    Vielen Dank für die tolle Beschreibung.
    Leider bekomme ich die SSD nicht zum Fliegen. Ein Kontrollversuch mit einem USB-Stick verlief erfolgreich.
    Ich habe mit folgendem Code
    echo program_usb_boot_mode=1 | sudo tee -a /boot/config.txt
    versucht die Pi3 zu einer längeren Wartezeit zu bringen, da meine Vermutung ist, dass die SSD zu langsam für den Pi3 ist und er die bootfähige SSD nicht erkennt.
    Gibt es noch eine Idee oder einen Vorschlag, wie ich den Pi3 dazu bewegen kann, dass er länger auf die SSD wartet?
    Habe eine Kingston A400 mit 480GB und ein UGREEN Gehäuse genommen, die auf einer Pi3 Seite empfohlen wurden.
    Wäre toll wenn man mir hier weiterhelfen könnte.

    Antwort

Kommentar verfassen

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.

WordPress Cookie Plugin von Real Cookie Banner