Bei Projekten mit einem Raspberry Pi ist es oft wünschenswert, Backups der SD-Karte zu erstellen.
Bei Recherchen im Internet lassen sich viele unterschiedliche Beschreibungen finden. Die einfachste Möglichkeit ist ein stumpfes Kopieren des kompletten Inhalts mittels dd. Diese Variante hat jedoch den Nachteil, dass das Image genau so groß ist wie die SD-Karte, selbst wenn diese nur zum Teil belegt ist. Es lassen sich sogar Anleitungen finden, die ein Kopieren mittels dd im laufenden Betrieb direkt auf dem Raspberry Pi beschreiben. Ich rate jedoch von solchen Backups ab, da dann die Integrität des Dateisystems nicht gewährleistet werden kann.
Ich möchte an dieser Stelle meinen Favouriten erläutern, welcher mittels eines Kartenlesers und den Linux Kommandozeilentools dd und fsarchiver ein Image erstellt. Falls ihr die Schritte nachspielt, müsst ihr natürlich mein Homeverzeichnis durch euer Zielverzeichnis austauchen.
Backup erstellen
Wir werden uns nun zunächst ansehen, wie die aktuelle Partitionstabelle aussieht:
sudo fdisk -l /dev/mmcblk0 Disk /dev/mmcblk0: 31.9 GB, 31914983424 bytes 4 heads, 16 sectors/track, 973968 cylinders, total 62333952 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 Disk identifier: 0xb1c554f2 Device Boot Start End Blocks Id System /dev/mmcblk0p1 8192 137215 64512 c W95 FAT32 (LBA) /dev/mmcblk0p2 137216 62333951 31098368 83 Linux
Wir sehen, dass sich zwei Partitionen auf der SD-Karte befinden. Die erste ist mit dem Dateisystem FAT32 formatiert und die zweite mit einem Linux Dateisystem. Da fsarchiver leider keine FAT32 Unterstützung bietet, werden wir die erste Partition zusammen mit der Partitionstabelle sichern. Dies geschieht über den folgenden Befehl:
sudo dd if=/dev/mmcblk0 bs=512 count=137216 | gzip -c > /home/michael/Rpi_P0_P1.dd.gz
Dabei setzen wir für die Option „count“ den Wert ein, welcher den Start der zweiten Partition kennzeichnet. Außerdem wird hier über die Pipe das Image direkt gezippt, um Speicherplatz zu sparen.
Im nächsten Schritt werden wir nun noch die zweite Partition sichern, wobei wir fsarchiver benutzen. Dieses Programm hat den Vorteil, dass es das Dateisystem kennt und somit nur belegte Sektoren sichert. Darüber hinaus wird standardmäßig eine Komprimierung genutzt.
sudo fsarchiver savefs /home/michael/Rpi_P2 /dev/mmcblk0p2
Backup wiederherstellen
Zunächst werden wir die Partitionstabelle und die Boot Partition wiederherstellen mit dd. Dazu genügt folgendes Kommando (Achtung: Alle derzeitigen Daten auf der SD-Karte gehen verloren!):
gunzip -c /home/michael/Rpi_P0_P1.dd.gz | sudo dd bs=2M of=/dev/mmcblk0; sync
Anschließend stellen wir noch mit fsarchiver die zweite Partition wieder her:
sudo fsarchiver restfs /home/michael/Rpi_P2.fsa id=0,dest=/dev/mmcblk0p2
Moin,
könnte des sein, dass die Blocksize beim Sichern der ersten Partition nicht 521 sondern 512 sein müsste?
Hallo Dirk,
vielen Dank für den Hinweis! Ist natürlich ein Tippfehler. Habe es korrigiert.
Gruß
Michael
Hallo Michael,
heute war es dann soweit. Die SD Karte auf meinem Raspi hat den Geist aufgegeben und war nicht mehr davon zu überzeugen, zu funktionieren.
Das Recovery hat mit Deiner Anleitung super geklappt. Danke dafür!
Vielleicht sei mir noch ein Hinweise erlaubt:
Beim Sichern im laufenden Betrieb brauche ich die Option -A, weil sonst das read/write gemountete Laufwerk nicht gesichert werden kann. War beim Recovery kein Problem.
Beim Recovery habe ich eine Standard-Installation von Raspbian genutzt, um ein lauffähiges System zu haben. Die wiederherzustellende SD-Karte habe ich dann über einen USB-Adapter eingebunden. Entsprechend habe ich nicht auf /dev/mmcblk0p2 sondern auf /dev/sda2.
Viele Grüße