Raspi4 – dd Backup mit Script & Restore – meine Endlösung!

Änderungsstand: 2020-03-02

Folgendes ist ab sofort zu beachten! Der /sharedfolders -Ordner wird nicht mehr verwendet! Es werden ab nun die direkten Einhängepunkte angegeben. Infos darüber gibt es hier.

Das Beste daran, dass das Backup im laufenden Betrieb erstellt werden kann, ohne den Raspi auszuschalten. Dafür sollte man aber beachten, dass erstellte Datenbanken, im Moment des Backups keinen Zugriff haben sollten. Ich mache deshalb das Backup, indem ich vorher meinen Datenbank-Docker deaktiviere und anschließend wieder aktiviere. Das könnt ihr übrigens auch im Script automatisch ablaufen lassen. Da das aber zu weit in die Materie eindringen würde, ignoriere ich das in meinem Beispiel.

Als Erstes in OMV einen „Freigabeordner“ erstellen. Ich nenne diesen in meinen Beispiel Backup-dd. Man kann natürlich auch einen Ordner im Terminal, außerhalb von OMV erstellen, sollte dann aber die folgenden Befehle anpassen. Wie das geht, werdet ihr mittlerweile aus meinen Guides wissen.

Im Terminal:

Zuerst springe ich mit folgendem Befehl ins Verzeichnis /usr/local/bin und lege dort eine neue Datei an, Namens dd-script, füge die Scriptkommentare ein und starte das Script (im Script ist alles soweit benötigte hinterlegt). Bitte Eure Werte (Grün markiert) anpassen!

cd /usr/local/bin && sudo nano dd-script
#!/bin/bash
# Ablageverzeichnis: /usr/local/bin/dd-script 
# Variablendefinition
BACKUP_PFAD="/srv/dev-disk-by-label-Extern/Backup-dd"
BACKUP_ANZAHL="4"
BACKUP_NAME="raspi4"
Ausgabe="Backup erstellt. Ausgabe auf Fehlermeldung(en) checken!"
# Datenbank-Docker Stop
# Hier könnte der Befehl stehen, um den Datenbankdocker zu stoppen
# Backup starten
dd if=/dev/mmcblk0 of=${BACKUP_PFAD}/${BACKUP_NAME}-$(date +%Y%m%d-%H%M).img bs=4MB status=progress
#
# Altbestände löschen, um nur die definierte Anzahl der letzten >BACKUP_ANZAHL< zu haben
pushd ${BACKUP_PFAD}; ls -tr ${BACKUP_PFAD}/${BACKUP_NAME}* | head -n -${BACKUP_ANZAHL} | xargs rm -f; popd
#
# Datenbank-Docker Start
# Hier könnte der Befehl stehen, um den Datenbankdocker zu starten
#
 echo "$Ausgabe"

Strg-x, y, Enter

Um das erste Backup zu erstellen, im Terminal folgendes eingeben:

bash dd-script

Fertig.

Jetzt kann der Befehl auch in den geplanten Aufgaben in OMV eingetragen werden. Ich wähle hierbei jährlich und deaktiviere die automatische Abfolge. Dieses Backup tätige ich nur nach Bedarf manuell. Ihr könnt es natürlich auch automatisieren, indem Ihr z.B. täglich oder wöchentlich wählt. Anschließend kopiere ich die angelegte raspi4.img per Samba auf meinen Windows-Rechner auf eine extra dafür angelegte, entfernbare Backup-Platte, die nur dafür angesteckt wird.

Der Vorteil, mit dem Script zu arbeiten, liegt auf der Hand. Es werden immer nur eine gewisse, vordefinierte Anzahl der letzten Backups aufbewahrt. Der Rest wird automatisch gelöscht. Natürlich ist das auch nicht ganz optimal. Besser wäre, z.B. eine Aufbewahrung der letzen 4 Backups, + eines des letzten Monats, + eines im letzten Jahr. Doch das übersteigt grad meinen Horizont. Ich versuche es mal, in meinen nächsten Urlaub 🙂

Das war es eigentlich auch schon. Das Backup wurde erstellt. Dieses oder weitere Backups könnten jetzt solange dort liegen bleiben, bis man sie benötigt. Da gibt es aber ein kleines Problem, was der Anfänger meist nicht bedenkt. Ist die SD-Card einmal hinüber, hat man erst mal kein System, was startet und was auf das Backup zugreifen kann. Also kopiert man dieses Backup vorsichtshalber auf einen Stick, der mit NTFS formatiert wurde oder gleich auf einen Windows-Rechner. Dafür kann man die Samba-Freigabe verwenden.

Restore:

Jetzt auf dem Windows-Rechner das BaleaEtcher installieren. Hat man eine SD-Card, die etwas kleiner ist, als die Originale bzw. das Backup, dann kann BalenaEtcher nicht damit umgehen! Da reicht schon 1 kb aus. Also das entweder vorher checken oder eine größere nehmen. Meist hat man das Problem bei billig Karten. Ich z.B. hatte bei 4 verschiedenen Kingston 16GB SD-Cards 4 verschiedene Werte. Sehr suboptimal…

BalenaEtcher starten, das Image laden und die SD-Card auswählen. Dann auf Flash klicken. Wenn fertig, die SD-Card in den Raspi rein und starten.

Fertig.

Verwendet man nun z.B. eine 64GB SD-Card, um ein Backup einer 32GB SD-Card zu tätigen, hätte man quasi 32GB der Kapazität in den Wind geschossen. Mit dem Befehl…

sudo raspi-config

… kann man unter Punkt 7 und dann Punkt 1 den restlichen ungenutzen Speicherplatz wieder zum „rootfs“ hinzufügen. Dies geschieht dort, nach einem anschließendem restart, automatisch. Erstellt man das Restore mit Win32DikImager, benötigt man diesen Schritt auch! Bedenkt aber, dass dann, in diesem genannten Beispiel, jedes Folgebackup 64GB groß ist.

Evtl. aufstehende Probleme:

Besonders für die ‚Win32 Disk Image‘ – Nutzer unter Euch. Hat man eine „gebrauchte“ SD-Card und verschiedene Verzeichnisse sind schon angelegt, sollte man die Card einmal komplett auf FAT32 formatieren. Gelingt das nicht, helfen Tools wie z.B. SDFormatter oder AOMEI Partition Assistant, da Windows nicht ohne Weiteres auf ext4-Partitionen zugreifen kann. BalenaEtcher ist das egal. Das nimmt fast alles…