Raspberry Backups und Wiederherstellung

Manchmal kommt es leider vor, dass so ein PI einfach nicht mehr starten will. Schlimmstenfalls muss man dann alles neu machen.
Ausser – man hat ein Backup gemacht. (Einfach das unter Windows mit dem win32diskimager die SD-Karte einlesen, und die Datei aufheben)
Aber das geht auch im Betrieb.

Dieses Beispiel sichert die komplette SD-karte auf ein anderes Linux-System :


dd if=/dev/mmcblk0 | gzip -9 | ssh ZIELSERVER „dd of=/Z/I/E/L.img.gz“

die .gz Datei kann man dann einfach entpacken, und (sogar mit Windows) wieder auf die Karte schreiben.
(das hat zumindest bei mir schon öfters funktioniert.)

Mit diesem Kommand kann man sich den Fortschritt anzeigen lassen :

lsof |grep mmcblk0| awk ‚{printf(„%d M\n“,strtonum($7)/1024/1024);}‘

Weil dabei die SD-Karte „im Betrieb“ weggesichert wird, können natürlich offene Dateien (Logfiles etc.) kaputt sein.
-> Nach dem ersten Reboot einen Filesystem Check erzwingen :


shutdown -rF 0

Wenn man das System neu aufsetzt, und nur ein Paar Dateien aus dem Backup haben möchte, dann kann man nat. auch die Systempartition extrahieren und mounten :

sfdisk -l -uS DATEINAMEDESIMAGES

ergibt z.B.:
Disk DATEINAMEDESIMAGES: 968 cylinders, 255 heads, 63 sectors/track
Units = sectors of 512 bytes, counting from 0

Device Boot Start End #sectors Id System
DATEINAMEDESIMAGESp1 8192 122879 114688 c W95 FAT32 (LBA)
DATEINAMEDESIMAGESp2 122880 15564799 15441920 83 Linux
start: (c,h,s) expected (7,165,31) found (896,0,1)
end: (c,h,s) expected (968,220,20) found (511,3,16)
DATEINAMEDESIMAGESp3 0 – 0 0 Empty
DATEINAMEDESIMAGESp4 0 – 0 0 Empty

Wäre dann in dem Fall :

dd if=DATEINAMEDESIMAGES of=PARTITION bs=512 skip=122880 count=15441920

mkdir /mnt/PIVERZEICHNIS

mount -o loop PARTITION /mnt/PIVERZEICHNIS

Möchte man die Daten nicht nur auslesen, sondern auch bearbeiten (reparieren)
und dann wieder zurückspielen, dann kann man das relativ einfach auch in einer Virtual Box
(wo ein x86 Linux installiert ist) machen.
Dazu muss das image zuerst mit WindiskImager eingelesen, und dann konvertiert werden :

C:\Program Files\Oracle\VirtualBox>VBoxManage.exe convertfromraw d:\IMAGE-DATEI d:\IMAGEDATEI.vdi

Reparieren, und dann wieder zurück-Konvertieren :

C:\Program Files\Oracle\VirtualBox>VBoxManage.exe internalcommands converttoraw d:\IMAGEDATEI.vdi d:\NEUEIMAGEDATEI