Raspberry Pi 3 von USB3.0 Festplatte OHNE SD Karte booten

  • Hallo, mein erster Beitrag hier im Forum und gleich ein Tutorial. Ich habe mich die letzte Woche damit beschäftigt, den RPI3 über eine am USB Port angeschlossene Festplatte zu booten. Nach langem Probieren, habe ich es letztlich auch geschafft und mein RPI3 läuft nun über eine 500GB USB3.0 Festplatte. Ganz ohne SD-Karte, da der RPI3 auf die FAT32 Bootpartition auf der Festplatte zugreift und die SD-Karte daher nicht mehr benötigt.


    Das Tutorial ist im Original im Forum meiner Homepage zu finden: http://www.ws-hohenwalde.de/Fo…ic.php?f=16&t=20&p=26#p26


    Ich habe aber mal den BB_Code kopiert und hier eingefügt:


    • Die Bootpartition ist FAT32 und kann daher auh unter Windows gelesen und beschrieben werden. Und dies ist auch ganz gut. Denn so kann die Datei "config.txt" auch gleich editiert werden. Dies ist notwendig um die USB-Boot-Funktin zu aktivieren. Denn diese ist von Werk aus deaktiviert, so dass der RPI3 nur von SD-Karte bootet.
    • Auf der FAT32 Partition "BOOT", befindet sich wie gesagt die Datei "config.txt". Dieser ist der folgende Eintrag in der letzten Zeile hinzu zu fügen:

      Code
      program_usb_boot_mode=1

      Und speichern.

    • Nun ist der Raspberry mit dieser SD-Karte zu booten. Beim Booten wird durch die eingefügte Zeile ein Bit in der RPI-Hardware dauerhaft geändert, welches das Booten von USB-Medien aktiviert.
    • Sobald der Desktop gestartet ist, kann unter "Einstellungen ->Raspberry-Pi-Konfiguration", alternativ in der Konsole mittels
      Code
      sudo raspi-config

      das Tastaturlayout auf deutsch umgestellt werden. Denn von Hause aus, ist beim Rasperry die amerikanische Tastatur aktiv.

    • Nun ist das Terminal zu starten und mittels

      Code
      sudo apt-get update
      sudo apt-get upgrade

      das System zu aktualisieren. Dies ist notwendig, da erst ab dem Release 11-2016 Maus und Tastatur auch beim Booten von einem USB-Medium funktionieren.

    • Nun muss mittels
      Code
      sudo BRANCH=next rpi-update

      auch die Firmware des RPI aktualisiert werden. Denn erst die hiermit heruntergeladene Firmware unterstützt das Booten von USB-Medien. Geschieht dies nicht, wird beim Booten zwar kurz auf die externe Festplatte zugegriffen, kurz danach wird der USB-Anschluss aber wieder deaktiviert und das System entsprechend nicht von der externen Festplatte geladen.

    • Kommen wir jetzt zur externen Festplatte. Bei mir haben sich Festplatten mit USB3.0 Anschluss als geeignet erwiesen. Alle hier vorhandenen Daten sind, sofern wichtig, zu sichern, da diese nachfolgend gelöscht werden. Da diese Festplatten meist Ströme von 1 Ampere ziehen, ist hier ein aktiver USB-Hub mit mind. 1,5A Netzteil angeraten. Ich stecke die beiden Netzteile (Raspberry + akt. USB-Hub) in eine schaltbare Steckdose, so dass beide Netzteile zeitgleich eingeschaltet werden. Im abgeschalteten Zustand ist die externe Festplatte in den USB-Hub zu stecken und dieser wiederum am RPI3 anzustecken. Beide Netzteile werden über die schaltbare Steckdose zeitgleich eingeschaltet. Der RPI3 bootet wie gewohnt von der SD-Karte, da auf der externen Festplatte noch kein System aufgespielt wurde.
    • Weiter geht es mit dem überspielen des Systems von der SD-Karte auf die externe Festplatte. Hierbei kommt das Terminal zum Einsatz:
    • Ist der Raspberry hoch gefahren, benötigen wir Gparted, welches ganz einfach mittels
      Code
      sudo apt-get install gparted

      installiert wird. Bevor nachfolgend das Dateisystem für die externe Festplatte erstellt wird, sollte Gparted kurz in der Desktop-Version gestartet werden um die Laufwerksbezeichnung zu prüfen. Ist nur eine einzige externe Festplatte angeschlossen, so hat sie sie meist die Bezeichnung SDA, und ihre Partitionen entsprechend SDA1, SDA2, ... je nach Anzahl der Patiotionen. Diese Bezeichnung wird in den kommenden Schritten wichtig. Es wird immer von SDA ausgegangen, also nur einer angeschlossenen USB-Festplatte.a

    • Mit Gparted wird nun die MSDOS - Tabelle erstellt:

      Der FAT32 Boot-Partition werden also 100MB zugewiesen, der ext4-Partition der restliche Speicherplatz.

    • Diese Tabelle stellt die Grundlage für die beiden Dateisysteme dar, welche nachfolgend erstellt werden:
      Code
      sudo mkfs.vfat -n BOOT -F 32 /dev/sda1
      sudo mkfs.ext4 /dev/sda2


    • Nun existieren auf der Festplatte 2 leere Partitionen. Da fehlen also noch die Daten, welche nachfolgend von der SD-Karte herüber kopiert werden:
      Code
      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

      Es wird also zuerst ein neuer Ordner namens "target" erstellt, in welchem die Partition SDA2 (die ext4-Partition), gespiegelt wird. Auf dieser Partition wird nachfolgend der Ordner "Boot" erstellt, in welchen die FAT32-Partition gespiegelt wird. Diese Vorgehensweise hat den Vorteil, dass die Boot-Dateien nicht nur in die Boot-Partition geschrieben werden, sondern nochmal als Sicherungskopie auf der EXT4-Partition im Ordner "BOOT" abgelegt werden. Durch den Zusatz "--progress" wird der Verlauf des kopierens angezeigt, so dass man zumindest sieht, ob noch fleißig kopiert wird. Leider fehlt eine Prozentanzeige, so dass man nur hoffen kann, dass die Tasse Kaffee oder Tee nicht schon vor Fertigstellung des Kopiervorgangs leer ist :D.


    Ist der Kopiervorgang erfolgreich beendet worden, kann man mit

    Code
    sudo poweroff

    den Raspberry herunter fahren. Nach dem offensichtlichen Abschalten, würde ich dem Raspberry noch runde 20 Sekunden Zeit einräumen um sicher zu gehen, dass die externe Festplatte keine Dateioperationen mehr durchführt und erst dann die Steckdose abschalten. Nun kann die Micro-SD Karte entnommen und die Steckdose wieder eingeschaltet werden. Der Raspberry startet und nach kurzer Zeit fängt die LED der externen Festplatte an zu blinken. Es erscheint ein bunter Bilderschirm, gefolgt einem schwarzen Bildschirm mit 4 Himbeeren (dem Logo des Raspberry). Danach erscheint ein weisses Bild mit dem Titel "Welcome to Pixel" mit der Raspberry-Himbeere in der Bildmitte. Unten rechts steht das aktuelle Release, welches mindestens von November 2016 stammen sollte. Unten links rauschen in schneller Folge die aktuell geladenen Treiber durch. Dieses Bid wird nachfolgend von einem schwarzen Bildschirm abgelöst, welchem die Desktopoberfläche vom Rasbian System folgt. Der gesamte Bootvorgang dauert bei mir mit frischem System nicht länger als 30 Sekunden. Beim Drücken der 3 Tasten ALT+STRG+ENTF erscheint der Taskmanager, welcher rechts 877MB als verfügbaren Arbeitsspeicher anzeigen sollte. Zeigt dieser nur 117MB an, so ist über die Konsole der Befehl

    Code
    sudo BRANCH=next rpi-update

    auszuführen. Hiermit wird die Firmware des Raspberry erneut herunter geladen und installiert. Sollte der Raspberry danach nicht mehr von der externen Festplatte booten, sind die Dateien "bootcode.bin" sowie "start.elf" auf der FAT32-Bootpartition mit denen aus dieser ZIP-Datei zu überschreiben. Danach sollte das System wieder von der USB-Festplatte booten und der Taskmanager sollte 877MB verfügbaren Arbeitsspeicher anzeigen. Sind es mehr als 877MB, ist der Grafikeinheit des Raspberry entsprechend weniger Arbeitsspeicher zugewiesen. Denn die CPU als auch die GPU (Zentrale Prozessoreinheit, sowie die Grafische Prozessoreinheit) teilen sich den 1GB-RAM. Der Speicher für die GPU ist über die Raspberry-Pi-Konfiguration unter der Registerkarte "Leistung" unter dem Punkt "GPU-Speicher" im Bereich von 16MB - 896MB einstellbar und steht bei mir aktuell auf 112MB. Entsprechend steht der CPU dann natürlich weniger Arbeitsspeicher zur Verfügung.


    So, dass soweit. Ich hoffe ich habe alles richtig wieder gegeben, so dass es auf Anhieb funktioniert. Wer Fragen oder Anregungen hat, kann mich über WS-HoWa[at]gmx.de erreichen.


    Quellen des Beitrags:
    How to boot from a USB Mass Storage Device on a Raspberry Pi 3
    Sowie eigene Versuche.


    [hr]


    Sinn des Ganzen ist es, mein Wetterstationssystem vom derzeitigen Banana-Pi auf den Raspberry-Pi umzuziehen. Da über den Banana auch Satellitenempfang sowie die Dekodierung der Satellitenbilder (NOAA-Wettersatelliten) läuft, wird hier einiges an Rechenleistung benötigt. Da hat der RPI3 gegenüber dem Banana-Pi eindeutig die Nase vorn. Ebenso generiert der Banana stündlich ein Zeitraffervideo der vergangenen 60 Minuten, nachts um 23:55 Uhr wird aus den einzelnenen Webcambildern des Tages gar ein Zeitraffer generiert. Ich bin gespannt, wie sich der Raspberry Pi 3 schlägt. Der Banana-Pi macht es bisher alles hervorragend. Da es nun aber schnelle Technik gibt, will ich diese neue, schnellere Technik auch nutzen.


    Nun denn, viel Erfolg mit der Anleitung. Ich hoffe, dass sie zu sofortigem Erfolg führt. Ich selbst habe rund eine Woche lang jeden Tag viel geknobelt und probiert, bevor es nun funktioniert hat.

  • Sehr schöner Beitrag, vielen Dank dafür! Noch eine Frage und eine Anmerkung:



    Nun muss mittels

    Code
    sudo BRANCH=next rpi-update

    auch die Firmware des RPI aktualisiert werden. Denn erst die hiermit heruntergeladene Firmware unterstützt das Booten von USB-Medien. Geschieht dies nicht, wird beim Booten zwar kurz auf die externe Festplatte zugegriffen, kurz danach wird der USB-Anschluss aber wieder deaktiviert und das System entsprechend nicht von der externen Festplatte geladen.


    Ist das tatsächlich noch aktuell? Ich dachte, auch der stable branch der Firmware würde mittlerweile den USB-boot unterstützen. Hast Du das (mit einem aktuellen Image) selbst ausprobiert?



    Diese Vorgehensweise hat den Vorteil, dass die Boot-Dateien nicht nur in die Boot-Partition geschrieben werden, sondern nochmal als Sicherungskopie auf der FAT32-Partition im Ordner "BOOT" abgelegt werden.


    Das ist so nicht richtig. Da Du sda1 in den Ordner mountest, wird das Unterverzeichnis im EXT4-Dateisystem auf sda2 davon maskiert - die Dateien landen also ausschließlich in der FAT32-Partition auf sda1 - reicht ja auch.


  • Sehr schöner Beitrag, vielen Dank dafür! Noch eine Frage und eine Anmerkung:


    Ist das tatsächlich noch aktuell? Ich dachte, auch der stable branch der Firmware würde mittlerweile den USB-boot unterstützen. Hast Du das (mit einem aktuellen Image) selbst ausprobiert?


    Jupp, mit einem aktuellen Image lief es nicht. Zum Download steht bisher nur ein Image vom September 2016 bereit und hier wird das Booten von USB noch nicht unterstützt. Auch nach dem Software-Update über update/upgrade half hier nicht weiter. Erst durch den Download der Beta-Treiber lief es.


    Das ist so nicht richtig. Da Du sda1 in den Ordner mountest, wird das Unterverzeichnis im EXT4-Dateisystem auf sda2 davon maskiert - die Dateien landen also ausschließlich in der EXT4-Partition auf sda1 - reicht ja auch.


    Alles klar. Danke für den Hinweis. Bin auch der Meinung mich gewundert zu haben, warum der BOOT Ordner auf SDA2 leer war. Aber logisch, die Dateien gingen ja auf die FAT32/SDA1 Partition. Entsprechend ist der Boot-Ordner auf SDA2 nach dem umount wieder leer. Hinweis: SDA1 = FAT32 | SDA2 = EXT4 ;).

  • Danke für den Artikel!


    Betreibe seit einigen Monaten meine Pi's mit USB, bin allerdings wieder zu der alten Methode mit /boot über SD-Karte zurückgestiegen da
    "sudo BRANCH=next rpi-update" nicht gewartet wird und mann keine 'sudo apt-get upgrade' und 'dist-upgrade' sowie auch kein 'rpi-update' machen kann.


    Deswegen boote ich von der SD und hab alles andere auf dem USB. Damit wird auf SD nur bei updates vom System schreibend zugegriffen, sonst nur lesend während dem Bootvorgang. Mit der Methode kann ich auch letzte Pixel-OS auf USB verwenden und mein Sense-Hat auf einem der Pi's funktioniert wieder.


    Hoffe das spätere Distros den USB/Net-Boot auch in die normalen bootloader implementieren.

    Frank


    Nach 35 Jahren im IT business hab ich mit Raspi mal selbst zum Programmieren begonnen...
    Habe auch einen 3D-Drucker, eine CNC-Fräse und etwas Elektronik-Bastelei als Hobby



  • Guten Morgen.


    Also ich kann nicht sagen, dass ich Probleme hätte. Ich habe die letzten Tage mir noch GNURadio und Lazarus installiert und alles ließ sich hervorragend installieren. Update/Upgrade als auch dist-upgrade und rpi-upgrade, funktioniert alles bestens.

  • Hallo,


    Ich habe jetzt Stunden damit verbracht, den Inhalt meiner SD Karte auf die SSD zu kopieren.
    Habe diese gut geschrieben Anleitung 3 mal durchgeführt.
    Doch ich habe immer das gleich Problem.
    1) Mein Raspberry 3 bootet nicht direkt von der SSD. Stört mich weiter nicht, denn ich habe mir eine alte SD Karte mit 2GB als Bootmedium gerichtet.


    Das 2) Problem ist viel viel größer. Ich habe immer eine Kernelpanic, wenn er von der SSD bootet.


    Ich habe mir das ganze jetzt ohne Bootmedium gerichtet, die Daten von nach einer älteren Anleitung auf die SSD kopiert.
    https://www.carluccio.de/raspb…ystem-auf-usb-festplatte/
    Hier bootet der Raspberry ganz normal, was mir aber aufgefallen ist. es fehlen wichtige Teile aus den /dev Verzeichnis.
    Aufgefallen dadurch, dass es der i2c Bus nicht lädt.
    Ich kann auch raspi-config nicht ausführen. Hier bekomme ich die Meldung:

    Code
    mount: mount point /config/device-tree does not exist
    * Failed to mount configfs - 2


    Das /dev Verzeichnis wurde aber sehr wohl kopiert.


    Irgendwie verzweifle ich langsam. :helpnew: :helpnew: :helpnew:
    Das eine geht absolut nicht, bei der anderen fehlen wichtige Teile. Ich habe zwar Fehler erhalten, dass er mache Dateien nicht kopieren kann, weil sie benutzt wurden. Verstehe ich auch, weil ja das System läuft.


    Wer von euch kann mir weiterhelfen?
    Die Suche nach anderen HowTo's bringt nichts mehr, denn die man findet machen alle im Prinzip das gleiche.
    Nur was mich etwas wundert ist, dass alle HowTos vom August 2016 sind, obwohl danach eine Systemupdate war.


    entweder braucht das keiner und alle arbeiten mit dem Schwachsinn SD Karte. :wallbash:
    Ich sage deshalb Schwachsinn SD Karte, denn eine SD Karte beherrscht nur FAT32 wirklich, alles andere muss in der Karte beim Schreiben und auch beim Lesen übersetzt werden. USB Sticks sind da anders, haben aber auch die viel viel niedrigere Schreibanzahl, im Gegensatz zu einer SSD.

    Gruß Georg


    ... und sie leben doch :cool:


    Raspberry Pi B+, Raspberry Pi2, Raspberry Pi3

  • Hi und guten abend
    Ich habe auch die ganze anleitung mehrmals abgearbeitet und er Bootet nicht von der ssd Intel 80 GB. Ich habe auch alles mit einem 32Gb Stick von Sandisk versucht , genau das gleiche ergebnis. wenn ich die SD Karte rausziehe bleibt der Monitor schwarz und die Led leuchten ohne zu Flackern . Die Led vom USB zu Sata Blinkert nur einmal wen der Pi hochfärt . Die Daten sind aber auf der HD und auf dem Stick vorhanden .
    Ich bin überzeugt das nur eine kleinigkeit nicht stimmt. wer kann helfen. Danke
    MfG Achim

  • Diese Anleitung ist wegen dem aktuellen Image veraltet.


    Das aktuelle Image ist bereits für USB Boot vorbereitet.


    Wenn man das wichtige Register auf dem Pi3 mit einer SD Karte (program_usb_boot_mode=1) umgeschaltet hat (auf dieser SD sind dann auch keinerlei weitere Konfigurationen nötig, sie dient nur zum Umschalten auf USB Boot),
    kann man das Image direkt auf einen USB Stick (Platte habe ich noch nicht probiert, sollte aber klappen) flashen und davon booten.


    Die Ergänzung, Einrichtung und Kopiererei der SD Karte kann man sich nun sparen und alle notwendigen Konfigurationen später auf dem USB Medium durchführen.

    ;) Gruß Outi :D
    PIs: 2x Pi B (Rente) / 1x Pi B+ (Rente) / 1x Pi 2 B (Tests) / 2x Pi 3 B (RaspberryMatic / Repetier Server) / 2x Pi Zero 1.2 (B. Lite) / 2x Pi Zero 1.3 (B. Lite)
    2x Pi Zero W 1.1 (B. Lite) / 1x Pi Zero 2 (noch ohne) / 1x Pi 3 B+ (Tests) / 1x Pi 4 B 4GB (Ubuntu Server 64 Bit) / Pi 400 (Bullseye) / 2x Pi Pico
    Platinen: Sense HAT / RPI-RF-MOD / PiFi DAC+ V2.0 / TV HAT

  • Die Toshiba Festplatte ist im Test mit 3,5 Watt im Betrieb angegeben - das entspricht 700 mA. Zu viel für einen USB 2.0 (max 500 mA). Im Anlauf zieht der Motor vielleicht noch mehr.
    Zur WD findet man nicht mal auf der Website konkrete Angaben zum Stromverbrauch.


    An einem USB 3.0 würde es gehen, aber ich würd die nicht direkt an den USB 2 Port des Pi hängen...


    Du müsstest ein aktives (USB 3.0) Hub dazwischen hängen oder sucht dir im Zweifel eine externe HD mit gesonderter Stromversorgung.

    Oh, man kann hier unliebsame Nutzer blockieren. Wie praktisch!

  • Ach so. Na da ist ja Schade. Es gab ja auch mal HDs die mit 2 USB-Kabel versorgt wurden, vielleicht finde ich ja so was....



    MfG


    Edit:
    Hier habe ich auch noch was interessantes gefunden.

    Edited once, last by Muetze ().

  • Das kannst du ausprobieren. Eine Garantie ist es aber nicht. Auch wenns erstmal läuft, kann es sein, dass die Platte mehr Strom zieht, als dem Pi gut tut. Wenn du kein zweites Netzteil einsetzen willst, kannst du auch ein aktives Hub und den Pi aus einem Netzteil versorgen.

    Oh, man kann hier unliebsame Nutzer blockieren. Wie praktisch!

    Edited once, last by Gnom ().

  • Stimmt, wäre wohl die beste Lösung.


    Die gibt es ja schon für 10 Euro (Affiliate-Link).


    Ich wollte mit dem Raspberry eh "nur" Musik von einer externen abspielen lassen & eventuell, wenn es geht unterwegs im Auto mit KfZ-Netzteil nutzen.


    Ich finde aber irgendwie keine Gehäuse, die etwas mehr Platz bieten. Habe nur das (Affiliate-Link) gefunden.

    Edited once, last by Muetze ().

  • Ein Y-Kabel wird keine Lösung sein. Die USB-Ports bringen alle zusammen nur 600mA. Zum normalen Betrieb kann man in der config.txt usb_max_current auf 1 setzen, dann können insgesamt 1200mA gezogen werden. Aber auch das hilft beim booten nicht weiter, da dieser Eintrag erst danach gelesen wird.

  • Ich hab mal gelesen, dass der Pi 3 nur zwei Sekunden auf ein externes Medium zwecks Boot wartet. Angeblich kann man dieses kurze Zeitfenster auf fünf Sekunden erhöhen, wenn man program_usb_timeout=1 in die Datei config.txt eingibt und den Pi neu startet. Ist das noch aktuell?


    Ich lasse den Pi weiterhin von der SD-Karte booten und habe das Betriebssystem auf eine WD MyBook ausgelagert, die über einen externen Stromanschluss verfügt. Da die Platte laut ihrer Geräusche länger als fünf Sekunden braucht, bis sie einsatzbereit ist, scheint das für mich die beste Lösung zu sein.

  • hi liebe Leute,


    das wäre ja wirklich klasse, wenn man von einer normalen erxternen USB-Festplatte mit externer Stromversorgung starten kann.


    Ich habe im Moment eine 16GB "Raspbian Stretch with desktop" MicroSD-Karte mit der der Raspberry 3B läuft.

    Ist das das selbe wie "Debian-Jessie"?

    Und, würde das auch mit USB 2.0 Festplatten laufen?


    Viele Grüße

    Horst

    Viele Grüße

    Horst

  • Raspberry 3B läuft.

    kann auch wie der PI2 eine 2,5" USB3 Platte WDpassport treiben, das verringert das Kabelgewirr und externe Netzteile für die Platte.

    lasst die PIs & ESPs am Leben !
    Energiesparen:
    Das Gehirn kann in Standby gehen. Abschalten spart aber noch mehr Energie, was immer mehr nutzen. Dieter Nuhr
    (ich kann leider nicht schneller fahren, vor mir fährt ein GTi)