Hallo,
aktueller Anlass: Thema Änderung des Datenstandes während Netzwerksicherung
Da ich zur Vermeidung dieses Problems soeben ein Script erstellt habe will ich dieses hier kurz vorstellen.
Problembeschreibung:
Je nachdem was man sichern will kann sich das Problem stellen, dass man während der Sicherung auf die Daten nicht zugreifen darf, weil es sonst passieren kann dass das Backup abbricht oder dass die gesicherten Daten nicht konsistent sind, so dass das Backup evtl. unbrauchbar ist. Bei Filmen und Fotos stellt sich das Problem weniger, aber zum Beispiel bei Datenbanken oder Container-Dateien stellt es sich ggf. massiv.
Lösen kann man das Problem natürlich einerseits so dass man während der Sicherung den Zugriff auf die Daten vermeidet, aber je nach Anwendung kann das unmöglich oder zumindest lästig sein.
Daher habe ich nun folgenden Ablauf gewählt:
1.) Time Backup
Mit Time Backup führt man eine tägliche lokale Sicherung durch. Dies hat den Vorteil, dass man bei Time Backup direkt nach dem Start auf die Daten wieder zugreifen darf, denn Time Backup macht beim Start einen Snapshot vom Stand der Daten.
Wegen der sofortigen Datensicherheit macht man das Time Backup wenn möglich auf ein anderes Volume als das auf dem die Daten selber sind. Außerdem geht es auch schneller wenn man auf ein anderes Volume schreibt als man liest. Ist aber nicht zwingend.
Da Time Backup mit Hardlinks arbeitet, wird pro zusätzlicher täglicher Version nur der Speicherplatz für die geänderten Dateien benötigt. (Soweit sich nichts ändert bräuchten also selbst zehn Tagessicherungen nicht mehr Platz als eine.)
2.) Verschieben für Backup
Kurz nach Start des Time Backups wird - ebenfalls automatisch - mein Script gestartet.
Mein Script lässt die beiden letzten Versionen des Time Backups unangetastet:
- die letzte Version wird ja gerade erst erstellt
- die vorletzte Version wird ebenfalls nicht angetastet, dies ist sinnvoll damit Time Backup beim Erstellen der neusten Version die unveränderten Dateien nicht neu kopieren muss sondern mit Hardlinks auf die letzte Version arbeiten kann
Die drittletzte Version braucht Time Backup nicht mehr, die wird von meinem Script verschoben in einen Ordner von dem aus dann die normale Datensicherung laufen kann. Damit das Verschieben schnell geht muss dieser Ordner zwingend auf dem selben Volume sein wie das Time Backup.
Alle älteren Time Backup Versionen werden von meinem Script gelöscht.
Theoretisch ist der Startzeitpunkt für mein Script egal, auch wenn es ein paar Mal mehr oder weniger ausgeführt wird ist das unkritisch. Der Start 5 Minuten nach Start des Time Backups hat lediglich den Vorteil, dass dann der temporär maximal benötigte Speicherplatz am geringsten ist, weil zu Beginn eines neuen Kopiervorgangs alles überflüssige gelöscht wird.
3.) Normales Backup
Von dem Pfad auf den mein Script verschiebt startet man dann das normale Backup. Da das Verschieben (auf dem selben Volume) schnell geht, kann das zum Beispiel 10 Minuten nach Start meines Scripts sein.
Ich habe es so programmiert:
- 3:00 Uhr Time Backup
- 3:05 Uhr Start meines Scripts über den Aufgabenplaner
- 3:15 Uhr Start der normalen Datensicherung
Prüfung ob eine Datensicherung bereits läuft
Dies ist ein Zusatz-Feature, das man im Script in den meisten Fällen so lassen kann, bei Bedarf kann man es erweitern oder löschen:
Und zwar wäre es natürlich schlecht, wenn das Verschieben der Daten durch mein Script in das Zielverzeichnis kollidiert mit einer von dort aktuell gerade laufenden Sicherung. Bei zeitlich richtiger Programmierung des Ablaufs kann das eigentlich nicht passieren.
Allerdings gibt es ja auch Fälle in denen man die Datensicherung nicht zeitgesteuert sondern manuell (z.B. über autorun) startet.
Daher prüft mein Script vorsichtshalber vor dem Verschieben ob bestimmte Datensicherungsprozesse laufen, und zwar sowohl Volume als auch Ordner-Backup, beide sowohl lokal als auch über Netz auf eine andere Synology DS. Wird so eine laufende Datensicherung erkannt, dann wird auf das Verschieben eines neuen Backups in den Zielordner verzichtet.
Anpassung des Scripts
Ansonsten muss man an dem Script eigentlich nur den Pfad des Time Backup Jobs anpassen sowie den Zielpfad, von dem man dann seine Datensicherung programmieren will.
Installation und Starten des Scripts
Einfach irgendwohin kopieren wo man seine Hilfsprogramme hat und mit dem Aufgabenplaner starten. Dabei die Ausgabe sinnollerweise in eine Datei umlenken, damit man später sieht was gelaufen ist. Bei mir ist das Script einschließlich von der von ihm erzeugten Ausgabedatei im gemeinssamen Ordner "utilities", Unterverzeichnis "tb_to_backup":
Der automatische Start sieht bei mir so aus:
aktueller Anlass: Thema Änderung des Datenstandes während Netzwerksicherung
Da ich zur Vermeidung dieses Problems soeben ein Script erstellt habe will ich dieses hier kurz vorstellen.
Problembeschreibung:
Je nachdem was man sichern will kann sich das Problem stellen, dass man während der Sicherung auf die Daten nicht zugreifen darf, weil es sonst passieren kann dass das Backup abbricht oder dass die gesicherten Daten nicht konsistent sind, so dass das Backup evtl. unbrauchbar ist. Bei Filmen und Fotos stellt sich das Problem weniger, aber zum Beispiel bei Datenbanken oder Container-Dateien stellt es sich ggf. massiv.
Lösen kann man das Problem natürlich einerseits so dass man während der Sicherung den Zugriff auf die Daten vermeidet, aber je nach Anwendung kann das unmöglich oder zumindest lästig sein.
Daher habe ich nun folgenden Ablauf gewählt:
1.) Time Backup
Mit Time Backup führt man eine tägliche lokale Sicherung durch. Dies hat den Vorteil, dass man bei Time Backup direkt nach dem Start auf die Daten wieder zugreifen darf, denn Time Backup macht beim Start einen Snapshot vom Stand der Daten.
Wegen der sofortigen Datensicherheit macht man das Time Backup wenn möglich auf ein anderes Volume als das auf dem die Daten selber sind. Außerdem geht es auch schneller wenn man auf ein anderes Volume schreibt als man liest. Ist aber nicht zwingend.
Da Time Backup mit Hardlinks arbeitet, wird pro zusätzlicher täglicher Version nur der Speicherplatz für die geänderten Dateien benötigt. (Soweit sich nichts ändert bräuchten also selbst zehn Tagessicherungen nicht mehr Platz als eine.)
2.) Verschieben für Backup
Kurz nach Start des Time Backups wird - ebenfalls automatisch - mein Script gestartet.
Mein Script lässt die beiden letzten Versionen des Time Backups unangetastet:
- die letzte Version wird ja gerade erst erstellt
- die vorletzte Version wird ebenfalls nicht angetastet, dies ist sinnvoll damit Time Backup beim Erstellen der neusten Version die unveränderten Dateien nicht neu kopieren muss sondern mit Hardlinks auf die letzte Version arbeiten kann
Die drittletzte Version braucht Time Backup nicht mehr, die wird von meinem Script verschoben in einen Ordner von dem aus dann die normale Datensicherung laufen kann. Damit das Verschieben schnell geht muss dieser Ordner zwingend auf dem selben Volume sein wie das Time Backup.
Alle älteren Time Backup Versionen werden von meinem Script gelöscht.
Theoretisch ist der Startzeitpunkt für mein Script egal, auch wenn es ein paar Mal mehr oder weniger ausgeführt wird ist das unkritisch. Der Start 5 Minuten nach Start des Time Backups hat lediglich den Vorteil, dass dann der temporär maximal benötigte Speicherplatz am geringsten ist, weil zu Beginn eines neuen Kopiervorgangs alles überflüssige gelöscht wird.
3.) Normales Backup
Von dem Pfad auf den mein Script verschiebt startet man dann das normale Backup. Da das Verschieben (auf dem selben Volume) schnell geht, kann das zum Beispiel 10 Minuten nach Start meines Scripts sein.
Ich habe es so programmiert:
- 3:00 Uhr Time Backup
- 3:05 Uhr Start meines Scripts über den Aufgabenplaner
- 3:15 Uhr Start der normalen Datensicherung
Prüfung ob eine Datensicherung bereits läuft
Dies ist ein Zusatz-Feature, das man im Script in den meisten Fällen so lassen kann, bei Bedarf kann man es erweitern oder löschen:
Und zwar wäre es natürlich schlecht, wenn das Verschieben der Daten durch mein Script in das Zielverzeichnis kollidiert mit einer von dort aktuell gerade laufenden Sicherung. Bei zeitlich richtiger Programmierung des Ablaufs kann das eigentlich nicht passieren.
Allerdings gibt es ja auch Fälle in denen man die Datensicherung nicht zeitgesteuert sondern manuell (z.B. über autorun) startet.
Daher prüft mein Script vorsichtshalber vor dem Verschieben ob bestimmte Datensicherungsprozesse laufen, und zwar sowohl Volume als auch Ordner-Backup, beide sowohl lokal als auch über Netz auf eine andere Synology DS. Wird so eine laufende Datensicherung erkannt, dann wird auf das Verschieben eines neuen Backups in den Zielordner verzichtet.
Anpassung des Scripts
Ansonsten muss man an dem Script eigentlich nur den Pfad des Time Backup Jobs anpassen sowie den Zielpfad, von dem man dann seine Datensicherung programmieren will.
Installation und Starten des Scripts
Einfach irgendwohin kopieren wo man seine Hilfsprogramme hat und mit dem Aufgabenplaner starten. Dabei die Ausgabe sinnollerweise in eine Datei umlenken, damit man später sieht was gelaufen ist. Bei mir ist das Script einschließlich von der von ihm erzeugten Ausgabedatei im gemeinssamen Ordner "utilities", Unterverzeichnis "tb_to_backup":
Der automatische Start sieht bei mir so aus: