DARC e.V.

DG2MDJ, Wolfgang Hartmuth

QTH: Augsburg 469m asl * JN58LJ * ITU 28 * WAZ 14 * DOK T19


Raspberry PI SD-Karte kopieren


Viele betreiben ein Pihole, das ist ein Raspberry Pi 3 oder 4 mit einer Sofware, die Tracking und Werbung aus dem Internet unterdrückt. Dabei wird die SD-Karte stark beansprucht. Bei mir ist die Karte nach ca. einem Jahr defekt und muss ausgetauscht werden. Ich habe daher nach eine Lösung gesucht die SD-Karte einfach zu kopieren und die Kopie als Backup zu nutzen. Über einen Artikel zu Raspberry Pi: USB Boot einrichten bin ich auf eine Lösung gestoßen. Die Systemkarte des Pihole wird im laufenden Betrieb kopiert. Folgt man den unter stehenden Anleitung, hält man danach eine bootfähige 1 zu 1 Kopie in den Händen.

Dazu benötigt man eine zweite SD-Karte ausreichender Größe zusammen mit einem Adapter für USB-A. Dieser Adapter liegt häufig den Speicherkarten bei.

SD-Karte im Adapter (nicht ganz eingeschoben)
SD-Karte im Adapter (nicht ganz eingeschoben)

Alle folgenden Eingaben müssen mit root-Rechten erfolgen. Entweder stellt "sudo" vor jeden befehl oder gibt "su - root" eine, um als Benutzer root zu arbeiten."su - root" funktioniert nur wenn vorher ein Passwort für root erstellt wurde. Mit "sudo passwd" richten sie das Passwort ein.
Der Adapter wird mit eingesteckter SD-Karte auf einen freien USB-Port gesteckt. Falls der Automounter läuft wird die Karte wahrscheinlich als /dev/sda1 eingehängt. Mit dem Befehl "df" lässt sich das feststellen. Falls die Karte nicht eingehängt wurde, nutzt man den Befehl "dmesg" um das richtige Device zu erkennen

Ausgabe von "dmesg":
$-> dmesg

[2316411.937016]  sda: sda1
$->
1. Als erstes muss die neue SD-Karte partitioniert werden:
$-> parted /dev/sda
(parted) mktable msdos
Warning: The existing disk label on /dev/sda will be destroyed and all data on
this disk will be lost. Do you want to continue?
Yes/No? yes
(parted) mkpart primary fat32 0% 100M
(parted) mkpart primary ext4 100M 100%
(parted) print
Model: Mass Storage Device (scsi)
Disk /dev/sda: 31,9GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags: 

Number  Start   End     Size    Type     File system  Flags
 1      1049kB  99,6MB  98,6MB  primary  fat32        lba
 2      99,6MB  31,9GB  31,8GB  primary  ext4         lba

(parted) quit
$-> 
2. Für die weitere Bearbeitung werden nun die Partitionen formatiert:
$-> mkfs.vfat -n BOOT -F 32 /dev/sda1
$-> mkfs.ext4 /dev/sda2

3. Für den Kopierprozess müssen die Partitionen der SD-Karte gemountet oder eingehängt werden, falls /mnt/sdcard schon existiert, wird eine Fehlermeldung ausgegeben:
$-> mkdir /mnt/sdcard
$-> mount /dev/sda2 /mnt/sdcard/
$-> mkdir /mnt/sdcard/boot
$-> mount /dev/sda1 /mnt/sdcard/boot/
Gibt man nun df ein so sollten die beiden Partitionen angezeigt werden:
$-> df
Dateisystem    1K-Blöcke Benutzt Verfügbar Verw% Eingehängt auf
/dev/root       15059160 2014460  12399600   14% /
devtmpfs          340548       0    340548    0% /dev
tmpfs             472132    2396    469736    1% /dev/shm
tmpfs             188856    1012    187844    1% /run
tmpfs               5120       4      5116    1% /run/lock
/dev/mmcblk0p1    261108   51020    210088   20% /boot
tmpfs              94424       0     94424    0% /run/user/1000
/dev/sda2       30405412      28  28835544    1% /mnt/sdcard
/dev/sda1          94759       1     94759    1% /mnt/sdcard/boot
4. Nun kann die System SD-Karte auf die neue neue SD-Karte kopiert werden.
Achtung: Der Kopierprozess benötigt einige Zeit. Ein Raspbian Lite mit ca. 2GB benötigt ca. 20 Minuten. Ein Raspbian mit Desktop und Applikationen mit ca. 11GB benötigt dagegen wesentlich mehr Zeit, geschätzt dürften das ca. 2 Stunden sein.
$-> rsync -ax --progress / /boot /mnt/sdcard
5. Nachdem der Kopierprozess abgeschlossen ist, können jetzt noch einige Parameter geändert werden. Dies ist notwendig damit das System von der neuen SD-Karte auch fehlerfrei gebootet werden kann. Die Partition-UUIDs der beiden Partitionen sda1 und sda2 müssen in zwei Dateien geändert werden. dazu müssen wir die Partition-ID der SD-Karte auslesen
$-> udevadm info -q all -n /dev/sda2 | grep partuuid
$-> udevadm info -q all -n /dev/sda1 | grep partuuid
Antwort bespielhaft: S: disk/by-partuuid/a90631d6-02 Hierbei ist -02 die zweite Partition
Antwort beispielhaft: S: disk/by-partuuid/a90631d6-01 Hierbei ist -01 die erste Partition
In den Dateien /mnt/sdcard/boot/cmdline.txt und /mnt/sdcard/etc/fstab müssen die Part-UUIDs nun mit denen ersetzt werden, die man in Schritt 5 erhalten hat. Siehe fett markierte Daten. Zu diesem Zweck verwende ich gerne "vi", es kann auch z.B. "nano" genutzt werden.

Inhalt von /mnt/sdcard/boot/cmdline.txt und /mnt/sdcard/etc/fstab:
console=serial0,115200 console=tty1 root=PARTUUID=f2a460e2-02 rootfsty

proc            /proc           proc    defaults          0       0
PARTUUID=f2a460e2-01  /boot           vfat    defaults          0       2
PARTUUID=f2a460e2-02  /               ext4    defaults,noatime  0       1
# a swapfile is not a swap partition, no line here
#   use  dphys-swapfile swap[on|off]  for that
6. alle Daten sind jetzt kopiert und bootfähig geändert worden. Die Partitionen können nun ausgehängt werden:
$-> cd ~
$-> umount /mnt/sdcard/boot
$-> umount /mnt/sdcard

Bevor man die neu erstellte SD-Karte als Backup für die System Karte nuntzt sollte man sie auch testen. Also den Raspberry herunterfahren, vom Netzteil trennen, SD-Karten tauschen, am Netzteil anschließen ... Hat die neue Karte gebooten? Funktioniert alles?

Hinweis:Diese Anleitung ist kein Ersatz für einen Backup. Um gegen Datenverlust geschützt zu sein, sollte man dringend regelmäßig eine Backup von wichtigen Daten gemacht werden. Hierzu dienen die Dienstprogramme z.B: ssh, scp, tar, cpio.

Sollte wider Erwarten Probleme auftreten, die Anleitung nochmals durchgehen, eventuell nochmals durchführten.

Last modified: 2023-02-17 12:51:19 UTC