OpenHAB-Sicherung
Mit Linux-Bordmitteln lässt sich relativ einfach eine komplette Sicherung des OpenHAB-Systems auf meinem Synology-NAS erstellen. Ein komplettes Backup hat den Vorteil, dass es sich relativ einfach zurück spielen lässt, wenn die Originalversion einmal beschädigt ist.
Backups sind aber immer dann ein Problem, wenn man daran denken muss, sie auch wirklich zu machen. Hier bietet sich ein automatisierter Prozess an, der die gesamte Speicherkarte regelmäßig sichert. Diese Sicherung kann man dann mit Etcher wieder auf eine Speicherkarte schreiben. Das Zurückspielen des Images mit dd hat bei mir übrigens nicht zu einer funktionfähigen Installation geführt.
Vollständiges Backup
Auf der Seite https://hobbyblogging.de/raspberry-pi-vollautomatisch-sichern habe ich da ein nettes Listing gefunden, aus dem ich wieder ein paar neue Elemente übernommen habe. Das Listing habe ich geringfügig an meine Bedingungen angepasst.
#!/bin/bash
#Variablen
BACKUP_NAS_PFAD="/mnt/nas"
BACKUP_ANZAHL="5"
BACKUP_NAME="Sicherung"
#Festplatte einbinden
mount -t cifs -o vers=2.0,user=<nas-user>,password=<nas-passwort>,rw,file_mode=0777,dir_mode=0777 //192.168.1.xy/NetBackup ${BACKUP_NAS_PFAD}
#Backup erstellen
dd if=/dev/mmcblk0 of=${BACKUP_NAS_PFAD}/${BACKUP_NAME}-$(date +%Y%m%d).img bs=1MB
#Alte Sicherung löschen
pushd ${BACKUP_NAS_PFAD}; ls -tr ${BACKUP_NAS_PFAD}/${BACKUP_NAME}* | head -n -${BACKUP_ANZAHL} | xargs rm; popd
#Festplatte auswerfen
umount ${BACKUP_NAS_PFAD}
Einige der Zeilen bedürfen einer Erläuterung:
- In Zeile drei wird eine Freigabe auf dem NAS per CIFS bzw. Samba eingebunden. Bei mir auf dem NAS läuft nicht die aktuellste Version, daher muss ich hier eine ältere Versionsnummer konkret angeben.
- In Zeile fünf wird das lokale Verzeichnis zum Mounten angegeben, dass muss man ggf. erst erstellen
- In Zeile neun mach dd dann den eigentlichen Job. Es wird der komplette Karteninhalt auf die NAS-Freigabe kopiert
- In den Zeilen sechs und Sieben werden noch Einstellungen für das Backup gemacht, z.B. für die maximale Zahl der Backups, die sind ja bei mir 32GB groß, insofern spielt das schon eine Rolle
- Zeile elf muss man sich eine Weile ansehen. Im ersten Schritt wird mit pushd das aktuelle Verzeichnis gesichert und der Backup-Pfad dann als Verzeichnis gesetzt. Mit dem ls Befehl werden dann die Sicherungen gelistet und mittel head die Liste auf diejenigen beschränkt, die nicht zu den ersten 5 gehören. Diese Einträge werden dann gelöscht. Bei den ersten fünf Sicherungen gibt es hier eine Fehlermeldung, da noch nichts zu Löschen ist. Am Ende wird das ursprüngliche Arbeits-Verzeichnis wiederhergestellt.
Die Datei heißt bei mir disk-backup.sh und muss ausführbar gemacht werden.
openHAB Backup auf NAS
OpenHAB bietet auch eine Backup-Möglichkeit nur für seine eigenen Daten. Das hat den Vorteil deutlich kleiner zu sein und hilft auch bei Umzug auf ein neues System.
#!/bin/bash
#Variablen
BACKUP_PFAD="/var/lib/openhab/backups"
BACKUP_NAS_PFAD="/mnt/nas"
BACKUP_ANZAHL="10"
BASIS_NAME="Backup-OpenHAB"
#Festplatte einbinden
mount -t cifs -o vers=2.0,user=<nas-user>,password=<nas-passwort>,rw,file_mode=0777,dir_mode=0777 //192.168.1.xy/NetBackup ${BACKUP_NAS_PFAD}
BACKUP_NAME=${BACKUP_PFAD}/${BASIS_NAME}-$(date +%Y%m%d-%H%M).zip
#echo $BACKUP_NAME
/usr/share/openhab/runtime/bin/backup $BACKUP_NAME
mv $BACKUP_NAME $BACKUP_NAS_PFAD
#Alte Sicherungen löschen
pushd ${BACKUP_NAS_PFAD}; ls -tr ${BACKUP_NAS_PFAD}/${BASIS_NAME}* | head -n -${BACKUP_ANZAHL} | xargs rm; popd
#Festplatte auswerfen
umount ${BACKUP_NAS_PFAD}
Die Idee dahinter ist, dass man dem internen Backup-Tool von OpenHAB den Namen nach den eigenen Vorstellungen übergibt und anschließend die erzeugte Datei auf das NAS verschoben.
Diese Datei habe ich unter dem Namen backup.sh gespeichert und ausführbar gemacht.
Cron
Dann kann man sie mittels Cronjob (von root) regelmäßig ausführen:
...
# For example, you can run a backup of all your user accounts
# at 5 a.m every week with:
# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
#
# For more information see the manual pages of crontab(5) and cron(8)
#
# m h dom mon dow command
1 4 * * * /home/openhabian/backup.sh
#
0 5 1,15 * * /home/openhabian/disk-backup.sh