TB to Backup: Ein Script um Time Backup und Onboard Backup hintereinander zu schalten

Status
Für weitere Antworten geschlossen.

Galileo

Benutzer
Mitglied seit
22. Jan 2014
Beiträge
329
Punkte für Reaktionen
0
Punkte
16
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":
TB2.jpg

Der automatische Start sieht bei mir so aus:
TB1.png
 

Galileo

Benutzer
Mitglied seit
22. Jan 2014
Beiträge
329
Punkte für Reaktionen
0
Punkte
16
Und dies ist das Script in Beta-Version 0.1 (Lizenz BSD):
Rich (BBCode):
#!/bin/sh
echo "-------------------------------------------------------------------------------"
echo "TB_to_Backup  Verschieben und Loeschen von TimeBackup Daten" 
echo "Beta 0.1 "
echo "Autor: Galileo, Lizenz: BSD"
echo $(date) 
echo " "
NOTIFYTO="admin"  # <----- Für DSM Meldungen 

TBPATH="/volume2/V1Backup/TimeBackup/DS1513-HA_00113224BBC4/task_9"   # <---------------------- diesen Pfad anpassen
# Ordner des Time Backup Jobs dessen Daten verarbeitet werden sollen (Quell-Pfad):
# Achtung: Die drittletzte Version des Time Backups wird in den Zielpfad verschoben 
# und alle noch älteren Versionen werden gelöscht

DESTPATH="/volume2/V1Backup/dataport"   # <---------------------------------------------------- diesen Pfad anpassen
# Zielpfad auf den das drittletzte Time Backup verschoben werden soll:
# Achtung: Der Inhalt dieses Ordners wird vor dem Verschieben komplett ohne Rückfrage gelöscht!

echo "Quelle TimeBackup Job:"
echo $TBPATH 
echo "Ziel:"
echo $DESTPATH
echo " "

# Zielpfad prüfen
cd $DESTPATH
if [ $? != "0" ]
then
	echo "Zielverzeichnis nicht gefunden" $DESTPATH
	/usr/syno/bin/synodsmnotify $NOTIFYTO "TB_to_Backup" "abnormal beendet."
	exit 2
fi;
# Zum Time Backup Pfad wechseln, wenn nicht vorhanden abbrechen.
cd $TBPATH
if [ $? != "0" ]
then
	echo "TimeBackup Verzeichnis nicht gefunden" $TBPATH
	/usr/syno/bin/synodsmnotify $NOTIFYTO "TB_to_Backup" "abnormal beendet."
	exit 3
fi;

# Anzeigen der vorhandenen Time Backup Versionen
echo "Gefundene TimeBackup Unterverzeichnisse" 
# Der folgende Befehl listet die Unterordner (= Time Backup Versionen) in zeitlicher (= alphabetischer) Reihenfolge auf
find . -mindepth 1 -maxdepth 1 | sort 
echo " "

# Diese Variablen dienen als Schieberegister für die TB-Versions-Ordnernamen in der Schleife
VZ0="";  # neuste Version
VZ1="";  # zweitneuste Version
VZ2="";  # drittneuste Version
VZ3="";  # viertneuste Version

# Am Ende der folgenden Schleife beinhaltet VZ2 den Unterordner mit dem 
# zu verschiebenden drittletzten Time Backup, VZ1 und VZ0 beinhalten die beiden 
# neusten Unterordner die erhalten werden sollen, alle älteren Versionen werden gelöscht
echo "Loeschen aelterer Time Backup Versionen" 
N1=0   # Anzahl gelöschte Versionen zählen
for I in `find . -mindepth 1 -maxdepth 1 | sort`  # siehe oben
do
	VZ3="$VZ2"   # Schieberegister für bis zu 4 Ordnernamen
	VZ2="$VZ1"
	VZ1="$VZ0"	
	VZ0="$I"	
	if [ "$VZ3" != "" ]  # Dies trifft zu ab dem 4. Durchlauf für alle weiteren Durchläufe
	then
		echo "Loesche" $VZ3  # Lösche alle Versionen außer den letzten dreien
		rm -r $VZ3
		if [ $? != "0" ]
		then
			echo "Unerwarteter Fehler beim Loeschen" $VZ3
			echo "TB_to_Backup abnormal beendet" $(date) 
			/usr/syno/bin/synodsmnotify $NOTIFYTO "TB_to_Backup" "abnormal beendet."
			exit 4
		else
			N1=$(($N1+1))			
		fi;
	fi	
done
if [ $N1 = 0 ]
then
	echo "Keine aelteren Time Backup Versionen gefunden" 
fi
echo " " 

# Nun wird der drittletzte Time Backup Ordner (VZ2) verschoben, vorher wird der Inhalt des Zielordners gelöscht.
N2=0
if [ "$VZ2" != "" ] 
then
	# Nun wird geprüft ob Prozesse aktiv sind mit denen man ggf. auf den Zielpfad zugreifen will, 
	# wenn ja wird abgebrochen, also das drittletzte Time Backup nicht auf den Zielpfad verschoben.
	#
	# Standardmäßig werden die folgende Prozesse abgeprüft:
	# - Sicherung auf freigegebenen Ordner lokal und über Netz auf andere Synology
	# - Volumen-Sicherung lokal und über Netz auf andere Synology
	# - Volumensicherungstool (Der Prozess tritt zusätzlich auf bei lokaler Volumensicherung)
	# 

	echo "Pruefen auf aktive Sicherungsprozesse" 
	Z=0  # laufende Sicherungeprozesse zählen

	# Prüfe lokale Datensicherung auf freigegebenen Ordner
	for I in `ps | grep 'synolocalbkp'`
	do
		if [ "$I" = '/usr/syno/bin/synolocalbkp' ]
		then
			echo "$I" "aktiv"
			Z=$(($Z+1))
		fi
	done

	# Prüfe Netzwerksicherung auf freigegebenen einer anderen Synology
	for I in `ps | grep 'synonetbkp'`
	do
		if [ "$I" = '/usr/syno/bin/synonetbkp' ]
		then
			echo "$I" "aktiv"
			Z=$(($Z+1))
		fi	
	done

	# Prüfe lokale Volumen-Datensicherung
	for I in `ps | grep 'synoimgbkp'`
	do
		if [ "$I" = '/usr/syno/bin/synoimgbkp' ]
		then
			echo "$I" "aktiv"
			Z=$(($Z+1))
		fi
	done

	# Prüfe Netzwerkvolumensicherung auf andere Synology 
	for I in `ps | grep 'img_backup'`
	do
		if [ "$I" = '/usr/syno/bin/img_backup' ]
		then
			echo "$I" "aktiv"
			Z=$(($Z+1))
		fi	
	done

	# Prüfe Aktivität Volumen Backup Tool
	for I in `ps | grep 'synoimgbkptool'`
	do
		if [ "$I" = '/usr/syno/bin/synoimgbkptool' ]
		then
			echo "$I" "aktiv"
			Z=$(($Z+1))
		fi
	done

	if [ $Z != 0 ]
	then
		echo "TB_to_Backup abgebrochen weil $Z aktive Sicherungsprozesse gefunden"
		/usr/syno/bin/synodsmnotify $NOTIFYTO "TB_to_Backup" "abgebrochen weil $Z aktive Sicherungsprozesse gefunden"
		exit 1
	else
		echo "Keine Aktivitaeten der ausgewaehlten Sicherungsprozesse festgestellt."
	fi
	echo " "

	cd $VZ2
	echo "Loesche Inhalt von" $DESTPATH 
        rm -r $DESTPATH   # Löschen des Zielordners
	if [ $? != "0" ]
	then
		echo "Unerwarteter Fehler beim Loeschen" $DESTPATH
		echo "TB_to_Backup abnormal beendet" $(date) 
		/usr/syno/bin/synodsmnotify $NOTIFYTO "TB_to_Backup" "abnormal beendet."
		exit 10
	fi;
        mkdir $DESTPATH   # Neuanlegen des leeren Zielordners
	if [ $? != "0" ]
	then
		echo "Unerwarteter Fehler beim neu Anlegen" $DESTPATH
		echo "TB_to_Backup abnormal beendet" $(date) 
		/usr/syno/bin/synodsmnotify $NOTIFYTO "TB_to_Backup" "abnormal beendet."
		exit 11
	fi;
	echo "Verschiebe Inhalt von" $VZ2 "nach" $DESTPATH
	mv -f * $DESTPATH # Verschieben des drittletzten Time Backups in den Zielpfad
	if [ $? != "0" ]
	then
		echo "Unerwarteter Fehler beim Verschieben von" $VZ2 "nach" $DESTPATH
		echo "TB_to_Backup abnormal beendet" $(date) 
		/usr/syno/bin/synodsmnotify $NOTIFYTO "TB_to_Backup" "abnormal beendet."
		/usr/syno/bin/synodsmnotify $NOTIFYTO "TB_to_Backup" "abnormal beendet."
		exit 12
	else
		N2=1  # 1 Version verschoben
	fi;
	cd $TBPATH
	echo "Loesche" $VZ2 
	rm -r $VZ2    		# Löschen des nun leeren Pfades des drittletzten Time Backups
	if [ $? != "0" ]
	then
		echo "Unerwarteter Fehler beim Loeschen von" $VZ2
		echo "TB_to_Backup abnormal beendet" $(date) 
		/usr/syno/bin/synodsmnotify $NOTIFYTO "TB_to_Backup" "abnormal beendet."
		exit 13
	fi;
	echo " "
fi	

# Anzeigen der beiden neusten Backuos die erhalten bleiben soweit überhaupt vorhanden.
N3=0
if [ "$VZ1" != "" ] 
then
	N3=$(($N3+1))
	echo "Behalte" $VZ1 
fi
if [ "$VZ0" != "" ] 
then
	N3=$(($N3+1))
	echo "Behalte" $VZ0
fi
echo "TB_to_Backup normal beendet" $(date) 
echo "$N1 Version(en) geloescht, $N2 Version(en) verschoben, $N3 Version(en) vorhanden."
/usr/syno/bin/synodsmnotify $NOTIFYTO "TB_to_Backup" "normal beendet, $N1 Version(en) geloescht, $N2 Version(en) verschoben, $N3 Version(en) vorhanden."
exit 0
 

Galileo

Benutzer
Mitglied seit
22. Jan 2014
Beiträge
329
Punkte für Reaktionen
0
Punkte
16
Eine typische Ausgabe sieht dann so aus:
-------------------------------------------------------------------------------
TB_to_Backup Verschieben und Loeschen von TimeBackup Daten
Beta 0.1
Autor: Galileo, Lizenz: BSD
Mon Mar 24 18:50:36 CET 2014

Quelle TimeBackup Job:
/volume2/V1Backup/TimeBackup/DS1513-HA_00113224BBC4/task_9
Ziel:
/volume2/V1Backup/dataport

Gefundene TimeBackup Unterverzeichnisse
./20140324-1634
./20140324-1635
./20140324-1848
./20140324-1849
./20140324-1850

Loeschen aelterer Time Backup Versionen
Loesche ./20140324-1634
Loesche ./20140324-1635

Pruefen auf aktive Sicherungsprozesse
Keine Aktivitaeten der ausgewaehlten Sicherungsprozesse festgestellt.

Loesche Inhalt von /volume2/V1Backup/dataport
Verschiebe Inhalt von ./20140324-1848 nach /volume2/V1Backup/dataport
Loesche ./20140324-1848

Behalte ./20140324-1849
Behalte ./20140324-1850
TB_to_Backup normal beendet Mon Mar 24 18:50:36 CET 2014
2 Version(en) geloescht, 1 Version(en) verschoben, 2 Version(en) vorhanden.
 

Galileo

Benutzer
Mitglied seit
22. Jan 2014
Beiträge
329
Punkte für Reaktionen
0
Punkte
16
Abweichend von der normalen Datensicherung macht man bei dieser Vorgehensweise die endgültige (externe) Datensicherung nicht von den neusten Daten sondern von einem schon zwei Tage alten Stand. Die Stände der beiden letzten Tage hingegen hat man noch auf dem Server, wie gesagt, sinnvollerweise auf einem anderen Volume.

Außerdem braucht man dafür natürlich viel zusätzlichen Speicherplatz, und zwar für den Zwischenstand im Time Backup und für den zur Datensicherung bereit gestellten Stand, wobei das wenn sich nichts geändert hat auf Grund der Hardlinks von Time Backup auch de facto die selben Daten sein können.

Man braucht also zusätzlich etwa 1-2 Mal das Volumen der Originaldaten. Insofern muss man diese Arbeitsweise natürlich als "luxuriös" bezeichnen, d.h. wenn die zu sichernde Datenmenge entsprechend groß ist oder freier Speicher nicht großzügig verfügbar ist dann geht das so nicht.
 
Zuletzt bearbeitet:
Status
Für weitere Antworten geschlossen.
 

Kaffeautomat

Wenn du das Forum hilfreich findest oder uns unterstützen möchtest, dann gib uns doch einfach einen Kaffee aus.

Als Dankeschön schalten wir deinen Account werbefrei.

:coffee:

Hier gehts zum Kaffeeautomat