Alte Backups löschen auf der Synology

Synology NAS-Systeme bieten hervorragende Möglichkeiten um als Backupziel zu dienen. Natürlich kann das NAS auch einiges mehr.

Nachfolgend möchte ich beschreiben, wie über den in der aktuellen Version 5 integrierten Aufgabenplaner und ein kleines sh-Script, relativ einfach alte Dateien und/oder Backups gelöscht werden können.

Sicherlich gäbe es noch bessere Möglichkeiten. Für mich als Kommandozeilen Neuling ist dies allerdings fast schon Magie. Aber nun zur Anleitung

Das sh-Script:

find /pfad/zu/dem/uebergeordneten/Ordner/* -mtime 0 -exec rm -rf {} \;

Das obige Script scannt mit dem find-Befehl das angegebene Verzeichnis. Der * ist insofern wichtig um dem Befehl find zu sagen, dass sämtliche Unterordner und Dateien gemeint sind.
Mit der Option -mtime übergibt man die Zeit in Tagen. Weitere Optionen sind möglich und können hier nachgelesen werden.
Der weitere Befehl -exec mit der Option rm -rf führt eigentlich nichts anderes aus als direkt alles inkl. Unterverzeichnisse ohne Nachfrage zu löschen. Die runden Klammern und der Backslash beenden lediglich den exec – Befehl.

Das Script muss nun lediglich auf der Synology abgelegt werden. Aufgrund der Möglichkeit verändert und ausgeführt zu werden, sollte dies in einem Ordner passieren, welcher lediglich durch den Admin zugänglich ist. Die Datei sollte als dateiname.sh gespeichert werden.

Die Einstellungen in der Synology Diskstion:

Um zu überprüfen, ob das Script auch funktioniert, sollte an einem „ungefährlichen“ Ort mit Testdaten getestet werden. Über die Einstellungen der Synology NAS-Station ist der Aufgabenplaner erreichbar.

Das Erstellen einer Aufgabe ist über den Punkt erstellen möglich.

synology-benutzerdefiniertes-script

Um das Shell-Script ausführen zu können, muss über den Menüpunkt „Benutzer-definiertes Skript“ angeklickt werden. In der hiernach folgenden Maske gibt es die Möglichkeit einen Namen zu vergeben. Als Benutzer sollte der Administrator oder root-User ausgewählt werden um nicht durch etwaige Rechteschwierigkeiten in Probleme zu kommen. synology-aufgabe-erstellenIm unteren Bereich des Formulars ist dann das Script mit absolutem Pfad einzugeben. Diesen kann man über den Filemanager durch einen Rechtsklick-> Eigenschaften auf das entsprechende Script heraus finden.

synology-aufgabe-erstellen-zeitplan

Sobald das erledigt ist, können wir uns daran machen, den Zeitplan zu erstellen. Diese Optionen sollten selbsterklärend sein. Die Ausführung sollte ca. 1 Stunde vor der Datensicherung anberaumt werden, da durch die Löschaktion vorher mehr Platz zur Verfügung steht. 😉

Wichtig ist, einfach, dass vor einem Produktivbetrieb getestet wird.

Die Übersicht der bereits angelegten Aufgaben untenstehend.

Aufgabenplaner Synology

Wie im Bild oben zu sehen, wurde nicht nur der Pfad d. Scripts angegeben, sondern auch die Ausgabe eventueller Fehler in eine Textdatei umgeleitet. Dies wurde meinerseits deshalb in der Form realisiert, da das Script in gewisser Form blind funktioniert. So erhält man die Möglichkeit etwaige Fehler direkt zu sehen und entsprechend reagieren zu können.

Nochmal kurz zusammen gefasst:

  • Script mit dateiname.sh anlegen und an einem Ort abspeichern, an welchem der normale Anwender keinen Zugriff hat.
  • Aufgabenplaner der Synology über die Einstellungen aufrufen
    • Erstellen eines benutzerdefinierten Scripts
    • Einstellen d. Zeitplans
  • Test d. Scripts an einer unkritischer Stelle und eventl. in einer virtuellen Linux-Maschine.

Erlärung – WICHTIG –

Für eventl. auftretende Datenverluste bin ich nicht verwantwortlich zu machen. Bitte immer vorher entsprechend an einem unkritischen System testen und vorher eine Datensicherung erstellen.

23 Antworten auf „Alte Backups löschen auf der Synology“

  1. Hi! Genau so was habe ich gesucht, da meine Webcam zig .mov Dateien anlegt und die alle 14 Tage weg sollen. Leider passier nach dem Anlegen des Scripts überhaupt nichts. Was kann ich tun?

    1. Hi Chris, wie groß sind die .mov Dateien? Durchaus kann es je nach Anzahl der Dateien und auch der der Unterordner sehr lange dauern. Bitte einmal vorher an einem Ordner testen, in welchem wenige Daten vorhanden sind.

      Was passiert, wenn du das Script manuell startest?

  2. Hallo 🙂

    Ich würde gerne einen Dienst oder eine Aufgabe einrichten, der mir alle Dateien, die älter als 7 Tage sind von einem Ordner auf der NAS löscht.

    Auf einem PC in der Windows-Welt geht das über Bat-Dateien bzw über eine „delete.exe“. Ein Dienst muss auch ein getragen werden.

    Wie mache ich das auf der NAS von Synology?
    In der „File Station“ sehe ich folgendes
    „Station 1“ -> Name der NAS
    Darunter die Odner, die ich angelegt habe
    „Bilder“
    „Filme“
    „Sicherungen“

    In dem Ordner „Sicherungen“ möchte ich nun alle Dateien löschen, welche älter als 7 Tage sind. Wie gehe ich da vor?

    Vielen DANK für die Hilfe
    Gruß Franz

    1. Hallo Franz,
      wie oben beschrieben kann man einen Job einrichten, welcher alle 7 Tage läuft und entsprechend die Daten, welche älter als X Tage sind.
      Das ungetestete Codebeispiel wäre dann:

      find /pfad/zu/dem/uebergeordneten/Ordner/Sicherungen/* -mtime 7 -exec rm -rf {} \;

      Das hat zur Konsequenz, dass sämtliche Unterordner durchforstet werden. Wenn hier natürlich eine iTunes-Datenbank liegt, mit 40.000 Dateien und mehreren Unterordnern, dauert das richtig lange. Daher sollte das in Etappen und Nachts durchgeführt werden. Beachte bitte, dass dieser Befehl nicht prüft, ob es neue Sicherungen mit den älteren Daten gibt. Sonst bringt dir die Sicherung dann nichts mehr.
      Bitte teste das auch mal an einem anderen Ordner und mache vorher eine Sicherung. 😉

  3. Hallo Marcus,

    danke für die Rückmeldung.

    Hier eine kleine Beschreibung der Datenströme.
    In den Ordner „Sicherungen“ werden einmal täglich (Nachts um 1Uhr) 12Dateien (2Stundensicherungen) abgelegt.

    Ich benötige im Ordner „Sicherungen“ aber nur die 2Stundensicherungen der letzten 7 Tage.
    Deshalb würde ich gerne eine automatische Anwendung haben, die mir zB um 2Uhr den Inhalt des Ordners „Sicherungen“ bereinigt um alle Dateien, die älter als 7Tage sind.

    Das mit dem Codebeispiel von dir ist gut.
    Allerdings weiß ich nicht wo ich den Code reinschreiben soll und wer mir die Code-Datei (um 2Uhr) aufruft.
    Ich kenne mich mit Synology nicht aus und deshalb kenne ich erstens die Code-Befehle nicht und zweitens die Aufruf-Möglichkeiten.

    Vor mir steht die NAS DS214.

    Ich habe es folgendermaßen versucht:
    Systemsteuerung
    Dateidienste
    Aufgabenplaner
    Hier habe ich ein „Benutzer- definiertes Script“ erstellt.
    Allgemeine Einstellungen:
    – Vorgang: Test_loeschen
    – Benutzer: root
    Befehl ausführen:
    – Benutzer- definiertes Script:
    find /volume 1/Sicherungen -atime -7 -type f -delete

    Den Zeitplan habe ich nicht bearbeitet.
    Ich habe diese Aufgabe immer manuel ausgeführt.

    Ich vermute, dass diese Vorgehensweise falsch ist und ich in der Aufgabenstellung vermutlich erst eine Skript-Datei aufrufen muss, deshalb hier auch meine Fragestellung.

    Auch das „Benutzerdefiniert“ ist vermutlich nicht richtig.
    Die NAS läuft vor sich hin und es werden nur Daten zur Sicherung draufgeschrieben, deshalb sollte das Skript zur Löschung eingentlich Benutzerunabhängig laufen.

    Ich hoffe du kannst mir mit den gemachten Angaben dennoch weiterhelfen.
    Vielen DANK
    Gruß Franz

    1. Hallo Franz,
      du hat in deinem Script

      find /volume 1/Sicherungen -atime -7 -type f -delete

      stehen. Dies ist leider nicht ganz so korrekt. Richtig(er) wäre:

      find /Volume1/Sicherungen/* -mtime 7 -exec rm -rf {} \;

      diese Zeile kannst du als deinwunschdateiname.sh abspeichern und wie oben in den Screenshots entsprechend einbinden.
      Wie immer gilt: Bitte ein Backup erstellen, bevor du etwas (unwiederruflich) löschst. 😉

  4. Vielen dank!
    Hat gut funtkioniert. Endlich hört das manuelle Löschen auf!
    Ich war schon lange am suchen und rumprobieren aber klappte nicht. Jetzt schon.

    DANKE!

  5. Hallo Marcus,

    ich habe das Script unter dem Dateinamen loeschen.sh unter folgendem Pfad gespeichert: /volume1/Script/loeschen.sh

    Das Script sieht so aus:
    find /volume1/Webcam/* -mtime 1 -exec rm -rf {} \;

    Es soll mir innerhalb des Ordners Webcam alle Bilder löschen die älter als 1 Tag sind.

    Habe dann einen Zeitplan erstellt mit einem benutzerdefinierten Skript erstellt: /volume1/Script/loeschen.sh

    Aber irgendwie funktioniert das nicht.

    Wo liegt mein Fehler?

    Danke schonmal.

    1. Hallo Philipp,
      du solltest beim Parameter -mtime nicht die 1 nehmen, sondern +1. Hierdurch wird alles gelöscht, was älter als ein Tag ist und nicht zwischen 1 und 2. 😉 Denn Zeit ist relativ und zwischen 1 und 2 passt nicht allzu viel.

      Versuche aber auch einmal am Ende des Dateinamens nach einer Leerzeile >& /volume1/Script/logfile.txt anzufügen. Hierdurch wird eine (nicht angezeigte) Fehlermeldung direkt in lofile.txt geschrieben. Allerdings auch die Pfade und Dateinamen der Dateien und Ordner welche gelöscht wurden.

  6. Hallo Markus,

    habe nun +1 hinzugefügt.

    Und ein logfile.txt erstellen lassen.
    Leider löscht es mir was noch steht etwas in dem Logfile.txt. drin.
    Es wird erstellt aber ohne Inhalt.

    1. Hallo Philipp,
      sehr komisch. Was passiert, wenn du das direkt über das Terminal ohne Script versuchst? Also die Befehle über den aktivierten SSH Zugang in der Diskstation direkt eingibst? (unter Windows mit Putty verbunden und unter Linux direkt mit ssh USERNAME@NAME-DER-DISKSTATION)
      Evtl. werden hier direkt auch schon Fehler ausgegeben.

  7. Hi Marcus,

    ich möchte auf meiner Festplatte, die an meiner FritzBox angeschlossen ist, Ordner löschen, die älter als x-Tage sind.
    Leider habe ich schon alles versucht. 🙁

    find //Fritzbox/fritzbox/WD-Elements10B8-01/test/* -mtime +5 |xargs rm -rf
    oder
    find //Fritzbox/fritzbox/WD-Elements10B8-01/test/* -mtime +5 -delete

    Als Fehlermeldung wird mit immer folgendes ausgegeben:
    find: `//Fritzbox/fritzbox/WD-Elements10B8-01/test/*‘: No such file or directory
    oder aber auch:

    find: missing argument to `-exec‘
    find: missing argument to `-delete‘

    Egal, was ich anstelle, ich komme einfach nicht zum Ergebnis.
    Daten auf der Synology per Script zu löschen funktioniert super, aber halt nicht bei mir im Netzwerk.
    Hast Du eventuell einen Tip für mich?

    1. Hallo Kevin,

      Führst du das von deiner Synology aus? Wenn ja, versuche mal via ssh von der Synology eben jenes Verzeichnis mit cd zu betreten. Sehr wahrscheinlich geht das nicht, da das Verzeichnis nicht vorhanden ist.

      Der Pfad sieht zudem nach einer Windows eingebundenen Freigabe aus. Unter *nix Betriebssystemen sind Volumen/Freigaben meist unter einer anderen Verzichnisstruktur zu finden.

      Die Fritzboxfreigabe muss zwingend von der Synology oder Rechner eingebunden sein, sonst kannst du das nicht löschen.

      Grüße
      Marcus

      1. Hi Marcus,

        Erst einmal vielen Dank für die schnelle Rückmeldung!

        Leider ist es mit meinen Linux Kenntnissen nicht weit her.
        Ich habe versucht die Fritzboxfreigabe zu mounten:
        mount -t cifs -o username=xxx,password=xxx //192.168.178.1/fritzbox/WD-Elements10B8-01/test /volume1/test

        Dabei erhalte ich folgenden Fehler:
        mount: mount point /volume1/test does not exist

        Diesen Ordner gibt es aber auf meiner NAS.
        Muss ich auf meiner NAS noch etwas anderes einstellen?

        1. Hallo Kevin,

          hm, Volume1 ist das eigentliche interne Volument/Laufwerk der Diskstation. Ich bin mir jetzt nicht sicher, in wieweit hier direkt rein gemounted werden kann.
          Extern angeschlossene Laufwerke tauchen als /Vokume1USB auf.
          Auf der englischen Dokumentation habe ich allerdings einen Artikel bezüglich deines Wunschs gesehen. Du kannst via Filexplorer auf der Diskstation direkt eine CIFS Freigabe mounten. (https://www.synology.com/en-global/knowledgebase/DSM/help/DSM/FileBrowser/mountremotevolume) Leider funktioniert das nicht bei jeder Diskstation. Wenn deine Diskstation das unterstützt, hast du direkt die Möglichkeit das via dieser Option einzubinden und hier via bash drauf zu zugreifen.

  8. Hallo Marcus,
    habe externe USB3 RDX Wechselplatte 3 TB an einer DS916+ und bekomme den Pfad so wie du schreibst nicht hin. Habe 1 Platte mit USBshare1 und die andere USBshare2 zur externen täglichen Sicherung. HyperBackup löscht mir die Platten nicht bevor gesichert wird, daher wollte ich mit einem Script arbeiten. Da kam mir deine Hilfe entgegen. Per Aufgabenplanung eingestellt, aber siehe Fehlermeldung unten

    find //volumeUSB1/usbshare1/* -mtime 0 -exec rm -rf {} \;

    Sehr geehrter Benutzer,

    Aufgabenplaner hat eine geplante Aufgabe abgeschlossen.

    Aufgabe: loeschen alte backups
    Startzeit: Tue, 01 Nov 2016 11:04:45 GMT
    Stoppzeit: Tue, 01 Nov 2016 11:04:45 GMT Aktueller Status: 1
    Standardausgabe/Fehler:
    find: `//volumeUSB1/usbshare1/*‘: No such file or directory

    Mit freundlichen Grüßen
    Synology RackStation

    Hast du eine Idee ? Danke !!

    1. Hallo T. Hammer,
      bitte entschuldige die späte Antwort.
      Ja, ich könnte mir vorstellen, dass der Pfad nicht stimmt. Es ist ein / zu viel.

      Den Pfad bekommst du recht einfach raus, indem du im FileManager der Verwaltungsoberfläche schaust und im linken Fenster nach usbshare schaust. Mit der rechten Maustaste draufklicken und Eigenschaften auswählen. Schon hast du den Pfad.

  9. Hallo Marcus,

    super Anleitung und funktioniert total gut. Nur wie schaut das ganze aus, wenn ich keine Dateien sondern Ordner löschen möchte?

    Bei mir ist es so: /volume1/COS-SICHERUNG/N2015022501/

    Geht das auch? Wenn ja, könntest du mir das Skript verraten?

    Viele Grüße und einen schönen 4ten Advent.
    Florian

    1. Hallo Florian,
      freut mich, wenn es funktioniert. 😀 Bitte entschuldige die späte Antwort.
      Deine Frage ist allerdings nicht ganz einfach. Willst du Ordner UND deren Inhalt oder lediglich leere Ordner löschen lassen?

      Müsste über beide Aufgabenstellungen etwas intensiver nachdenken.

      1. Hallo Marcus,

        danke für deine Antwort. Ich möchte immer den entsprechend ältesten Backup-Ordner samt Inhalt löschen.

        Das Kassenprogramm schreibt immer Ordner nach dem selben Schema mit zahlreichen Unterordnern und Dateien. Daher sollten im Hauptordner /volume1/COS-SICHERUNG/ „einfach“ alte Ordner gelöscht werden, die man anhand des Zeitstempels selektiert.

        Gruß Florian

Schreibe einen Kommentar

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