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.

 

Keine Datensicherung zu haben ist ein wenig wie nur ein T-Shirt zu besitzen. Klick um zu Tweeten

 

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 Backup im laufenden Betrieb Notebook 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

Lukas

Hi, mein Name ist Lukas.Seit 2016 blogge ich auf Hobbyblogging über unterschiedliche Themen des Alltags. Schwerpunkt dabei ist das Thema Smart Home, speziell mit der Open Source Software OpenHab auf dem Raspberry Pi.Neben dem Bloggen absolviere ich derzeit mein Master-Studium im Fachbereich Wirtschaftsinformatik und arbeite als Werkstudent im Software Engineering.

14 Kommentare

Wilfried Gronert · 13. Juni 2019 um 18:06

Hallo,
ich würde gerne mein RASPI auf diese art sichern. Habe aber kaum Erfahrung mit Linux bzw. Raspbian.
Ich habe ein NAS an IP.Adr 192.168.1.14 . Hier habe ich das Verzeichnis \Raspberry\Datensicherung eingerichtet. Wie müsste ich das in dem Script angeben bzw. beim mounten ?

    Lukas · 13. Juni 2019 um 18:54

    Hallo Wilfried,

    schön, dass du dich direkt von Beginn an mit dem Thema Datensicherung befasst. Tatsächlich ist es ja ein wichtiges Thema.

    Wenn du auf deinem NAS eine Freigabe Raspberry erstellt hast und sich darin der Ordner Datensicherung befindet, musst du im Skript wie folgt angeben:

    mount -t cifs -o user=USERNAME,password=PASSWORD,rw,file_mode=0777,dir_mode=0777 //192.168.1.14/Datensicherung /mnt/nas

    Bitte achte darauf, dass auf deinem Raspberry Pi im Ordner mnt der Ordner nas existiert. Anlegen kannst du ihn mit dem Befehl „mkdir nas“. Im Anschluss daran musst du im Skript noch den Pfad für deine Sicherung anpassen:

    BACKUP_PFAD=“/mnt/nas/Datensicherung“

    Den Abschnitt über die E-Mail am Ende kannst du löschen, sofern du keine E-Mails erhalten möchtest. Solltest du E-Mails erhalten wollen, muss dein Raspberry Pi in der Lage sein, E-Mails zu verschicken (beispielsweise durch ssmtp).

    Achte außerdem darauf, dass du am Anfang des Skripts den Benutzernamen und das Passwort einträgst, dass dein Raspberry Pi Zugriff auf die Freigabe erhält.

Werner · 11. Juni 2019 um 18:12

Hallo Lukas

ich habe alles gecheckt. Die Freigabe backup gibt es auf der NAS. Username und Passwort stimmt auch. Groß Kleinschreibung habe ich auch beachtet. Der Ordner nas existiert. IP Adresse stimt
Was kann das sein?

Gruß
Werner

    Lukas · 11. Juni 2019 um 18:14

    Hallo Werner,

    den Ordner nas musst du händisch anlegen. Dazu navigierst du in das Verzeichnis mnt und führst dort den Befehl „mkdir nas“ aus. Der Ordner wird nun angelegt und kann ab sofort genutzt werden.

      Werner · 11. Juni 2019 um 18:52

      Hallo Lukas

      das habe ich ja gemacht. Der Ordner ist da

      Gruß
      Werner

        Lukas · 11. Juni 2019 um 18:58

        Hallo Werner,

        bitte sei doch so nett und schicke mir mal dein aktuelles Skript per E-Mail zu: support@hobbyblogging.de

        Ich bin mir sicher, wir finden eine Lösung für dein Problem.

Werner · 11. Juni 2019 um 09:57

Hallo

Super Anleitung. Nur waum bekomme ich diesen Fehler? Mein Server läuft und die Einstellungen stimmen alle.

mount error(112): Host is down
Refer to the mount.cifs(8) manual page (e.g. man mount.cifs)
dd: failed to open ‚”/mnt/nas/backup”/”TestSicherung”-20190610.img‘: No such file or directory
backup.sh: line 11: pushd: ”/mnt/nas/backup”: No such file or directory
head: invalid number of lines: ‘”5”’
ls: cannot access ‚”/mnt/nas/backup”/”TestSicherung”*‘: No such file or directory
rm: missing operand
Try ‚rm –help‘ for more information.
backup.sh: line 11: popd: directory stack empty

Gruß
Werner

    Lukas · 11. Juni 2019 um 11:36

    Hallo Werner,

    danke für dein Feedback zum Artikel.

    Ich glaube bei dir ist das Problem, dass dein NAS nicht erreichbar ist. Die Fehlermeldung „host is down“ lässt darauf schließen, dass der Raspberry Pi das NAS nicht erreicht.
    Du musst sicherstellen, dass auf deinem NAS der Ordner Backup in der Freigabe existiert, die zu in deinem Raspberry Pi einbinden möchtest. Außerdem muss der Ordner nas im Verzeichnis mnt angelegt sein. Nur so kann das Skript an diese Stelle die Freigabe mounten.
    Womöglich hilft es dir auch (sofern es vorher bereits einmal funktioniert hat) deinen Raspberry Pi und dein NAS neu zu starten.
    Außerdem kannst du sicherstellen, dass die richtige IP-Adresse des NAS in der Konfiguration des Skripts eingetragen ist.

    Ich wünsche dir viel Erfolg und lass gerne nochmal von dir hören.

Martin · 23. April 2019 um 15:14

Hallo Lukas,
vielen Dank für die Anleitung.
– Kann ich auch einen Server im Internet nutzen, oder geht das nur innerhalb eines LAN?
– Wird immer ein volles Backup angelegt, oder kann ich sagen, dass jedes 3. Backup ein vollständiges ist und die anderen nur die Änderungen jeweils speichern? So könnte ich Speicher sparen und oder häufiger sichern…

Vielen Dank

Martin

    Lukas · 23. April 2019 um 21:31

    Hallo Martin,

    das Skript ist explizit dazu gemacht, innerhalb des LANs Sicherungen anzulegen. Sicherlich lässt sich das Skript auch anpassen, um damit einen Server woanders zu nutzen.
    Was man machen könnte wäre eine VPN-Verbindung zum Remote-Server herzustellen und dessen Laufwerk einzubinden. Das Skript nutzt hierfür cifs.

    Zu deiner zweiten Frage:
    Es werden immer volle Images angelegt. So gesehen befindet sich die komplette Festplatte des Raspberry Pi (also die SD-Karte) als Abbild auf dem NAS. Damit der Speicher nicht überläuft werden maximal 5 Sicherungen behalten. Die Anzahl kannst du auch runtersetzen. Dann wird weniger Speicher in Anspruch genommen.
    Eine inkrementelle Sicherung (also die veränderten Dateien) ist vom Skript nicht vorgesehen.

    Wenn du also tatsächlich auf einem Remote-Server eine inkrementelle Sicherung machen möchtest, müsste man hierfür ein eigenes Skript schreiben.

Sebastian · 19. Dezember 2018 um 10:13

Hallo, vielen Dank für diesen tollen Beitrag. Das automatische Back-up finde ich super nützlich. Allerdings musste ich leider feststellen, dass alle SD-Karten unterschiedlich viele Blöcke haben und sich dadurch ein Back-Up lediglich auf die vorher verwendete SD-Karte zurückspielen lässt oder aber man muss eine größere SD-Karte verwenden. Hast Du für dieses Problem evtl. auch eine Lösung?
Viele Grüße
Sebastian

    Lukas · 20. Dezember 2018 um 08:10

    Hallo Sebastian,

    ich muss leider zu meinem Nachteil zugeben, dass ich dieses Backup bislang noch nicht wieder eingespielt habe (Zeitgründe). Allerdings gehe ich sehr stark davon aus, dass die SD-Karte genauso formatiert sein muss, wie die gesicherte Karte. Sprich gleiche Blöcke usw.
    Von der Größe her muss es eine mindestens genauso große SD-Karte sein, das ist soweit richtig.
    Was man allerdings machen kann ist, dass man das Backup über eine virtuelle Maschine auf eine kleinere Karte überträgt. Das ist zwar sehr umständlich, sollte aber möglich sein.

    Es gibt allerdings auch noch andere Arten von Backups, so dass man wirklich nur bestimmte Daten sichert und nicht die komplette Karte. Dann würde dieses Problem gar nicht erst aufkommen.

    Gruß Lukas

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.