Raspberry PI – Backup Strategie

Bisher habe ich immer nur meine Config Files von OpenHAB gebackupt. Jedoch möchte ich nun immer ein komplettes Image als Backup haben damit ich im Fehlerfall einfach eine SD-Karte auf Basis des Images erzeugen kann um direkt wieder alles lauffähig zu haben.

Schritt 1: Backup Verzeichnis mounten

Ich habe einen entsprechenden Ordner auf meinem NAS erstellt. Dieser kann gemountet werde. Darüber hinaus muss man auch einen Ordner auf dem PI erstellen: z.B.:

sudo mkdir /mnt/backup

Dies wäre dann der LOCAL_FOLDER. 

sudo mount -t cifs //NAS_IP/NAS_FOLDER LOCAL_FOLDER -o username=USER,password=PASSWORD,vers=1.0

Vers=1.0 war bei meiner Synology notwendig. Ihr könnt aber auch zuerst mal ohne probieren.
Hat alles geklappt kann man das mount in fstab einbinden damit bei jedem Start automatisch das Verzeichnis eingebunden wird.

sudo nano /etc/fstab

Danach am Ende folgendes einfügen und die Änderungen speichern

//NAS_IP/NAS_FOLDER LOCAL_FOLDER cifs username=USER,password=PASSWORD,vers=1.0 0 0

Der mount erfolgt damit automatisch beim Neustart. Man kann aber auch mit folgendem Befehl ohne Neustart mounten.

sudo mount -a

Manchmal kommt es vor, dass beim Neustart der mount nicht klappt da das Netzwerk noch nicht verfügbar ist oder ähnliches. Dagegen hilf es via Crontab nochmal mount -a auszuführen. Sollte das Laufwerk bereits da sein passiert nichts und sonst erfolgt dann der mount. Dazu crontab aufrufen

sudo crontab -e

und am Ende folgendes anfügen und speichern.

# Mount zur Sicherheit falls FSTAB nicht funktioniert hat
@reboot sleep 120 && mount -a

Schritt 2: Backup Scripte

Ich möchte ein mit gzip gepacktes Image mit Hilfe des Standard Befehls dd erstellen. Der Befehl sieht dann wie folgt aus. Zunächst einmal müsst ihr herausfinden wie euer Laufwerk heißt welches Ihr sichern wollt. Das geht mit dem Befehl:

lsblk

Meine SD- Karte heißt beispielsweise /dev/mcblk0 . Dann könnt ihr das ganze einmal testen. Achtung, je nach belegtem Speicher und Systemperformance kann das eine ganze weile dauern da auch direkt mit gzip verkleinert wird.

sudo dd if=/dev/mmcblk0 | gzip > LOCAL_FOLDER/raspi_backup_$(date +%Y%m%d_%H%M%S).img.gz

Hat dies funktioniert sind wir bereit das Skript anzulegen. Dazu verwenden wir nano

sudo nano /home/pi/backup.sh

Und kopieren den folgenden Teil in die Datei:

#!/bin/bash
 
# Backup mit Hilfe von dd erstellen und im angegebenen Pfad speichern
dd if=/dev/mmcblk0 bs=1M | gzip > LOCAL_FOLDER/raspi_backup_$(date +%Y%m%d_%H%M%S).img.gz
 
# Alte Sicherungen nach X (hier 5) neuen Sicherungen entfernen
pushd LOCAL_FOLDER; ls -tr LOCAL_FOLDER/raspi_backup_* | head -n -5 | xargs rm; popd

Das ganze dann noch nach /usr/local/bin/ verschieben und ausführbar machen

sudo chmod 755 /home/pi/backup.sh
sudo mv /home/pi/backup.sh /usr/local/bin/backup.sh

So weit so gut. Zusätzlich möchte ich noch die OpenHAB Einstellungen um schneller an ein Backup z. B. des Sitemaps zu kommen. OpenHAB liefert bereits ein passendes Script mit welches wir nur noch aufrufen müssen (liegt bei mir hier: /usr/share/openhab2/runtime/bin/ ) . Dazu erstellen wir analog zum obigen vorgehen die Datei backup_oh.sh mit folgendem Inhalt verschieben diese entsprechend und machen sie ausführbar

sudo nano /home/pi/backup_oh.sh
#!/bin/bash

# Backup mit Hilfe von OH Script erstellen und im angegebenen Pfad speichern
/usr/share/openhab2/runtime/bin/backup LOCAL_FOLDER/openhab_backup_$(date +%Y%m%d_%H%M%S).zip

# Alte Sicherungen nach X (hier 10) neuen Sicherungen entfernen
pushd LOCAL_FOLDER; ls -tr LOCAL_FOLDER/openhab_backup_* | head -n -10 | xargs rm; popd
sudo chmod 755 /home/pi/backup_oh.sh
sudo mv /home/pi/backup_oh.sh /usr/local/bin/backup_oh.sh

Schritt 3: Backup einplanen (Cronjob)

Zu Schluss planen wir die beiden Backups noch ein. Das Image erstelle ich einmal wöchentlich immer Sonntags um 1 Uhr und das schlankere OpenHAB Backup einmal täglich um 0:30 Uhr. Dazu wieder die Crontab bearbeiten

sudo crontab -e

Hier dann die Skripte einplanen

# Image Datei 1 mal pro Woche erstellen
00 01 * * 0 /usr/local/bin/backup.sh
# Tägliches OpenHBA Backup
30 00 * * * /usr/local/bin/backup_oh.sh

Um im Image auf einzelne Dateien in Windows zugreifen zu können kann man die Datei mit z. B. 7ZIP entpacken und anschließend diesen Linux Reader verwenden.

Da ich mich nicht mit fremden Lorbeeren schmücken möchte hier die Quellen aus denen die meisten Infos stammen welche ich hier nur passend zusammengebaut habe: