,

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).

Auflistung der vorhandenen Sicherungsdateien auf USB-Stick

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.

Auflistung der Dateien älter als 3 Tage

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!

Warnhinweis

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.

Hier wird gezeigt, welche Dateien gelöscht worden sind

Zum Abschluß schauen wir jetzt über WINSCP nochmal auf unseren USB-Stick und sehen dort nur noch die drei aktuellsten Sicherungsdateien.

Ziel erreicht !

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.

4 Kommentare
  1. Dirk
    Dirk sagte:

    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

    Antworten
  2. Mathias
    Mathias sagte:

    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.

    Antworten

Hinterlasse einen Kommentar

An der Diskussion beteiligen?
Hinterlasse uns deinen Kommentar!

Schreibe einen Kommentar zu Mathias Antworten abbrechen

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