Raspberrymatic – EINFACHE automatische Sicherung auf USB-Medium

Bereits seit der RaspberryMatic Version 2.27.8.20170410 gibt es die Möglichkeit, Backups nicht nur über die WebUI durchzuführen. Es ist seit dieser Version möglich über eine SSH-Verbindung ein Linux Programm per Kommando auszuführen. Hierbei wird eine Standard *.sbk Backupdatei auf der internen Micro-SD-Card erzeugt. Eine gute Idee wie ich finde, jedoch mit dem Problem, das der Backup auf der internen Micro-SD-Card erstellt wird. In diesem Artikel beschreibe ich, wie ihr mit Onboard Mitteln von RaspberryMatic eine automatische Sicherung auf einen an der Raspberry angeschlossenen USB-Stick realisieren könnt.

Bedeutung einer Sicherung

Viele Anwender von Computern oder SmartPhones haben schon die bittere Erfahrung gemacht was es bedeutet, wenn man seine Daten nicht gesichert hat. Das tut richtig weh und im schlimmsten Fall sind unwiederbringliche Dateien (Fotos) für immer verloren.

Da ich beruflich in der IT tätig bin und weiß wieviel Aufwand und Geld in eine sichere Backup-Lösung investiert wird, halte ich das auch für eine HomeMatic Installation für sehr wichtig.

Ich habe mir daher angewöhnt, vor allen Änderungen an meinem System (neue Aktoren oder Programme) eine Sicherung durchzuführen. Ebenso nach der durchgeführten Änderung. Somit habe ich immer einen Aufsetzpunkt, zu dem ich im Problemfall zurück kehren kann. Diese Vorgehensweise hat sich schon mehr als einmal bewährt.

Das eigentlich Problem dabei ist, immer daran zu Denken eine Sicherung durchzuführen. Hinzu kommt noch, das der Anwender die Sicherung manuell in der WebUI anstoßen muss.

Aus diesem Grund habe ich mir eine EINFACHE automatische Lösung erstellt und möchte euch diese hier beschreiben.


Voraussetzungen

Um die hier beschriebene Lösung umzusetzen benötigt ihr folgende Komponeten:

  • RaspberryMatic (ab Version 2.27.8.20170410)
  • USB Stick, USB SSD oder USB Festplatte
  • RaspberryMatic AddOn CuxD

Allgemeines

Es gibt im Netz bereits einige Lösungen um die Daten von HomeMatic automatisch auf einer NAS (Network Access Storage) zu sichern. Da nicht jeder Anwender von RaspberryMatic auch im Besitz einer NAS ist, habe ich hier eine einfache Möglichkeit für einen Backup der HomeMatic Daten anzubieten.

Es ist keine NAS erforderlich, lediglich ein USB Medium, welches einfach in einen der USB Steckplätze der Raspberry Pi einzustecken ist. Dann ein kleines WebUI Programm schreiben, in dem wir ein Skript aufrufen (CuxD) und schon wird die Sicherung auf das USB Medium zum gewünschten Zeitpunkt durchgeführt.

Vorbereitung USB Medium

Ihr könnt an die Raspberry Pi unterschiedliche USB Medien anschließen. Es können USB-Sticks, USB-Festplatten oder eine USB SSD sein.

Voraussetzungen

  • Der USB-Speicher muss mit dem Dateisystem FAT/FAT32 oder NTFS formatiert sein.
  • Wenn gewünscht, ein entsprechendes Verzeichnis nach dem Formatieren anlegen. Am Besten noch auf dem Windows PC, dann ist es nicht notwendig den Weg über SSH im Linux zu gehen.
  • Wenn kein Verzeichnis angelegt wird, werden die Backup Dateien im Wurzelverzeichis des USB Mediums geschrieben.

Backup und Restore via SSH

Seit der Version 2.27.8.20170410 existiert in RaspberryMatic die Möglichkeit Backups, sowie den Restore von Backupdateien nicht nur über die WebUI durchzuführen, sondern diese auch mittels Kommandozeilenprogrammen (z.b. über eine SSH Verbindung) durchzuführen.

Backup Datei erstellen

Hierbei kann man eine Standard *.sbk Backupdatei mit folgendem Kommando erstellen: /bin/createBackup.sh <BACKUPDIR>

Standardmäßig wird ohne Angabe von <BACKUPDIR> durch diesen Aufruf dann im Verzeichnis /usr/local/tmp eine *.sbk Datei angelegt die man z.B. mit WINSCP von RaspberryMatic runterladen und entsprechend verwahren kann und die sich auch über das normale WebUI zurückladen lässt. Gibt man als ein anderes Verzeichnis an, so wird die Backupdatei dort abgelegt.

Restore einer Sicherung einspielen

Auch ein Restore der *.sbk Datei kann über die Kommandozeile (SSH) durchgeführt werden. Dazu kann man folgende Vorgehensweise anwenden:

  • Über SSH als root anmelden
  • Die gewünschte *.sbk Datei in das Verzeichnis /usr/local/tmp kopieren
  • Den folgenden Befehl ausführen:  /bin/restoreBackup.sh /usr/local/tmp/
  • RaspberryMatic neustarten (mit dem Befehl „reboot“ oder über die WebUI.

Nach dem Neustart funktioniert eure RaspberryMatic mit dem zurück gespielten Stand. Ich habe diesen Weg getestet, verwende aber die Lösung über WebUI für den Restore.

 Zusatzfunktionen in RaspberryMatic

Mit den beiden oben beschriebenen Programmen „createBackup“ und „restoreBackup“ habt ihr bereits zwei der zusätzlichen Funktionen in RaspberryMatic kennen gelernt. Damit funktioniert der Backup und das Restoren einwandfrei. Was ich ebenfalls sehr gut finde ist die Tatsache, das die Backupdatei mit den gleichen Namenskonventionen angelegt wird, wie es bei der Sicherung über die WebUI üblich ist.

Eine weitere sehr tolle Erweiterung ist das Programm „usbmount„. Dieses Feature ist seit März 2017 in RaspberryMatic eingebaut.

Auch bei einem Raspberry Pi macht es Sinn den Speicher erweitern zu können. Am besten eignen sich dafür USB-Sticks. Standardmäßig werden diese aber von Raspbian nicht automatisch erkannt und eingebunden. Mit „usbmount“ bekommen wir in RaspberryMatic die Möglichkeit, dass USB-Sticks automatisch eingebunden werden und dass darauf auch Dateien gespeichert werden können.

Mit Hilfe von „usbmount“ werden im Verzeichnis /media, wie im nachfolgenden Screenshot zu sehen ist, neue Verzeichnisse angelegt. Diese heißen von USB0 bis USB7.

Diese Verzeichnisse sind leer, solange sich dahinter kein USB-Stick verbirgt. Sobald wir einen USB-Stick in einen der USB-Slots einstecken, ändert sich das und wir können sehen, was sich auf dem USB-Stick befindet. Bei einem formatiertem Stick finden wir nur die „System Volume Information“.

Wenn wir den USB-Stick in den linken oberen USB-Slot stecken, erkennt RaspberryMatic automatisch, das in USB0 ein Stick eingesteckt wurde und wir bekommen den Inhalt im WINSCP angezeigt:

In den Screenshots könnt ihr auch sehen, das ein Raspberry Pi standardmäßig nicht über eine RealTimeClock (RTC) verfügt. Dadurch kommt es beim Hochfahren dazu, dass das Datum bis zur erfolgreichen Synchronisation mit einem NTP Server auf den 1.1.1970 gestellt ist. Dadurch kommt es teilweise dazu, das CCU Funktionen nur eingeschränkt funktionieren. Wie man ein solches RTC-Modul in einem Raspberry Pi innerhalb von RaspberryMatic in Betrieb nehmen kann, werde ich in einem separaten Artikel beschreiben

Voraussetzung CUx-Daemon

Da zur Steuerung des Backups Skripte verwendet werden, empfehle ich das AddOn CUx-Daemon (CUxD) zu verwenden. Es ist die deutlich bessere Methode um Systembefehle aufzurufen. Weil die Methode über „system.exec“ bei so etwas sehr schnell zu Problemen führt. Wie ihr das AddOn CUxD installiert und ein virtuelles Gerät einrichten könnt, habe ich im Artikel „AddOn CUx-Daemon (CUxD) – system.exec ersetzen“ beschrieben. Keine Sorge, das ist recht einfach.

Sicherung über WebUI Programm starten

Wie bereits aus anderen Artikeln bekannt, können wir über CuxD sehr unterschiedliche Befehle ausführen. So zum Beispiel „HTTP-Befehle“, aber eben auch den Aufruf von Programmen im Linux System.

Diese Fähigkeiten machen wir uns auch hier zu Eigen. Wir können dadurch die mächtigen Planungsmöglichkeiten der WebUI als Startbedingung nutzen und müssen das nicht über einen „cronjob“ im Linux einrichten.

Nachfolgend seht ihr das Programm, mit welchem ich täglich nachts um 2 Uhr eine Sicherung meiner HomeMatic Zentrale auf den USB-Stick durchführe.

Wie ihr oben sehen könnt, ist das Programm wirklich sehr einfach gehalten. Ausgelöst wird es täglich um 2 Uhr. Die Verzögerung von 30 Sekunden habe ich eingebaut, weil ich zur vollen Stunde bestimmte Aktionen in RaspberryMatic durchführe. Als Aktion wird ein kleines Skript ausgeführt mit nur einem CuxD Befehl. Wir rufen das Programm „createBackup“ auf und geben als Zielverzeichnis wie oben beschrieben über /media/usb0 den entsprechenden USB-Stick an.

Nachfolgend das Skript zum kopieren:

Test der Sicherung

Wir können natürlich diesen Befehl auch testweise über SSH absetzen. Ich verwende dazu nicht PUTTY, sondern lieber WINSCP, da ich dort eine angenehmere Benutzeroberfläche habe. Dazu bitte den folgenden Befehl absetzen:

/bin/createBackup.sh /media/usb0

Es dauert dann je nach Umfang der Installation ein paar Sekunden. Dann könnt ihr über WINSCP im Verzeichnis /media/usb0 nachschauen und seht dort die erstellte Sicherung:

Wie oben schon mal beschrieben hat die Sicherungsdatei die gleiche Namenskonvetion wie die Sicherungen, welche über die WebUI erstellt werden.

Auslastung des USB-Sticks

Ich habe in meinem Fall einen USB-Stick mit einer Kapazität von 16GB im Einsatz.

Nach Erstellung von 40 Sicherungen (bei täglich einer Sicherung) über Mit „usbmount„twas mehr als einen Monat habe ich mal eine Abfrage gemacht, um die Auslastung des USB-Sticks anzuzeigen. Dies könnt ihr mit dem nachfolgenden Befehl selbst durchführen:

df -h /dev/sda1

Wie ihr sehen könnt, habe ich nach der täglichen Sicherung von etwas mehr als einem Monat lediglich eine Auslastung von 1%. Damit sollte die Speicherkapazität kein Problem darstellen und es lassen sich viele Monate sichern.

Restore über WebUI durchführen

Wenn ihr den Restore nicht über SSH durchführen möchtet, dann ist es auch keinerlei Problem den USB-Stick aus der Raspberry Pi zu entnehmen und in euren PC einzustecken. Damit habt ihr die Möglichkeit über den gewohnten Weg mittels WebUI die gewünschte Sicherung zurück zuspielen.


Danach könnt ihr den USB-Stick wieder in die Raspberry Pi stecken und euer Backup Szenario läuft wie geplant weiter.

Weitere Optionen

Zur Zeit teste ich noch zwei weitere Skripte. Zum einen um die Auslastung des USB-Sticks in eine HomeMatic Variable zu schreiben. Diese möchte ich dann auswerten und eventuell auch auf dem Startbildschirm anzeigen.

Mit dem zweiten Skipt möchte ich Sicherungsdateien, welche ein bestimmtes Alter erreicht  haben, automatisch gelöscht werden. Damit kann dann sicher gestellt werden, das der Backup nicht mehr funktioniert, weil der USB-Stick voll ist.

Sobald ich diese Skripte produktionsreif habe, werde ich im Blog darüber berichten.

Fazit

Ich führe auf diese Art und Weise nun schon eine Weile täglich meine Sicherung der HomeMatic Zentrale durch. Bisher hat es alles perfekt funktioniert und ich habe auch testweise schon mehrfach einen Restore durchgeführt.

Sicherheit USB-Stick

Da auf dem USB-Stick ja keine hohe Anzahl von Schreibvorgängen stattfindet, sollte das auch keinerlei Problem darstellen. Aus meiner Sicht ist für diese Anwendung ein USB-Stick völlig ausreichend. Eine Festplatte oder eine SSD ist glaube ich überproportioniert.

Doppelte Sicherung

Wenn jemand auf absolute Sicherheit setzen möchte, könnte er beispielsweise auch einen zweiten USB-Stick in einen weiteren Slot der Raspberry stecken und dort eine weitere Sicherung ablegen. Somit hat man dann quasi eine doppelte Sicherung auf unterschiedlichen Medien realisiert und erfüllt damit dann sehr hohe Sicherheits Anforderungen.

Was mich an dieser Lösung wirklich begeistert ist die Tatsache, das bis auf einen USB-Stick keine weitere (teure) Hardware benötigt wird und auch die komplette Software bereits im RaspberryMatic vorhanden ist. Vielen Dank dafür.

Viel Spass beim Ausprobieren und dem guten Gefühl, eure Daten gesichert zu haben.

Passende Beiträge


8 Kommentare

  • Michael

    22. Februar 2018

    Hallo!

    Zwei Fragen zu den Sicherungskopie-Dateien:
    1. Die „normale“ Systemsicherung über das das WebGUI der Homematic („Backup erstellen“) hat eine Grüße von 7 bis 8 MB, die „automatische“ Systemsicherung über das Skript ist 15 MB groß. Beide sind heute erstellt.
    Woran liegt es?

    2. Auf dem MAC ist das Dateisymbol der „normale“ Systemsicherung ein Blatt mit Faltecke, das Dateisymbol der „automatischen“ Systemsicherung sieht aus wie das Terminal-Fenster.
    Was ist der Unterschied?

    Vielen Dank und viele Grüße
    Michael

    Antworten
    • Werner

      Werner

      22. Februar 2018

      Hallo Michael,

      das kann ich leider nicht beantworten, da bei mir die Backups die gleiche Größe aufweisen. Ich schicke dir nachher mal per Mail einen Screenshot zu.

      Zu den Dateisymbolen auf der MAC Seite muss ich ebenfalls passen, da ich keinen MAC besitze und die Mimik nicht nachvollziehen kann.

      Grüße
      Werner

      Antworten
  • Tom

    13. Februar 2018

    Hallo Werner vielen Dank für deinen tollen Beitrag. Hast du das kleine Script auch als „Text“ zum kopieren. Dann muss man diesen nicht abtipppen und vermeidet Fehler.
    Vielen DANK TOM

    Antworten
    • Werner

      Werner

      13. Februar 2018

      Hallo Tom,

      Danke für deine Frage. Ich habe den Artikel um den entsprechenden Code ergänzt. Diesen kannst du nun einfach kopieren und bei dir einsetzen.

      Gruss
      Werner

      Antworten
    • TOM

      13. Februar 2018

      DANKE für die schnelle Umsetzung

      Antworten
  • Mathias

    10. Februar 2018

    Hi Werner,
    vielen Dank für die Info!
    genau so habe ich es auch gemacht.
    Ich habe nur zusätzlich die CuxD devlogfile auf dem gleichen USB-Stick abgelegt.
    Mir wäre es lieber, wenn man nur 3 oder 4 Backups auf dem Stick hätte. Die vorgehenden sollten automatisch gelöscht werden. Es wird ja bei einem crash oder bei einem Update sowieso das letzte Backup eingespielt.

    Antworten

Schreibe einen Kommentar