Raspberrymatic – EINFACHE automatische Sicherung auf USB-Medium – alte Backups automatisch löschen
In meinem letzten Artikel „Raspberrymatic – Einfache automatische Sicherung auf USB Medium“ habe ich beschrieben, wie es möglich ist mit RaspberryMatic ein sicheres Backup-Verfahren aufzubauen. Es sind seitdem mehrere Fragen bei mir eingegangen, ob und wie es möglich ist automatisch alte Sicherungsdateien zu löschen. Aus diesem Grund habe ich getestet, wie das umzusetzen ist. Das möchte ich in diesen Artikel beschreiben.
Ausgangsituation
Wie im oben genannten Artikel beschrieben sind die Sicherungsdateien auf dem USB-Stick abgelegt worden. Im Sicherungsverfahren führe ich täglich um 02:00 Uhr nachts den Backup der HomeMatic Daten durch. Ich nehme mal das Szenario, welches Mathias in seinem Kommentar geschrieben hat als Ziel, welches es zu erreichen gilt. Er möchte Sicherungsdateien, welche älter als drei Tage sind, automatisch löschen.
Benötigte Hardware
Amazon | eBay | ELV | |
Raspberry Pi3 | Link | Link | Link |
Bausatz-Funkmodul | Link | Link | Link |
microSD Karte | Link | Link | Link |
Gehäuse | Link | Link | Link |
Gehäuse für HS | Link | Link | Link |
Netzteil für HS | Link | Link | Link |
USB für Netzteil HS | Link | Link | Link |
externe Antenne | Link | Link | — |
Umsetzung
Ich zeige in diesem Artikel Befehle, welche ich über WINSCP (SSH-Verbindung) eingegeben habe. Diese Befehle wie auch die Screenshots aus WINSCP verwende ich zur Erklärung der einzelnen Schritte bis hin zur fertigen Lösung.
Letzlich ist es aber nicht notwendig, über SSH irgendetwas zu definieren. Das automatische Löschen der 3 Tage alten Sicherungsdateien erfolgt über ein WebUI Programm mittels eines Skriptes (CuxD). Mit diesem Skript führen wir die erfoderlichen Linux Befehle aus.
Suchen der zu löschenden Dateien
Um in unserem Beispiel Dateien, welche älter als 3 Tage sind zu finden, verwenden wir den Linux Befehl „FIND“ mit diversen Parametern.
Für unseren Test habe ich mal einige Sicherungen auf dem USB-Stick angelegt (siehe Screenshot).
Um nun zu ermitteln, welche Dateien älter als 3 Tage sind, geben wir den folgenden Befehl ein:
find /media/usb0 -iname homematic-RaspberryMatic*.sbk -mtime +3
Erklärung des Befehls:
- find = Kommando zur Suche von Dateien oder Verzeichnissen
- /media/usb0 = Verzeichnis des USB-Sticks, wo die Dateien abgelegt sind
- -iname = Sucht nach „dateiname“ und ignoriert Groß- und Kleinschreibung
- homematic..*.sbk = Damit grenze ich die Suche auf die Backup Dateien ein (Wichtig, damit nicht versehenlich andere Dateien zum Löschen übergeben werden)
- -mtime = Sucht Dateien, die seit mehr oder weniger als „zeit“ Tagen nicht mehr verändert wurden
- +3 = Dies ist der „zeit“-Parameter für „-mtime“
Die Ausgabe dieses Befehles sollte dann so aussehen, das die Dateien angezeigt werden, welche seit mehr als 3 Tagen nicht geändert wurden, also älter als 3 Tage sind.
Im Screenshot sehen wir ausschließlich die Dateien, welche älter als 3 Tage sind und somit zum Löschen vorgesehen sind. Vergleicht ihr die Auflistung mit dem ersten Screenshot, stellt iht fest, das die Dateien vom 08.02. bis 10.02. fehlen. Das sind die drei aktuellsten Sicherungen und diese sollen ja auf keinen Fall gelöscht werden.
Löschen der selektierten Dateien
Das schöne bei Linux ist, das wir Befehle kombinieren können. Das heißt konkret, die Dateien, welche wir durch den obigen Befehl ermittelt haben, können wir automatisch an den Befehl zum Löschen der Dateien übergeben.
Bevor wir weitermachen, möchte ich euch auf eine Gefahr hinweisen. Ihr sollten wirklich niemals den Löschbefehl „rm“ in Verbindung mit dem Parameter „-r“ verwenden!
Der Befehl zum Löschen von Dateien im Linux heißt wie oben schon verraten „rm“. Wenn wir das Suchergebnis unseres „find“ Befehles verwenden wollen, müssen wir folgenden Befehl verwenden:
-exec rm -f {} \;
Erklärung des Befehls:
- -exec = Kommando um ein Linux Programm aufzurufen
- rm = Hier handelt es sich um das eigentliche Programm zum Löschen
- -f = Heißt das keine Nachfrage zum Löschen erfolgt (never prompt)
- {} = Die geschweiften Klammern stehen für die aktuell gefundenen Dateinamen
- \; = Abschluß
Damit der Löschbefehl auch die vorher gesuchten Dateien löscht, müssen die beiden oben einzeln beschriebenen Befehle natürlich zu einem zusammen gefasst werden:
find /media/usb0 -iname homematic-RaspberryMatic*.sbk -mtime +3 -exec rm -f {} \;
Nachfolgend setze ich den gesamten Befehl über SSH ab. Dabei ergänze ich ihn noch um den Parameter „v“, anstatt „-f“ also „-vf“. „v“ steht für „verbose“, was soviel heißt wie ausführlich und führt dazu, das auf der Konsole angezeigt wird, welche Dateien gelöscht worden sind. Das ist später im WebUI Programm natürlich nicht mehr notwendig.
Zum Abschluß schauen wir jetzt über WINSCP nochmal auf unseren USB-Stick und sehen dort nur noch die drei aktuellsten Sicherungsdateien.
Damit haben wir mit einem Befehl unser Ziel erreicht und es existieren nur noch die drei aktuellsten Dateien auf unserem USB-Stick. Was noch fehlt, ist die automatische Durchführung dieses Löschvorganges. Das kommt im nächsten Schritt.
Automatisches Löschen über WebUI
Hierzu verwenden wir das schon bekannte Programm zur automatischen Sicherung unserer HomeMatic Daten und ergänzen dieses lediglich um einen weiteren Skriptaufruf.
Im Programm könnt ihr den zweiten Sktiptaufruf sehen. Ich habe diesen bewusst um 2 Minuten verzögert, um damit sicher zustellen, dass die neue Sicherung fertig und auf dem Stick abgelegt ist.
Hier das Skript zum Kopieren:
! --- Backupdateien älter als 3 tage löschen vom USB-Stick an USB-Schnittstelle USB0 --- ! --- (c) Werner Weber - Technikkram.net ! --- Löschen --- dom.GetObject("CUxD.CUX2801001:1.CMD_EXEC").State("find /media/usb0 -iname homematic-RaspberryMatic*.sbk -mtime +30 -exec rm -f {} \;");
Fazit
Damit ist der nächste Schritt eines komplett automatischen Sicherungs Szenario unserer HomeMatic Daten auf einer RaspberryMatic Installation fertig gestellt.
Im Beispiel habe ich natürlich dem Wunsch von Mathias entsprochen und bewahre maximal die drei aktuellen Backupdateien auf. Dies könnt ihr nach euren Vorstellungen anpassen, indem ihr einfach den Befehl dahingehend anpasst, und aus dem „+3“ zum Beispiel ein „+7“ macht, um so eine komplette Woche zu sichern.
Viel Erfolg beim Einrichten.
Hallo,
das automatische Löschen-Script im Webui-Programm funktioniert bei mir leider nicht. Wäre es vielleicht möglich, das Script so zu veröffentlichen, dass man es kopieren kann?
VG
Dirk
Hallo Dirk,
ich habe das Skript als Code zum Kopieren im Artikel eingefügt.
Gruss
Werner
Vielen Dank!!
Danke Werner!
das werde ich zeitig so umsetzen.
da ich nur jede Woche ein Backup mache, nämlich am Sonntag um 00:05, werde ich ein +14 anhängen. Dann bleiben mir 2 Backups, was meiner Meinung nach ausreichen müsste.