zurück zur Startseite

zurück zur Übersicht der Heimautomatisierung

6. Die Datensicherung (Stand 07.11.2018)

In FHEM darf man nicht vergessen, die Eingaben zu sichern, aber das "save config"-Kommando sichert die Daten nur auf dem lokalen Speicher des Raspberry. Wenn man eine ernsthafte Automatisierung betreiben möchte, bedarf es einer besseren Absicherung. Ich sehe hier 3 Anforderungen:

Um einfach nur bestimmte Dateien oder Verzeichnisse auf einem PC zu kopieren, genügt es eine Verbindung gemäß Kapitel 5 zu haben.

Am einfachsten ist ein zusätzlicher Speicher neben der SD mit einem kleinen USB-Stick zu realisieren. Mit ein paar wenigen Kommandos kann man dem Raspberry beibringen, einen USB-Stick zu erkennen.

sudo apt-get install usbmount
sudo vi /etc/usbmount/usbmount.conf
# dann nach der Zeile FS_MOUNTOPTIONS="" suchen und ändern in
# FS_MOUNTOPTIONS="-fstype=vfat,gid=users,dmask=0007,fmask=0117" und abspeichern
sudo reboot

Nun wird ein USB-Stick automatisch dem Anwender nutzbar gemacht, wenn man ihn steckt. Am besten ist, man nimmt einen ganz kleinen (Nano-)USB-Stick, den man für Linux (ext4) formatiert hat, denn die Dateirechte sollen mitgenommen werden.

Dieser kann die ganze Zeit gesteckt bleiben. Praktischerweise richtet man noch 2 Verzeichnisse ein:

Die Logdateien werden in ein Standardverzeichnis geschrieben. Nun gibt es Gründe, dass man das ändern möchte: der wichtigste ist wohl, dass man die permanenten Schreibzugriffe auf die microSD des Raspberry verhindern sollte, weil ein Defekt der SD das gesamte System lahm legt. Deshalb ist es besser, wenn man diese auf einer separaten Hardware, z.B. USB-Speicher, ablegt. Man erreicht das wie folgt:

attr global logdir /media/usb0/log
attr global logfile /media/usb0/log/fhem-%Y-%m.log
attr global statefile /media/usb0/log/fhem.save
attr global archivedir /media/usb0/log
attr global nrarchive 4
attr autocreate filelog /media/usb0/log/%NAME-%Y.log

Nun werden alle Logdateien dort abgelegt, die Zieladresse muss ggf. angepasst werden. Die Anzahl der Logdateien im Archiv habe ich durch das letzte Attribut narchive begrenzt.

Das Synchronisieren kann man wie folgt erledigen lassen, wenn man sich wieder über ssh eingeloggt hat:

sudo rsync -av /opt/fhem /media/usb0/sync
# muss unbedingt mit sudo ausgeführt werden, um die Dateirechte zu wahren
# es wird im Verzeichnis sync ein Unterverzeichnis "fhem" angelegt, wenn noch nicht vorhanden

Damit ist nun der komplette Inhalt des Ordners /opt/fhem auch auf /media/usb0/sync. Wenn man also einmal die Sicherung wieder einspielen muss, dann geht das ganz einfach mit

sudo rsync -av /media/usb0/sync/fhem/ /opt/fhem
# muss unbedingt mit sudo ausgeführt werden, um die Dateirechte zu wahren
# man beachte den / direkt nach dem ersten fhem
# zuvor sollte das Verzeichnis /opt/fhem auf dem Raspberry aber komplett leer sein
# was man mit folgendem Befehl erreichen kann
rm -r /opt/fhem/*

Man könnte das Ganze natürlich automatisieren, aber ich bin zu dem Entschluss gekommen, dass das nicht notwendig ist. Ach ja, noch ein Hinweis: während dem Synchronisieren sollte FHEM natürlich nicht laufen. Wie das geht steht im nächsten Kapitel 7.

Damit wäre der erste Punkt erledigt und wir wenden uns dem nächsten zu.

Auch wenn es bei mir noch nicht vorgekommen ist: Irgendwann wird die SD-Karte mit dem ganzen Linux, FHEM, etc. kaputt gehen. Da wäre es doch gut, wenn man eine fix und fertige Ersatzkarte einfach einstecken könnte. Dazu braucht man aber zuerst einmal ein Image, welches man regelmäßig, zumindest aber nach jeder größeren und wichtigen Änderung erzeugen muss.

Dazu fährt man den Raspberry mit

sudo shutdown -h now

herunter, entnimmt die SD-Karte und steckt sie mittels passendem Adapter an einen Linux-PC. Das Device, unter welchem die SD-Karte im Linux-PC bekannt ist, findet man z.B. über

df -h

Am besten man gibt das Kommando ein bevor(!) man die SD-Karte in den PC gesteckt hat und dann ein 2. Mal danach. So kann man genau erkennen, welches die Karte ist. Ein Fehler bei der folgenden Arbeit könnte sehr schwerwiegende Folgen haben. Bei meinem PC habe ich die 2 Partitionen auf der Karte mit sdb1 und sdb2 auf dem PC erhalten. Entsprechend kann man nun das Image erzeugen:

sudo umount /dev/sdb1
sudo umount /dev/sdb2
sudo dd if=/dev/sdb of=/home/user/MyImage
# hier nur sdb ohne Ziffer!

Damit wird auf dem Heimatverzeichnis des Linuxusers die Datei MyImage abgelegt. Bei 8GB dauert das schon ein Weilchen (bei mir ca.1 Stunde!). Noch 2 wichtige Hinweise: Wir wollen die gesamte SD-Karte als Image und nicht die einzelnen Partitionen darauf. Deshalb also (im Beispiel) "sdb" und nicht "sdb1" (oder eine andere Zahl). Außerdem sind die SD unterschiedlich groß, nicht viel aber dennoch. Das zu große Image passt dann ggf. nicht auf die etwas kleinere SD. Nach dieser Erfahrung habe ich einfach die Partition, auf der FHEM installiert ist, um 100MB verkleinert.

Ich habe vor dem Erstellen des Image mein FHEM-Grundsystem noch etwas aufgeräumt: Alle bisherigen FHEM-Elemente habe ich dem Raum "Zentrale" zugeordnet, bis auf das Logfile, welches ich in den Raum "Diagnose" gesteckt habe. Damit ich FHEM bequem mit einem Mausklick stoppen und gleich wieder starten kann (reboot von FHEM) habe ich noch folgendes eingegeben:

attr WEB menuEntries Neustart,cmd=shutdown+restart

Damit erscheint im Browserfenster links ein Menüeintrag, der den Neustart auslöst.

Das Bespielen einer neuen (jungfräulichen) SD-Karte mit dem Image ist genauso einfach:

sudo dd if=/home/user/MyImage of=/dev/sdb

Für diesen Vorgang das Image zu erstellen muss man zwar den Raspberry und damit die gesamte Automatisierung abschalten, aber das ist eher nur notwendig, wenn man Änderungen außerhalb FHEM gemacht hat. Solange Änderungen nur in FHEM gemacht werden, genügt es, wenn man nach dem Erzeugen des Image nur noch das Verzeichnis /opt/fhem synchronisiert.

weiter zu: 7. Die kleinen Hilfen