Raspberry Pi 4 von SSD booten

UPDATE:

Dieser Artikel ist nicht mehr so ganz aktuell – denn es ist nun möglich komplett auf die SD-Karte zu verzichten. Den aktualisierten Beitrag findest Du HIER


Oft kam die Frage, wie man denn den Raspberry Pi 4 von einer SSD booten kann. Dies ist eigentlich relativ einfach – aber gehen wir doch einmal gemeinsam die Schritte durch:

Vorbereitung

In meinem Fall gibt es bereits ein bestehendes Image, welches ich nutzen möchte. Also starte ich den Vorgang, in dem ich mit dem ApplePiBaker eine kopie (also Backup) meiner SD Karte erstelle.

Ist das Backup auf der Festplatte von meinem Mac gespeichert, so schreibe ich es im zweiten Arbeitsschritt nun auf die SSD. Hierfür nutze ich einen USB Adapter, den ich Dir unten nochmal verlinkt habe. Die SSD ist einfach eine ältere SSD, die ich noch hatte.

Konfiguration vom Rasperry Pi 4

Als nächstes stecke ich die SD Karte wieder in den Raspberry und starte diesen. Die SSD muss zu diesem Zeitpunkt noch nicht angesteckt sein. Ist der Raspi gestartet verbinden wir uns mit dem Terminal (oder Putty) auf die Kommandozeile. Bevor wir nun weiter machen bringen wir nämlich das System nochmal auf den aktuellen Stand mit den folgenden beiden Befehlen:

sudo apt-get update
sudo apt-get upgrade

Ist dies erledigt schauen wir einmal genauer nach, welches denn nun unsere SSD ist im System – also wie diese nun erkannt wird. Hierfür – erstmal ohne SSD – geben wir folgenden Befehl ein:

sudo blkid

Jetzt die SSD anschliessen und den Befehl nochmals eingeben. Es sollten nun zwei Zeilen hinzugekommen sein. Bei mir sah es wie folgt aus:

pi@raspberrypi:~ $ sudo blkid
/dev/mmcblk0p1: LABEL_FATBOOT="boot" LABEL="boot" UUID="5203-DB74" TYPE="vfat" PARTUUID="6c586e13-01"
/dev/mmcblk0p2: LABEL="rootfs" UUID="2ab3f8e1-7dc6-43f5-b0db-dd5759d51d4e" TYPE="ext4" PARTUUID="6c586e13-02"
/dev/mmcblk0: PTUUID="6c586e13" PTTYPE="dos"
/dev/sda1: LABEL_FATBOOT="boot" LABEL="boot" UUID="4BBD-D3E7" TYPE="vfat" PARTUUID="738a4d67-01"
/dev/sda2: LABEL="rootfs" UUID="45e99191-771b-4e12-a526-0779148892cb" TYPE="ext4" PARTUUID="738a4d67-02"

Wir sehen hier also mit sd1 und sda2 zweil zusätzliche Partitionen, die über USB angeschlossen sind. Wichtig hierbei ist nun beim Label “rootfs” die PARTUUID – in meinem Fall die 738a4d67-02

Diese kopieren wir uns – denn diese benötigen wir gleich. Denn nun müssen wir dem kleinen Raspberry ja noch sagen, wovon er in Zukunft booten soll. Dafür bearbeiten wir die commandline.txt. Aber zunächst einmal – bevor wir etwas ändern – machen wir uns eine Kopie der Datei. Dies ist recht einfach gemacht durch den Befehl:

sudo cp /boot/cmdline.txt /boot/cmdline.txt.old

Ist die Datei kopiert, dann können wir die eigentliche Datei auch beabeiten. Wie immer ist auch dies recht simpel mit unserem Editor nano. Der Befehl lautet nun:

sudo nano /boot/cmdline.txt

Hier in der cmdline.txt ersetzen wir die UUID der SD Karte durch die UUID der SSD. Im Video habe ich Dir auch nochmal gezeigt wie genau dies klappt. Ist die Datei nun gespeichert, dann können wir den Raspi auch neu starten:

sudo reboot

Fertig?

Noch nicht ganz. Auf der SD Karte und auf der SSD ist nun ein boot Verzeichnis. Das macht eigentlich nichts – aber durch Updates usw. könnte es sein, dass das System hier durcheinander kommt. Um dies zu verhindern und um es sauber anzuschliessen ändern wir nun noch die fstab. Hier ist beschrieben, wo und welches Laufwerk zum booten genutzt wird.

Als erstes schauen wir uns die Konfiguration an mit dem Befehl:

lsblk -o name,label,partuuid

Hier werden dann die Laufwerke und die boot Verzeichnisse aufgeführt. Die UUID der SD Karte kopieren wir nun und öffnen danach die fstab Konfigurationsdatei, um diese anzupassen:

sudo nano /etc/fstab

Ist auch das gemacht, dann haben wir alles erledigt und der Raspberry startet in Zukunft von der SSD. Für die fstab unter /etc auf der SSD muss man aber folgendes sicherstellen:

  1. Der boot-Eintrag muss weiterhin auf die UUID der SD-Card verweisen.
  2. Der Root-Eintrag (/) muss auf die UUID der SSD verweisen.

Links

USB auf SSD Adapter: https://amzn.to/2TQr4DR
SSD Empfehlung: https://amzn.to/3365rDz
Das Raspi Set bei Reichelt: https://www.reichelt.de/das-reichelt-raspberry-pi-4-b-4-gb-all-in-bundle-rpi-4b-4gb-allin-p263086.html?r=1
Das Set bei Amazon: https://amzn.to/38PnZtR

Video

Vielleicht auch interessant?

Beitrag teilen:

36 Kommentare. Hinterlasse eine Antwort

  • Sollte man sein System komplett neu aufsetzen wollen, geht es etwas einfacher:
    Via etcher.io zunächst das Image auf die SD-Karte bringen. Danach die SD-Karte am PC kurz neu mounten und in der Datei “config.txt” die Zeile “program_usb_boot_mode=1” hinzufügen. Anschließend von der SD-Karte den Raspi booten und ein paar Minuten warten (Am besten mit SSH testen, ob gebootet). Danach den Raspi wieder ausschalten und SD-Karte entnehmen. Nun das Raspi-Image auf die SSD via etcher.io bringen (ACHTUNG: Aufpassen, die richtige Platte wählen!). Nun via USB anschließen, booten, fertig!

  • Hallo
    Muss danach die SD Karte im Raspy verbleiben oder kann Sie, wie beim
    Dreier entfernt werden.

  • Enrico Penetti
    12. März 2020 17:12

    Wird die rootfs-partition der SD-Karte noch irgendwo verwendet? Wenn ich diese Partition lösche, starten einige Dienste nicht mehr richtig und er wartet beim Start auch über 5min auf eine Netzwerkkonfiguration.

  • Doch schon. Aber die SD Karte muss zum starten drin bleiben.
    Danach folgrn alle Zugriffe auf der SSD.
    Somit wird di SD geschont und hält ewig durch

  • Wenn man unter Windows 10 eine Kopie des bestehenden PI4 Images mit Win32 DiskImager erstellt, erhalte ich immer die gleiche PARTUUID für mein USB Laufwerk und somit unterseidet die sich halt nicht zur PARTUUID der SD Karte.
    Was mache ich falsch? Was kann ich ändern?

  • Könnte man das so auch auf RaspberryMatic adaptieren?

    • Enrico Penetti
      17. März 2020 9:41

      Ich glaube schon. Nur macht das für mein Dafürhalten nicht wirklich Sinn, da Raspberrymatic ein readonly Dateisystem verwendet und dadurch die Karte geschont wird. Eine SSD ist da bloß Geldversenken.

  • Ich habe das Problem das nach sudo cp /boot/cmdline.txt /boot/cmdline.txt.old dieser Fehler unten kommt. Ich habe überhaupt keine cmdline.txt

    der Aufruf von stat für ‘/boot/cmdline.txt’ ist nicht möglich: Datei oder Verzeichnis nicht gefunden

  • Ist so ne Backup Nummer auch mit nem Home assistant (Hassbian)? Ich habe auf meinem pi 4b (64GB microSD) ein laufendes home assistant System… Nun würde ich gerne von der microsd auf eine SSD umziehen….

    oder bin ich da gebunden an Debian busters/stretch?

  • Hallo zusammen, hat jemand eine Idee was ich fasch mache? Nach der oben aufgeführte Anweisung mit den Befehl “sudo blkid” bekomme ich ohne SSD Karte folgendes Ergebnis:
    /dev/mmcblk0p1: LABEL_FATBOOT=”boot” LABEL=”boot” UUID=”5203-DB74″ TYPE=”vfat” PARTUUID=”6c586e13-01″
    /dev/mmcblk0p2: LABEL=”rootfs” UUID=”2ab3f8e1-7dc6-43f5-b0db-dd5759d51d4e” TYPE=”ext4″ PARTUUID=”6c586e13-02″
    /dev/mmcblk0: PTUUID=”6c586e13″ PTTYPE=”dos”

    Mit der SSD siehr das Ergebnis dann so aus:
    /dev/mmcblk0p1: LABEL_FATBOOT=”boot” LABEL=”boot” UUID=”5203-DB74″ TYPE=”vfat” PARTUUID=”6c586e13-01″
    /dev/mmcblk0p2: LABEL=”rootfs” UUID=”2ab3f8e1-7dc6-43f5-b0db-dd5759d51d4e” TYPE=”ext4″ PARTUUID=”6c586e13-02″
    /dev/sda1: LABEL_FATBOOT=”boot” LABEL=”boot” UUID=”5203-DB74″ TYPE=”vfat” PARTUUID=”6c586e13-01″
    /dev/sda2: LABEL=”rootfs” UUID=”2ab3f8e1-7dc6-43f5-b0db-dd5759d51d4e” TYPE=”ext4″ PARTUUID=”6c586e13-02″
    /dev/mmcblk0: PTUUID=”6c586e13″ PTTYPE=”dos”

    Leider finde ich da kein Unterschied in den Partuuids
    Kann man die IDs ändern und wenn wie?

    Vielen Dank für eure Tipps
    Joachim

  • Hallo,
    vestehe ich richtig, dass man die SD Karte trotzdem noch braucht? Bei 3B und 3B+ nbenötigt man dies ja nicht.
    Danke für eine Rückmeldung. Übrigens – habe die meisten Videos gesehen, sehr gut erklärt großen Lob hierfür.
    Danke

  • Hallo,
    ich finde deine Videos sehr hilfreich und verständlich. Danke dafür.
    Meine Frage: funktioniert die Anleitung auch für einen Raspberry PI 3B oder benötige ich einen neuen PI?
    LG

  • Christoph Batke
    7. April 2020 7:21

    Nachdem an meinem Pi4 die SSD nun läuft, funktionieren alle Homematicgeräte (außer den Direktverknüpfungen) nicht mehr… Alle Geräteverbindungen sind gestört und es kann nichts mehr gesteuert, verändert, usw. werden iobroker und HomeMatic laufen hoch, LED des RPI-RF-MPD leuchtet normal blau, SSDs blinkt auch. Kommunikation mit dem DECONZ-Stick zu den Zigbee-Lampen geht auch nicht mehr.

    Wenn ich zurückgehe auf SD-Karte only (SSD auch abgesteckt, fstab und cmdline.txt wieder auf SD Karte gesetzt) geht alles wieder ganz normal.

  • SvenSmarthome
    19. April 2020 16:25

    Wäre für mich auch interessant zu wissen, ich habe einen PI4 im Anflug und wollte da gerne Raspberrymatic und ioBroker drauf haben.
    Das dann gerne auf einer SSD. Wenn dann Die Homematic Aktoren nicht mehr gehen machts keinen Sinn mit einer SSD.
    Hat das schonmal jemand hin bekommen? Da ich keine SSD zum testen habe müsste ich eine kaufen das würde ich nur gerne machen wenns auch geht.

  • eine Kurze Frage zur Anleitung:
    “….. Hier werden dann die Laufwerke und die boot Verzeichnisse aufgeführt. Die UUID der SD Karte kopieren wir nun und öffnen danach die fstab Konfigurationsdatei, um diese anzupassen:
    sudo nano /etc/fstab
    Ist auch das gemacht, dann haben wir alles erledigt und der Raspberry startet in Zukunft von der SSD……”
    Muß den nicht die UUID der SSD in die fstab kopiert werden, wenn man davon booten will in Zukunft? Wenn das die UUID der SD Karte ist, dann wäre das wohl nicht der Fall, oder denke ich da falsch?

    • Hallo Roland,
      im Moment kann der RPi4 nur von der SD Karte starten. Bei den älteren Modellen kann man mit einem bestimmten Konsolenbefehl dem Pi beibringen, dass er von einem USB Gerät starten soll. Aber der RPi4 verwendet eine andere CPU und dafür ist dieser Befehl NOCH nicht freigegeben. Deswegen muß man im Moment von der SD Karte starten. Der Start von der SD Karte geht aber nur bis zur Datei /boot/cmdline.txt und ab dort geht es dann von der SSD weiter. Da der RPi4 NOCH nicht von einem USB Gerät starten kann, muß in der fstab die ID der SD Karte eingetragen werden, da dort festgelegt wird wo das OS liegt.

  • Hallo zusammen,
    da ich schon viel von den Beiträgen auf verdrahtet.info profitiert habe, möchte ich auch meinen Beitrag leisten. Bei mir war das Problem, dass die SD und die SSD beide die gleiche Part UUID hatten. Diese Problem konnte ich durch diesen Beitrag lösen https://staticfloat.de/Raspberry-Pi-4—Boot-von-USB dort runter scrollen bis: “Beide Speichermedien besitzen die selbe UUID”. Mit dieser Lösung konnte ich dann das Problem beheben.
    Des weiteren konnte ich mit raspi-config die SSD nicht expandieren. Es kam die Fehlermeldung, dass sda2 kein USB Laufwerk wäre und der pi nicht wüsste was er machen sollte. Nach langer Suche habe ich dann eine Lösung gefunden. Mit: sed -E ‘s/mmcblk0p?/sda/’ /usr/bin/raspi-config | sudo bash öffnete sich dann raspi-config, aber dort konnte ich dann bei “(7) Advanced options -> (A1) Expand Filesystem” die SSD expandieren.

    • Christian
      17. Mai 2020 17:08

      Die Probleme habe ich in den Griff bekommen.
      Zunächst bekomme ich das System gar nicht auf die ssd. USB-Stick kein Problem, aber nicht bei ssd. Es gibt eine Version mit rsync, funktioniert bei einem 3er hervorragend, aber nicht beim 4er.
      Hab ich dann irgendwie das system auf der ssd, ist der Start von selbiger grotten langsam. Dann will er ja irgendwelche Einstellungen vornehmen, Neustart, und nix mehr. Nach ner halben Stunde im Notfallmodus.
      Zur Info: 3 verschiedene SSD, 3 verschiedene pi4 unterschiedlich gekauft, in allen erdenklichen Kombinationen.

  • ich werde auch eine SSD am Raspi per USB betreiben, dabei ist mir aufgefallen, dass die meisten USB-Controller in diesen Adaptern oder im externen Gehäuse keinen Support für TRIM haben, was ich bei Einsatz von SSDs für wichtig halte.

  • Christoph
    1. Mai 2020 22:44

    Leider sind die PARTUUID der SD und des USB Speichermediums identisch.
    Die PARTUUID zu ändern hat bei mir nicht funktioniert.
    Um den Raspberry pi 4 trotzdem von USB zu booten habe ich jetzt eine viel einfachere Lösung gefunden.
    Es muß ja zum jetzigen Stand die SD im Gerät verbleiben, aber ich habe dann von einer anderen SD-Karte gebootet
    und auf der SD-Karte, die ich dann mit dem USB-Speicher verwende die EXT4 Partition gelöscht. Das selbe tat ich mit der Boot-Partition auf dem USB-Speicher.

  • Danke erst mal für die Anleitung.

    Allerdings sind in meinen Augen leichte Ungenauigkeiten in der Anleitung dafür verantwortlich, dass ich in Summe mehrere Stunden damit verbracht habe, bis ich das genannte Setup zum Laufen bekam.

    Damit Andere, die ebenfalls nicht so Linux-affin sind wie ich, nicht auch die gleichen Fehler machen wie ich, gebe ich die folgenden Hinweise:

    1. Damit man in Schritt 6 die “richtige” cmdline.txt editiert und nicht die Falsche, ist es wichtig, dass man bei der Umstellung die USB-SSD erst *NACH* dem Booten von der SD-Karte in den Raspberry steckt. Das steht insofern unter Punkt 2 richtig beschrieben.

    2. Nach dem Ändern der cmdline.txt und einem Reboot beginnt der Raspberry weiterhin, von der SD-Card zu booten, liest von dort auch die cmdline.txt und bemerkt, dass es jetzt auf der SSD weitergeht. Er wird auf die fstab der SSD verwiesen.

    Wenn man nun, so wie ich, auf die SSD eine 1:1 Kopie der SD-Card kopiert hat, sind in der dortigen fstab beide Einträge (boot + root) mit der UUID der SD-Karte vorbelegt.

    Für die fstab unter /etc auf der SSD muss man aber folgendes sicherstellen:
    1. Der boot-Eintrag muss weiterhin auf die UUID der SD-Card verweisen.
    2. Der Root-Eintrag (/) muss auf die UUID der SSD verweisen.

    Gerade, wenn man die SSD mit einer Kopie der SD-Karte bestückt hat, verweisen in auf der SSD unter /etc/fstab beide Verweise initial auf die UUID der SD-Karte.

  • Hallo. Also irgendwie kriege ich die partuuid nicht abgeändert, da die bei ssd und sd karte gleich ist. UUID klappt anscheinend mit diskpart unter windows oder eben gparted unter linux. Aber für partuuid kommt nix vernünftiges. Vllt kann da ja jemand helfen 🙂 Danke schonmal.

  • Hat irgendjemand eine Idee, wieso das bei mir mit USB2 funktioniert, aber nicht mit USB3 ?

Du musst angemeldet sein, um einen Kommentar abzugeben.

Weitere ähnliche Beiträge auf verdrahtet.info: