Diese Anleitung sollte es ermöglichen, eine SD-Karte aus einem Pi 4 / Pi 5 auf ein neues Medium zu klonen. Es gibt ein passendes grafisches Tool namens sdcopier
. Da das aber eine grafische Oberfläche benötigt, wird hier darauf verzichtet. Stattdessen wird der komplette Klonvorgang in der Konsole durchgeführt.
Hinweis
1) Die Anleitung ist auf dem Pi 4 noch ungetestet. Ebenso auf dem Pi 5 mit NVMe's > 512GB.
2) Die Anleitung funktioniert (zumindest beim Pi 5) auch mit einem Kloning von SD-Karte zu USB-Stick. Theoretisch sollte man in alle Richtungen klonen können (SD > USB, SD > NVMe, USB > SD, USB > NVMe, NVMe > SD, NVMe > USB).
3) Aufpassen bei dem Quell- und Ziellaufwerk. Man kann sich ganz schnell das bestehende System zerschießen (Leidvolle Eigenerfahrung …)
Wenn ihr eine NVMe SSD verwendet, die mehr als 2 TB an Speicher hat, dann funktioniert das Tool sdcopier
nicht. Das liegt daran, dass das Tool ein MBR (Master Boot Record) Partitionsschema verwendet. Das kann aber maximal Partitionen mit 2 GB unterstützen. Um diese großen NVMe's verwenden zu können, muss GPT als Partitionsschema verwendet werden. Genau das macht diese Anleitung.
Wenn ihr das sdcopier
Tool verwendet bekommt ihr sonst folgende Meldung:
Das Klonen ist in dem Fall auch nicht erfolgreich!
sudo rpi-eeprom-update
sudo apt install gparted gdisk dosfstools mtools iotop -y
sudo systemctl stop klipper
sudo systemctl stop mysqld
sudo systemctl stop apache2
sudo systemctl stop smbd.service
sudo iotop –only
ACHTUNG
Alle Daten auf dem neuen Medium werden gelöscht!!
Hinweis
In diesem Beispiel wird auf einem Pi 5 von einem USB-Stick (Bootmedium) auf eine SD-Karte geklont!
lsblk
pi@Pi5Test:~ $ lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS sda 8:0 1 28.6G 0 disk ├─sda1 8:1 1 512M 0 part /boot/firmware └─sda2 8:2 1 28.1G 0 part / mmcblk0 179:0 0 58.9G 0 disk ├─mmcblk0p1 179:1 0 512M 0 part /media/pi/bootfs └─mmcblk0p2 179:2 0 58.4G 0 part /media/pi/rootfs
/
auf der Partition sda2
und die liegt auf dem Device sda. lsblk
Ausgabe sehen - in dem Fall mmcblk0
. Man kann auch gleich sehen, dass die beiden Partitionen auf dem Laufwerk automatisch gemountet wurden. sudo umount /media/pi/bootfs
sudo umount /media/pi/rootfs
sudo cgdisk /dev/mmcblk0
Warning! Non-GPT or damaged disk detected! This program will attempt to
convert to GPT form or repair damage to GPT data structures, but may not
succeed. Use gdisk or another disk repair tool if you have a damaged GPT
disk.
[ Delete ]
löschen. free space
vorhanden ist. [ New ]
Part. # Size Partition Type Partition Name ---------------------------------------------------------------- 1007.0 KiB free space 1 512.0 MiB Microsoft basic data bootfs 2 58.4 GiB Linux filesystem rootfs 1007.5 KiB free space
[ Write ]
, yes
eintippen und Enter[ Quit ]
den Dialog verlassensudo sgdisk -p /dev/mmcblk0
sudo mkfs.vfat /dev/mmcblk0p1 -n bootfs -v
sudo mkfs.ext4 /dev/mmcblk0p2 -L rootfs -v
→ Evtl. mit y
bestätigenlsblk
!Prüfen ob das neue Medium mit einem GPT Partitionsschema arbeitet. (Wichtig für Medien > 2TB Speicherkapazität):
sudo fdisk -l |grep Disklabel -A 1 -B 4
pi@Pi5Test:~ $ sudo fdisk -l |grep Disklabel -A 1 -B 4 Disk model: GIGABYTE GP-GSM2NE3256GNTD 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: gpt Disk identifier: ADB4BD3E-02B3-4BCF-81E4-B00633730E50
Wer das Partitionieren grafisch erledigen möchte kann das mit MobaXTerm so machen:
export XAUTHORITY=~/.Xauthority
sudo gparted
Für den Klonvorgang müssen die neuen Partionen gemountet werden:
sudo mkdir /klonboot
sudo mkdir /klonfs
sudo mount /dev/mmcblk0p1 /klonboot
sudo mount /dev/mmcblk0p2 /klonfs
In diesem Schritt werden die Daten dateibasiert auf den Klon übertragen…
sudo rsync -rltDv --numeric-ids --info=progress2 /boot/firmware/ /klonboot
sudo rsync -rltDv --numeric-ids --info=progress2 /boot/ /klonboot
sudo rsync -axHAWXSv --numeric-ids --info=progress2 / /klonfs
Man kann jetzt df -h
verwenden, um zu schauen pb Quelle und Ziel in etwa gleich viele Daten enthalten (passt nicht 100%):
pi@Pi5Test:~ $ df -h Filesystem Size Used Avail Use% Mounted on udev 1.9G 0 1.9G 0% /dev tmpfs 405M 5.8M 399M 2% /run /dev/sda2 28G 4.3G 22G 17% / tmpfs 2.0G 368K 2.0G 1% /dev/shm tmpfs 5.0M 48K 5.0M 1% /run/lock /dev/sda1 510M 73M 438M 15% /boot/firmware tmpfs 405M 160K 405M 1% /run/user/1000 /dev/mmcblk0p1 511M 73M 439M 15% /klonboot /dev/mmcblk0p2 58G 4.0G 51G 8% /klonfs
Hinweis
Beim BullsEye ist /boot eine eigene FAT32 Partition. Bei BookWorm ist /boot aber mit im Root Filesystem. Dort wird dann /boot/firmware als FAT32 Partition eingebunden anstatt /boot!
Jetzt muss auf dem Klon Laufwerk noch die Datei fstab
angepasst werden.
lsblk -o NAME,FSTYPE,SIZE,MOUNTPOINT,LABEL,PARTUUID
pi@Pi5Test:~ $ lsblk -o NAME,FSTYPE,SIZE,MOUNTPOINT,LABEL,PARTUUID NAME FSTYPE SIZE MOUNTPOINT LABEL PARTUUID sda 28.6G ├─sda1 vfat 512M /boot/firmware bootfs 9c1b969d-01 └─sda2 ext4 28.1G / rootfs 9c1b969d-02 mmcblk0 58.9G ├─mmcblk0p1 vfat 512M /klonboot bootfs 4c5ca341-4453-47a6-8635-b20e4380b4e7 └─mmcblk0p2 ext4 58.4G /klonfs rootfs 78f45d12-57af-496f-9288-066e8694eee8
sudo nano /klonfs/etc/fstab
proc /proc proc defaults 0 0 PARTUUID=9c1b969d-01 /boot/firmware vfat defaults 0 2 PARTUUID=9c1b969d-02 / ext4 defaults,noatime 0 1 # a swapfile is not a swap partition, no line here # use dphys-swapfile swap[on|off] for that
proc /proc proc defaults 0 0 PARTUUID=4c5ca341-4453-47a6-8635-b20e4380b4e7 /boot/firmware vfat defaults 0 2 PARTUUID=78f45d12-57af-496f-9288-066e8694eee8 / ext4 defaults,noatime 0 1 # a swapfile is not a swap partition, no line here # use dphys-swapfile swap[on|off] for that
STRG-x
, Y
und Enter
Die Datei cmdline.txt
muss auch angepasst werden, weil der Pi sonst sein Root Dateisystem nicht finden kann.
sudo nano /klonboot/cmdline.txt
.. root=PARTUUID=9c1b969d-02 ..
.. root=PARTUUID=78f45d12-57af-496f-9288-066e8694eee8 ..
STRG-x
, Y
und Enter
sudo umount /klonboot && sudo umount /klonfs
sudo poweroff
Wer Langeweile hat kann auch noch die Differenzen analysieren
sudo diff -qr / /media/pi/rootfs/
Der hintere Pfad muss natürlich angepasst werden!
Wenn die Bootreihenfolge auf NVMe, USB, SD eingestellt ist und von der NVMe gebootet wurde …
sudo umount /dev/nvme0n1p1
sudo gdisk /dev/nvme0n1
d
→ 1
→ w
→ Y
sudo reboot
cd /etc/ssh
sudo rm ssh_host_*
sudo ssh-keygen -A