Aufgabe: Eine bestehende Installation auf der SD Karte für einen neuen Raspberry zur Verfügung zu stellen
Auch verwendbar, um einen Backup seines System zur Verfügung zu stellen.
Schritt 1: Kopiere dein System auf ein Backup Medium
Basis meines Vorgehens stammt vom diesem Artikel https://hilftdirweiter.de/backup-des-raspberry-pi-im-laufenden-betrieb/ Grundlage dieses Artikels sind Kopien mittels des dd Kommandos, also raw copies.
Hier nun mein Vorgehen, wie ich es gemacht habe. Da ich kein sudo Freund bin, habe ich folgendes unter dem User root gemacht, also entweder su – oder sudo su …
- Einsammlen der Fakten
Wie ist die SD Karte aufgeteilt:
root@raspberrypi:~# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/root 29765100 2798112 25725240 10% /
devtmpfs 154748 0 154748 0% /dev
tmpfs 187724 0 187724 0% /dev/shm
tmpfs 187724 16800 170924 9% /run
tmpfs 5120 0 5120 0% /run/lock
tmpfs 187724 0 187724 0% /sys/fs/cgroup
/dev/mmcblk0p1 258095 48790 209306 19% /boot
tmpfs 37544 0 37544 0% /run/user/1001
Was für ein Device ist meine SD Karte:
Hm, wenn ich ein ls -a auf /dev mache, finde ich keinen Eintrag für /dev/root, obwohl es oben angezeigt wird. Aber es ist unter „/“ gemountet. Kommen wir mit mount weiter?
root@raspberrypi:~# mount
/dev/mmcblk0p2 on / type ext4 (rw,noatime)
...
/dev/mmcblk0p1 on /boot type vfat (rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=ascii,shortname=mixed,errors=remount-ro)
...
Hier sehen wir also 2 Partitions auf /dev/mmcblk0, eine für „/“ und eine für /boot. Das ist also unsere SD Karte. Genauers erzählt uns fdisk:
root@raspberrypi:~# fdisk /dev/mmcblk0
Welcome to fdisk (util-linux 2.33.1).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Command (m for help): p
Disk /dev/mmcblk0: 29.1 GiB, 31266439168 bytes, 61067264 sectors
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: 0xed2a90ee
Device Boot Start End Sectors Size Id Type
/dev/mmcblk0p1 8192 532479 524288 256M c W95 FAT32 (LBA)
/dev/mmcblk0p2 532480 61067263 60534784 28.9G 83 Linux
Hier sehen wir schon auf Grund der Größen, was was ist. /dev/mmcblk0p1 ist nicht für dd geeignet, nimmt man das als if=… kommt nicht dabei heraus, oder man bekommt Fehlermeldungen. Aber da es auf /boot gemountet ist, kann man es sich ansehen, und mittels tar auch sichern. Doch wohin?
Man braucht also ein Medium, was größer ist als die SD Karte, da dd ja nicht komprimiert. (Hm, sollen wir durch gzip pipen, wie im obigen Artikel?) Ich habe mir auf der großen Festplatte meines PC ein Directory angelegt, und dazu eine Freigabe erstellt. (Alternativ könnte man auch eine USB Platte an den USB Port anschliessen und darauf sichern.) Diese mountet man sich dann mittels mount -t cifs -o user=USERNAME,password=PASSWORT,vers=1.0,rw,file_mode=0777,dir_mode=0777 //IP_ADDRESSE_FREIGABE/FREIGABENAME /mnt/LOCALDIR/ (Falls das nicht geht, ist der SMB Client installiert, sonst apt-get install smbclient)
root@raspberrypi:~# mkdir /mnt/images
root@raspberrypi:~# mount -t cifs -o user=Ich,password=Geheim,vers=1.0,rw,file_mode=0777,dir_mode=0777 //192.168.11.11/images /mnt/images/
Nun haben wir genug Platz, um unseren Backup anzulegen.
Ja, was nun – ah – wir hatten ja /boot sicheren wollen, jetzt können wir es tun, da wir ein externes Ziel haben. Also:
root@raspberrypi:~# tar -czf /mnt/images/rasp_boot.tgz /boot
tar: Removing leading `/' from member names
Damit haben wir also die Boot Partition gesichert. Das Ergebniss sollte man nun auf dem PC sehen.
Nun zur Hauptaufgabe, die restliche Linux Partition. Unser obiger Author empfiehlt nun, sämtliche Services herrunter zu fahren, damit während des Backupvorgangs nichts an Dateien geändert wird. Wie das geht, verheimlicht er in diesem Artikel. … Muss ich also noch ergänzen.
Das eigentliche Kommando zur Sicherung der Platte lautet:
root@raspberrypi:~# dd if=/dev/mmcblk0p2 of=/mnt/images/raspi.img bs=1MB
Achtung: das dauert Stunden! Danach nicht vergessen, die Services wieder hochzufahren. Nun haben wir einen Backup vom System.
Erstellen der neuen SD Karte aus dem Backup
Das habe ich noch nicht gemacht! Voraussetzung: Source und Destination Karte haben dieselbe Größe!
Problem: mein Windows Programm zum Erzeugen einer Raspberry SD Karte legt ja beide Partitions an, und bespielt sie von einem einzigen, speziellen Image. Hier habe ich aber nun 2 Quellen in unterschiedlichen Formaten. So geht es also nicht.
geplantes Vorgehen:
- Mittels eines Kartenlesers die neue SD Karte einem Linux System verfügbar machen
- mit fdisk diese Karte partionieren
- Partition 2 mit dd aus dem Backup bespielen
- Partition 1 im FAT32 formatieren und mit tar füllen
- SD Karte in den Raspberry einbauten und hoffen, dass er als Klon des Andern funktioniert
- Den neuen Raspberry konfigurieren, z.B. Hostnamen ändern
Work in progess …