Hier gibt es eine recht einfache Anleitung, wie man von einer SD Karte auf z.B. einen USB Stick migriert:
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
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:
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.
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:
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)
Hierbei werden wir aufgefordert den Klon-Vorgang zu bestätigen und optional einen Namen/Label zu vergeben:
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):
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:
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:
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:
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:
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:
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