Raspberry Pi

Raspberry Pi als Smarthome-Zentrale

Einen Einplatinencomputer, auf dem nur eine kleine Anwendung für die Steuerung deines Smarthomes läuft, sichern? Das ist doch voll übertrieben und verursacht mehr Aufwand als Nutzen?

Falsch gedacht!

Was machst du denn, wenn die Speicherkarte deines Raspberry Pis den Geist aufgibt und dein Zuhause plötzlich im wahrsten Sinne des Wortes hirnlos ist?

Du wirst ganz schön blöd aus der Wäsche schauen, das kann ich dir versprechen. Denn viele der Einstellungen wiederherstellen kann unter Umständen Stunden, wenn nicht sogar Tage an Arbeit bedeuten.

Dann doch lieber jeden Tag sichern?

Das dann vielleicht doch nicht. Im Normalfall – gerade im Bezug auf Openhab – lohnt sich kein tägliches Backup. Die Konfigurationsdateien ändern sich im Normalfall nicht und die Protokolldateien kann man getrost in die Tonne kicken, sofern alles rund läuft.

Daher ist ein tägliches Backup nicht wirklich sinnvoll. Man sollte sich lieber in regelmäßigen Abständen ein Backup anlegen und das dann sicher aufbewahren, bevor man bei Änderungen ein neues erstellt. Und ein Backup im laufenden Betrieb ist dabei absolut möglich und auch sinnvoll, wenn es um Smart Home geht. Denn wer möchte schon für die Dauer des Backups auf seinen Komfort verzichten?

Ein Backup über SSH erstellen

Da viele Personen ihren Raspberry Pi ohne Tastatur und Bildschirm betreiben, erkläre ich dir ganz kurz, wie das BackupNotebook grundsätzlich abläuft.

Du meldest dich per SSH auf der Konsole deines Raspberry Pi an und gibst den Befehl für das Backup ein. Die Aufgabe wird angestoßen und du musst warten, bis diese abgeschlossen ist. Wenn du vorher deine Verbindung zum Pi schließt, wird dein Backup abgebrochen.

Warum ist das so?

Du hast beim Anmelden quasi eine Instanz gestartet. Die ist so lange aktiv, bis sie wieder beendet wird. Beenden kannst du deine Instanz, indem die Verbindung unterbrochen wird oder das Fenster geschlossen wird.

Wird deine Instanz also nun beendet, kann deine Aufgabe nicht weiter ausgeführt werden, da sie innerhalb dieser Instanz läuft.

Du kannst dir das in etwa so vorstellen, wie ein Container, in den du Sachen packen kannst. So lange der Container in deiner Nähe ist, kannst du immer wieder etwas hineinwerfen. Wird der Container nun aber abgeholt und ist weg, kannst du nichts mehr hineinwerfen. Du brauchst erst wieder einen neuen Container. Logisch, oder?

Das Problem wird per Cronjob gelöst

Kennst du die Aufgabenplanung unter Windows? Du kannst dort Aufgaben hinterlegen, die zu einem bestimmten Zeitpunkt ausgeführt werden. Diese Aufgabenplanung gibt es in ähnlicher Weise auch unter Linux. Man nennt es dort jedoch Cronjob.

Diesen Cronjob definierst du für einen bestimmten Zeitpunkt. Dazu nennst du deinem Raspberry Pi noch die Aufgabe, die er ausführen soll. So, wie du zu deinem Kind sagen kannst, es soll bitte die Spülmaschine nach der Schule ausräumen. (Macht man das heute noch so?)

Das Betriebssystem auf deinem Pi klappert nun kontinuierlich die Datei ab und vergleicht die aktuelle Uhrzeit mit den Angaben in deinem Cronjob. Stimmen die Daten überein, wird die Aufgabe ausgeführt.

Und siehe da, du hast ein vollautomatisches Raspberry Pi Backup.

Die Sicherung muss extern gespeichert werden

Doch wohin nun mit der Sicherung? In einen Ordner auf deinem Raspberry Pi? Ergibt das Sinn?

Wohl kaum.

Geht die Speicherkarte kaputt, wäre die Sicherung ebenfalls verloren. Dann hättest du dir den Aufwand auch direkt sparen können. Zumal das Erstellen der Sicherung deine Speicherkarte abnutzt und sie nur schneller in den Tod treibt.

Sichere die Daten daher lieber auf eine externe Festplatte oder ein NAS in deinem Netzwerk. Denn ein Backup im Netzwerk bietet dir viele Vorteile.

Das NAS ist im Normalfall sowieso 24 Stunden erreichbar und wartet nur auf Arbeit. Da das Ganze auch über die Netzwerkverbindung erledigt werden kann, musst du nicht einmal etwas anschließen. Clever, oder?

Das Vorgehen bei der externen Sicherung

Bevor du extern sichern kannst, musst du deinem Pi erklären, wohin er die Datei schreiben darf. Dazu richtest du am besten auf deinem NAS eine eigene Freigabe ein, auf die der Raspberry zugreifen darf. Das ist besser, als deinen Account zu nutzen.

Danach muss die Freigabe auf dem Raspberry Pi verbunden werden. In der Linuxwelt spricht man hierbei meist von mounten. Das bedeutet im Grunde nur, dass du die Freigabe einhängst und dann darauf zugreifen kannst. Nichts Spektakuläres.

Das Mounten kannst du von deinem Sicherungsskript ausführen lassen, das zeige ich dir gleich. Dann wird die Sicherung erstellt und ganz am Ende wird die Freigabe des NAS wieder ausgehängt. Es wird keine dauerhafte Verbindung benötigt.

Die technische Umsetzung

Das Projekt ist auf Github verfügbar.

Jetzt wollen wir uns ans Eingemachte wagen. Wir erstellen zusammen ein Skript, das die Aufgaben Einhängen, Sichern und Aushängen übernimmt. Dieses Skript soll jeweils am 1. und am 15. eines Monats ausgeführt werden.

Der 1. und der 15. sind dabei kein willkürlicher Wert. Diese Tage gibt es in jedem Monat. Der 30. oder 31. hingegen fällt in manchen Monaten einfach weg. Das wäre blöd, denn dann hättest du keine Sicherung und würdest im Zweifelsfall wieder blöd aus der Wäsche schauen.

Doch nun ran an den Speck. Das Skript (entstammt der Seite raspberrypi.tips) sieht, wenn es fertig ist, wie folgt aus:

#!/bin/bash
#Festplatte einbinden
mount -t cifs -o user=USERNAME,password=PASSWORD,rw,file_mode=0777,dir_mode=0777 //IP/FREIGABE /mnt/nas
#Variablen
BACKUP_PFAD=”/mnt/nas/Backup”
BACKUP_ANZAHL=”5”
BACKUP_NAME=”Sicherung”
#Backup erstellen
dd if=/dev/mmcblk0 of=${BACKUP_PFAD}/${BACKUP_NAME}-$(date +%Y%m%d).img bs=1MB
#Alte Sicherung löschen
pushd ${BACKUP_PFAD}; ls -tr ${BACKUP_PFAD}/${BACKUP_NAME}* | head -n -${BACKUP_ANZAHL} | xargs rm; popd
#Festplatte auswerfen
umount /mnt/nas

Lege das Skript mit folgendem Befehl an:

nano backup.sh

Speichere es im Anschluss mit STRG + X und durch Bestätigen des Dialogs. Merke dir, wo du es abgelegt hast, den Pfad wirst du später noch brauchen.

Durch die Kommentare siehst du schon direkt, was in welchem Abschnitt passiert. Ich möchte dir die Hauptbestandteile dennoch kurz erläutern.

Die Variablen

Die Variablen werden später als Platzhalter im Skript eingesetzt und sollen eigentlich nur eine Möglichkeit zur schnellen Anpassung bieten. Man sieht direkt auf den ersten Blick, wofür eine Variable steht und man kann den Wert direkt ändern, ohne lange im Code suchen zu müssen.

Wobei man fairer Weise sagen muss, dass bei so wenig Code auch ein Suchen noch möglich wäre.

Das Backup erstellen

Dank der Hilfssoftware dd lassen sich schnell Sicherungen erstellen. Die Parameter if und of stehen dabei für den Input und den Output. Das lässt sich ganz einfach merken.

Als Input wird ganz einfach die Speicherkarte des Raspberry Pi angegeben und als Output definieren wir den Pfad für das Backup, dessen Name und hängen daran noch ein Datum in der Form YYYY.mm.dd, so dass die unterschiedlichen Versionen unterschieden werden können und das Backup nicht jedes Mal überschrieben wird.

Dadurch kannst du auch auf ein älteres Backup zurückgreifen.

Alte Sicherungen löschen

Diesen Punkt kannst du theoretisch auslassen. Dadurch werden allerdings alle Backups behalten und dein NAS wird irgendwann eine Menge an Backups enthalten. Aus diesem Grund ergibt es durchaus Sinn, alte Backups zu löschen.

In diesem Skript werden fünf Backups behalten und alles was darüber hinaus geht, wird gelöscht. Fünf Backups bedeuten zweieinhalb Monate an Möglichkeiten zur Wiederherstellung.

Der letzte Schritt: die Automatisierung

Cool, du hast nun ein funktionierendes Skript, um Backups anzulegen. Jetzt musst du es nur noch automatisieren, dass es zu den oben genannten Zeitpunkten automatisch ausgeführt wird. Überlege dir schon einmal, zu welcher Uhrzeit es für dich am besten ist. Ich habe mich auf 5 Uhr am Morgen festgelegt, da auf meinem Raspberry Pi in der Nacht noch andere Skripte laufen.

Starte das Bearbeiten der Cronjobs indem du folgendes in die Kommandozeile eintippst:

sudo crontab -e

Wir legen den Cronjob mit Hilfe von sudo an, da wir so auf alle Fälle Zugriff auf jedes Verzeichnis haben werden.

Füge nun in der Datei am Ende folgende Zeilen ein:

0 5 1 * * /home/pi/Scripts/backup.sh > /dev/null
0 5 15 ** /home/pi/Scripts/backup.sh > /dev/null

Ändere bitte den Pfad deines Skripts entsprechend ab.

Die Angabe hinter dem Pfad steht übrigens dafür, dass keine Ausgabe stattfindet beim Ausführen des Skripts. Im Fehlerfall wird es natürlich dennoch eine Ausgabe geben.

Speichere nach dem Beenden deiner Eingaben auch hier die Datei durch STRG + X und das Bestätigen des Dialogs.

Erledigt, lehne dich zurück

Super gemacht! Du hast nun ein vollautomatisches Raspberry Pi Backup eingerichtet und erhältst ab sofort zwei Backups je Monat auf dein NAS. Super komfortabel und ohne Aufwand.

Was hast du für Erfahrungen mit einem Backup auf dem Raspberry Pi gemacht? Oder hast du es bislang noch gar nicht in Erwägung gezogen?

Schreib es in die Kommentare und lass uns darüber sprechen.

Kategorien: Computer

2 Kommentare

Wirtschaftsinformatiker · 5. November 2018 um 23:48

Supernützliche Anleitung, man dankt. Finde deine Smart Home Beiträge eigentlich alle sehr spannend.

Deutschlands Hitzewelle macht auch der Technik zu schaffen · 31. Juli 2018 um 08:02

[…] ich definitiv nicht. Dank einem vollautomatischen Backup wäre das Neuaufsetzen zwar einfacher, aber bequem bedeutet eben auch, dass man das nicht machen […]

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Translate »