Anleitung - Migration Raspberry Pi von SD Karte auf USB Stick (oder via USB angeschlossene SSD)

  • Hier gibt es eine recht einfache Anleitung, wie man von einer SD Karte auf z.B. einen USB Stick migriert:

    Code
    https://gist.github.com/avoidik/d8fc39a372db680090edd5322d60848f


    Bei mir kommt hier ein USB Stick von Samsung zum Einsatz:

    Samsung MUF-64AB/EU FIT Plus 64 GB Typ-A USB 3.1 Flash Drive


    - Nutzung auf eigene Gefahr! -


    1. Schritt:


    USB Stick in den Raspberry Pi einstecken


    2. Schritt:


    Wir verbinden ins über das Terminal-Programm via SSH auf den Pi und prüfen, ob unser USB Stick vom Raspberry Pi System erkannt wurde mittels

    Code
    sudo fdisk -l
    sudo lsblk


    Neben den ganzen Arbeitsspeichern (dev/ram1 usw.) taucht am Ende neben der SD Karte Disk /dev/mmcblk0 auch irgendwo der USB Stick auf. Meist mit sda, sdb oder sdX. Bei mir war es sda:

    Code
    Disk /dev/sda: 59.75 GiB, 64160400896 bytes, 125313283 sectors
    Disk model: Flash Drive FIT 
    Units: sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    Disklabel type: dos
    Disk identifier: 0x00000000

    Wenn es sich um einen neuen USB Stick handelt dürften sich darauf keine Partitionen befinden.


    3. Schritt (optional)


    wer will kann über sudo sfdisk --delete /dev/sda (sda ggfs. entsprechend vorher anpassen) den USB Stick vor dem eigentlichen Klonen noch formatieren. Bitte beachte, dass dies alle Daten vom entsprechenden Zielmedium löscht.


    Code
    pi@homebridge:~ $ sudo sfdisk --delete /dev/sda
    
    The partition table has been altered.
    Calling ioctl() to re-read partition table.
    Syncing disks.


    4. Schritt: Installation von rpi-clone (Link zu Github)


    Hierzu geben wir nachfolgende Befehle ein:


    Code
    git clone https://github.com/billw2/rpi-clone.git 
    cd rpi-clone
    sudo cp rpi-clone rpi-clone-setup /usr/local/sbin
    sudo rpi-clone-setup -t $(hostname -s)
    sudo rpi-clone -s


    5. Schritt: Klonen der SD Karte auf den USB Stick


    Das clonen erfolgt über ein sudo rpi-clone sda (ersetze sda mit deinen Device Namen)

    Code
    sudo rpi-clone sda


    Hierbei werden wir aufgefordert den Klon-Vorgang zu bestätigen und optional einen Namen/Label zu vergeben:


    Code
    Initialize and clone to the destination disk sda?  (yes/no): yes
    Optional destination ext type file system label (16 chars max): USB-RPI


    In Abhängigkeit der Größe eures Systems etc. kann der eigentliche Prozess einige Minuten lang dauern.

    Wir achten auf die beiden Partitionen boot und root und notieren uns die beiden Namen sda1 und sda2 (kann bei dir entsprechend anders lauten):


    Code
    Syncing file systems (can take a long time)
    Syncing mounted partitions:
      Mounting /dev/sda2 on /mnt/clone
      => rsync // /mnt/clone with-root-excludes ...
      Mounting /dev/sda1 on /mnt/clone/boot
      => rsync /boot/ /mnt/clone/boot  ...


    Beim Klonvorgang werden auch direkt die beiden Dateien cmdline.txt und fstab um die neue PARTUUID angepasst:

    Code
    Editing /mnt/clone/boot/cmdline.txt PARTUUID to use f2b88331
    Editing /mnt/clone/etc/fstab PARTUUID to use f2b88331

    bis wir am Ende des Klonvorgangs dann an folgende Stelle ankommen:


    Code
    Hit Enter when ready to unmount the /dev/sda partitions ...
      unmounting /mnt/clone/boot
      unmounting /mnt/clone


    WICHTIG: Nun lassen wir das Terminal-Fenster offen, drücken jedoch nicht ENTER. Stattdessen öffnen wir ein zweites Terminal-Fenster und bauen eine weitere SSH Verbindung zum Pi auf. Alle nachfolgenden Befehle geben wir dort ein.


    Schritt 6: Partitionen identifizieren


    Das Zielgerät, in dem Falle unser USB Stick hat das gleiche Partitionslayout wie unsere SD Karte (Quelle). Wir müssen die Boot- und die letzte Partitions-IDs herausfinden. Dazu nutzen wir die gerade notierten Partitionen sda1 und sda2 und setzen diese in folgende Befehle ein:


    Code
    sudo lsblk -o name,mountpoint,size,partuuid /dev/sda1 # clone of mmcblk0p1 mounted as /boot
    sudo lsblk -o name,mountpoint,size,partuuid /dev/sda2 # clone of mmcblk0p2 mounted as / or root

    und erhalten folgendes:

    Code
    pi@homebridge:~ $ sudo lsblk -o name,mountpoint,size,partuuid /dev/sda1
    NAME MOUNTPOINT       SIZE PARTUUID
    sda1 /mnt/clone/boot  256M f2b88331-01
    
    pi@homebridge:~ $ sudo lsblk -o name,mountpoint,size,partuuid /dev/sda2
    NAME MOUNTPOINT  SIZE PARTUUID
    sda2 /mnt/clone 59.5G f2b88331-02

    Notiere dir die Infos aus der Spalte PARTUUID, in meinem Fall also f2b88331-01 für die Bootpartition und f2b88331-02 für die Rootpartition


    Schritt 7: cmdline.txt ändern

    Ggfs. hat rpi-clone die Anpassung schon für dich vorgenommen, dann musst du hier nichts ändern


    Um von dem Zielgerät booten zu können, müssen wir die Datei cmdline.txt ändern:


    Wir öffnen die Datei über sudo nano /boot/cmdline.txt und ändern root=/dev/mmcblk0p2 in root=PARTUUID=f2b88331-02, was die Root-Partitions-ID ist


    Füge am Ende der Zeile die Option rootdelay=5 ein, um zu warten, während das angeschlossene Gerät beim Booten initialisiert wird


    Vollständige Zeile:

    Code
    console=serial0,115200 console=tty1 root=PARTUUID=f2b88331-02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait rootdelay=5


    Schritt 8: Anpassen von fstab

    Ggfs. hat rpi-clone die Anpassung schon für dich vorgenommen, dann musst du hier nichts ändern


    Nachdem der Bootvorgang abgeschlossen ist, müssen wir die korrekten Partitionen mounten. Öffne die Datei /mnt/clone/etc/fstab und mache folgendes:

    • ändere das Device /dev/mmcblk0p1 in PARTUUID=f2b88331-01 (natürlich mit deiner eigenen Partitions ID)
    • ändere das Device /dev/mmcblk0p1 in PARTUUID=f2b88331-02 (natürlich mit deiner eigenen Partitions ID)


    Schritt 9: Unmount


    Nun wechseln wir wieder zurück in unser ursprüngliches Terminal-Fenster in dem noch der rpi-clone Prozess läuft und drücken nun ENTER um alle Partitionen auszuwerfen.


    Schritt 10: Test


    Wir fahren den Raspberry Pi über sudo shutdown -h now herunter, stecken das Netzteil aus, entfernen die SD Karte und stecken anschließend wieder das Kabel vom Netzteil in den Pi


    Nun sollte der Raspberry Pi vom USB Stick booten und die Homebridge und sämtlichen anderen Dienste wieder wie gewohnt erreichbar sein

    Einmal editiert, zuletzt von Patrick_ ()

  • Hallo Patrick,


    mühe mich gerade ab, deiner Anleitung zu folgen.


    Hinweis: Ist nicht meine HomeBridge sondern der All in One Server mit OMV7, Scrypted, Adguard und Paperless NGX auf einem Pi5.

    Daher nutze ich ein Bookworm 64 bit Image headless.


    Aber bei sudo nano /boot/cmdline.txt

    öffnet sich folgende Datei mit Inhalt:


    DO NOT EDIT THIS FILE

    The file you are looking for has moved to /boot/firmware/cmdline.txt


    Dieser Befehl funktioniert aber auch nicht bei meiner HomeBridge bzw. gibt den gleichen Inhalt wie oben aus?


    Nutze ich


    sudo nano /boot/firmware/cmdline.txt


    wird eine leere Datei geöffnet?


    Wie komme ich an die korrekte Datei, diese liegt bei mir in der boot-Partition?


    Kann ich den Pi runterfahren und die Dateien an meinem Mac editieren?


    Viele Grüße aus OWL

  • dvbcheck schau mal in die Kommentare der verlinkten Anleitung bei Github, z.B:

    Zitat

    The cmdline.txt referenced in Step #6 is somewhat ambiguous, as there are two such files after running rpi-clone. I modified the one under /mnt/clone/boot, as this is the file that will be used when booting from the new USB drive. I did not need to modify anything under /mnt/clone/etc/fstab as the PARTUUID entries were already correct.

    Ich kann ansonsten wenig Hilfestellung leisten, da ich auch nur die Anleitung befolgt und für's Forum getestet und ins deutsche übersetzt habe.


    Bei mir was es tatsächlich so, dass ich die Datei nicht anpassen musste (liegt bei mir aber auch unter dem angegebenen root Verzeichnis)


    Ansonsten such mal die Datei über sudo find / -type f -name "cmdline.txt" 2>/dev/null


    Code
    pi@homebridge:~ $ sudo find / -type f -name "cmdline.txt" 2>/dev/null
    /boot/cmdline.txt
  • sudo nano /boot/firmware/cmdline.txt


    wird eine leere Datei geöffnet?

    Genau, trag's da ein.


    Kann ich den Pi runterfahren und die Dateien an meinem Mac editieren?

    Ja, das sollte gehen.