[Projekt] rsync -Alternative dateibasierte Datensicherung

Status
Für weitere Antworten geschlossen.

Tommes

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
26. Okt 2009
Beiträge
9.088
Punkte für Reaktionen
1.072
Punkte
314
Hallo zusammen!

Da Synology im Zuge von DSM 6.0 [Beta 1 & 2] die dateibasierte Datensicherung bis auf weiteres aus dem System entfernt hat, möchte ich mal ein kleines Brainstorming ins Leben rufen um diesen Missstand mit einem "kleinen" rsync-Script zu begegnen.

Mir ist bewusst, das ich hier nicht das Rad neu erfunden werde, einige von euch werden sich vielleicht sogar Stirnrunzelnd abwenden oder das ganze müde belächeln. Andere werden aber vielleicht sagen: Toll, der Ansatz gefällt mir aber ich habe da noch die ein oder andere Idee wie man es besser/anders/einfacher/komfortabler machen kann und genau diese Leute suche ich hier.

Denn ich bin absolut kein Script-Profi und daher auf eure Hilfe angewiesen. Wenn ihr also Lust habt mein nachfolgendes Script mal zu testen und zu bewerten, es zu verbessern und zu verfeinern, dann würde ich mich wirklich freuen. Letzenendes soll etwas gutes für uns alle dabei herauskommen, wo immer auch die Reise hin gehen wird. Aber genug geredet...

Das Script:
Das Script selber soll nach Möglichkeit über den Aufgabenplaner des DSM ausgeführt werden können. Ob automatisiert oder Manuell bleibt erstmal jedem selbst überlassen. Im Grunde tut das Script nichts anderes als mehrere ausgewählte "gemeinsame Ordner" eines bestimmten internen Volume per rsync in das gewünschte Backupziel (intern oder auf USB- oder SATA-Datenträger) zu verfrachten. Hat man im DSM unter Systemsteuerung/Benachrichtigung eine E-Mail-Adresse konfiguriert, so kann man durch Angabe dieser E-Mail im Script, sich ein Protokoll per Mail zusenden lassen. Kommentiert man das E-Mail Feld aus, dann wird nur eine Protokolldatei im Sicherungsziel abgelegt. Über den Aufau und Inhalt des Protokolls lässt sich natürlich streiten, von daher wäre das gleich mal ein Punkt um Verbesserungen vorzustellen.

Gelöschte Dateien in der Quelle werden im Ziel in einer Art "Mülleimer" gesammelt, also nicht gleich gelöscht. Über Sinn und Unsinn dieses Vorgehens kann man natürlich diskutieren.

Ich habe SSH erstmal bewusst weggelassen, da hier auch die Konfiguration von RSA-Keys etc. erforderlich wäre... und es soll ja einfach bleiben. Was zu überlegen wäre ist, ob man optional ein differntielles Backup anbieten sollte. Ich stoße mich da aber ein wenig mit dem anlegen von Hardlinks, was mir immer noch ein wenig suspekt ist.

Fangen wir an und ich würde mich wirklich über eure Meinungen, Mithilfe und Ideen freuen.

Ach ja, bevor ich es vergesse. Da ich ja auch grade erst dem Tal der Ahnungslosen entkommen bin, noch der Hinweis:

Ihr verwendet das Script auf eigene Gefahr. Um möglichen Datenverlust vorzubeugen, arbeitet mir unwichtigen Testaten oder habt ein Backup im Schrank

PHP:
#!/bin/sh

# E-Mail Adresse
# --------------------------------------------------------------
# Die E-Mail-Adresse muß identisch mit der im DSM unter 
# Systemsteuerung/Benachrichtigung konfigurierten sein.
	EMAIL="dein.name@mail.tld"

# Backup - Quelle
# --------------------------------------------------------------
	VOLUME="/volume1"		
	SHAREDFOLDER=(/photo 
				  /video/Spielfilme
				  /music/Alben/Deutsch )
				  
# Backup - Ziel 
# --------------------------------------------------------------
	#TARGET="/volume1/Backup"
	TARGET="/volumeUSB1/usbshare/Backup"

# --------------------------------------------------------------
# Ab hier bitte nichts mehr ändern
# --------------------------------------------------------------
	RSYNCCONF=(--stats --log-file-format="%i %o %f" --delete --backup --backup-dir=`$DATE`_Recycle)
	RSYNC="/bin/rsync"
	SSH="/bin/ssh" 
	SSMTP="/usr/bin/ssmtp"
	ECHO="/bin/echo" 
	DATE="/bin/date +%Y-%m-%d"; 
	TIMESTAMP="/bin/date +%d.%m.%Y_%H:%M:%S";
	LOGFILE="/`$DATE`_Sicherungsprotokoll.log"
	
if [ "$EMAIL" ]; then
  # Sicherungsprotokoll im Backup-Ziel als Datei speichern und 
  # daraus eine E-Mail generieren...
	LOG="$TARGET$LOGFILE"	
	$ECHO  "To: $EMAIL" > $LOG
	$ECHO  "From: $EMAIL" >> $LOG
	$ECHO  "Subject: Sicherungsprotokoll vom `$TIMESTAMP` Uhr" >> $LOG
	$ECHO  "" >> $LOG	
else
  # Sicherungsprotokoll im Backup-Ziel als Datei speichern
	LOG="$TARGET$LOGFILE"
	$ECHO "Sicherungsprotokoll vom `$TIMESTAMP` Uhr" > $LOG
	fi

for SHARE in "${SHAREDFOLDER[@]}"
	do
		$ECHO "" >> $LOG
		$ECHO "------------------------------------------------------------------------------------" >> $LOG
		$ECHO "Statusbericht für: $VOLUME$SHARE" >> $LOG
		$ECHO "------------------------------------------------------------------------------------" >> $LOG
		$RSYNC -ah "$VOLUME$SHARE" "${RSYNCCONF[@]}" "$TARGET"  >> $LOG 2>&1 
	done
	
if [ "$EMAIL" ]; then
  # Sicherungsprotokoll als E-Mail versenden...
	$SSMTP $EMAIL < $LOG
	fi

Tommes
 
Zuletzt bearbeitet:

PsychoHH

Benutzer
Mitglied seit
03. Jul 2013
Beiträge
2.967
Punkte für Reaktionen
4
Punkte
78
Hast du gut gemacht.
Kann man gerne als Alternative nutzen.

Eine tolle Anleitung für rsnapshot gibt es hier auch noch, läuft bei mir auch automatisch super unter DSM 6.

Statt Email Benachrichtigung, kann man auch die DSM Benachrichtigung mit Hilfe von synodsmnotify nutzen.
 

Tommes

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
26. Okt 2009
Beiträge
9.088
Punkte für Reaktionen
1.072
Punkte
314
Danke für dein Feedback!

Statt Email Benachrichtigung, kann man auch die DSM Benachrichtigung mit Hilfe von synodsmnotify nutzen.

Diese Idee flitze mir auch schon durch den Kopf, hatte aber nicht den richtigen Aufhänger dafür... könntest du das mit dem synodsmnotify etwas präzisieren, da ich diesbezüglich etwas auf dem Schlauch stehe. Aber lass dir Zeit, ich mach nämlich Schluss für heute. Scripten macht müde :D

Tommes
 

PsychoHH

Benutzer
Mitglied seit
03. Jul 2013
Beiträge
2.967
Punkte für Reaktionen
4
Punkte
78
Ja dafür nicht.

Wir können eigentlich den Teil von silofinari den er für rsnapshot genommen hat übernehmen und anpassen.
http://www.synology-forum.de/showth...m-Backup-mit-rsnapshot-DSM-Benachrichtigungen

Das sollte schon klappen.

Die exit Codes könnte man noch genauer festlegen, aber die folgenden sollten idr langen.
http://wpkg.org/Rsync_exit_codes



# save the exit code in a variable
status=$?

# test status and make it human readable
if [ $status -eq 0 ]
then
statusmessage="All operations completed successfully"
elif [ $status -eq 1 ]
then
statusmessage="A fatal error occurred"
elif [ $status -eq 2 ]
then
statusmessage="Some warnings occurred, but the backup still finished"
else
statusmessage="An error occured in the execution of the shell script"
fi

# send notification to DSM Administrators
synodsmnotify @administrators "rsync Backup" "$statusmessage"

Ich werde das aber die Tage gerne mal ausprobieren.
 

tschortsch

Benutzer
Mitglied seit
16. Dez 2008
Beiträge
1.644
Punkte für Reaktionen
34
Punkte
74
Super Script!
Einzig was ein wenig gefährlich ist das das Zielvolumen "fix" hinterlegt ist.
Wenn man zuerst auf USBShare 1 das Backup macht, zufällig später dann eine USB Stik hat der dann USBShare1 heißt und man die Backupplatte anschließt (=>> USBShare2) und das Backup startet wird der Stick überschrieben.

Kann man das irgendwie anhand einer "Antwortdatei", ähnlich in Autorun, lösen?
Also in der Datei auf der Backupplatte steht zB "Backupjob1".
Das Script durchsucht beim Start alle angeschloßenen USB/Sata Platten nach der "Antwortdatei" mit dem Inhalt "Backupjob1". Wenn es die passenden Platte findet startet es erst dann.
Die Konfigurationsdatei kann eine simple Textdatei mit dem Aufgabennamen sein, die kann man dann man sogar mit Windows erstellen.
Im Backupscript kann man mehrere verschiedene Backupjobs hinterlegen.
Mit der Option könnte man das auch von Autorun starten lassen.
Backupjobs auf ein "fixes" Netzlaufwerk laufen mit Tommes Script theretisch ohne zutun.

Oder hier noch die "Luxusvariante" mit einer zusätzlichen externen Konfigurationsdatei in der die verschiedenen Backupjobs konfiguriert werden.
Beim Start des Scripts fragt es zuerst mal alle angeschlossenen Backupplatten nach der Antwortdatei (zb "Backupjob1") ab. Danach fragt das Script die externe Konfigurationsdatei ab ob dieser "Backupjob1" vorhanden ist und startet danach das entsprechende Backup.
Die externen Konfigurationsdatei kann eine Textdatei sein die auf einer Freigaben auf "VolumenX" liegt. So kann man jederzeit über die Freigabe Backupjobs hinzufügen oder ändern.
In der externen Konfigurationsdatei kann man auch Netzwerkbackupjobs konfigurieren die automatisch gestartet werden wenn das Script keine externe Backupplatten mit Antwortdatei findet.

Zusätzlich erhöht die (fehlenede) "Antwortdatei" auf der Platte das ungewolte überschreiben eine neu angeschlossen Festplatte.
Weiters könnte man dann auch eine wechselndes Backup mit 2 Platten machen auf denen aber der gleiche Backupjob gemacht wir. (ZB backupjob1 HD1 am Mitwoch, Backupjob1 HD2 am Samstag) Das ging mit dem bisherigen Backup soweit ich weiß auch nicht.

So ich hab nun meine Ideen kundgetan :D, Scripten kann ich leider auch nicht. :(
 
Zuletzt bearbeitet:

PsychoHH

Benutzer
Mitglied seit
03. Jul 2013
Beiträge
2.967
Punkte für Reaktionen
4
Punkte
78
Könnte sicher mit if find klappen.

Man kann aber ich einfach auf die Platte das Script speichern und im Aufgabenplaner für alle usb Ports die Scripte angeben.

Man kann somit auch verschieden Ordner auf unterschiedliche Platten sichern.
 

tschortsch

Benutzer
Mitglied seit
16. Dez 2008
Beiträge
1.644
Punkte für Reaktionen
34
Punkte
74
Mit dem Aufgabenplaner ist das dann aber ein wenig umständlich. Der müßte ja zb jede Minute cheken ob eine Festplatte angeschlossen ist.

"Autorun" haben e schon viele laufen, da kann man das eigentlich nutzen und das würde mit dem orignal Script+Festplatten(sicherheits)abfrage schon laufen.

Meine vorgeschlagene "Luxusvariante" wäre ja schon ein (manuel zu konfgurierender) Ersatz für das jetzige Backup in DSM5.2
 

PsychoHH

Benutzer
Mitglied seit
03. Jul 2013
Beiträge
2.967
Punkte für Reaktionen
4
Punkte
78
Hab das mit dem Aufgabenplaner auch eher zu bestimmten Zeiten gemeint oder z.B. nach dem hochfahren.

Autorun läuft noch nicht unter DSM 6beta. Aber Synology soll sich ja darum kümmern.

Unter 5.2 wird das aber mit autorun sicher laufen.
 

Tommes

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
26. Okt 2009
Beiträge
9.088
Punkte für Reaktionen
1.072
Punkte
314
@PsychoHH
Danke für den Tipp mit dem synodsmnotify. Ich denke, das werde ich mal versuchen einzubauen.

@tschortsch
Dieses Script erhebt keinen Anspruch auf Perfektion und ich seh mich auch garnicht in der Lage dazu, deine Anforderungen und Wünsche umzusetzen, da ich selber ein blutiger Anfänger in sowas bin. Auch ist meine Intention das Script so einfach wie möglich zu halten und einfach heißt dann manchmal leider auch, das nicht alle Eventualitäten einer Fehlkonfiguration berücksichtig werden können. Natürlich danke ich dir für dein Feedback und find deine Denkanstöße auch sehr hilfreich, aber mit der Umsetzung würde ich auch ziemlich Probleme haben. Daher schrieb ich oben ja, das ich auf eure Hilfe angewiesen bin.

Das Script soll übrigens über den Aufgabenplaner laufen, man muß es ja nicht automatisieren. Hintergrund dieses Denkens ist halt, das manch einer nichts mit der Konsole anfangen kann und da bietet der Aufgabenplaner halt eine gute Möglichkeit. Autorun läuft, wie PsychoHH bereits erwähnte nicht unter DSM 6 Beta. Ob sich das ändert wissen wir alle nicht.

Ok, ich werd am WE mal schauen, was ich von dem, was ihr so vorgeschlagen habt umsetzen kann. Habt aber bitte Nachsicht mit mir, da ich mir auch alles erst selber beibringen muß... und das kostet halt Zeit.

Tommes
 

tschortsch

Benutzer
Mitglied seit
16. Dez 2008
Beiträge
1.644
Punkte für Reaktionen
34
Punkte
74
Wie schon gesagt, waren halt nur meine Ideen (und Wünsche ;)) dazu.
Manchmal bekommt man durch Ideen andere ganz andere Sichtweisen und Lösungsansätze zur Lösung der eigenen Probleme.

Viel erfolg :)
 
Zuletzt bearbeitet:

Tommes

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
26. Okt 2009
Beiträge
9.088
Punkte für Reaktionen
1.072
Punkte
314
Ich habe die Auswertung der "exit codes" erfolgreich eingebauen können, wobei hier aber nur über Erfolg und Misserfolg unterschieden wird. Das Ergebnis wird dem Protokoll am Ende hinzugefügt und die DSM-Administratorengruppe erhält eine entsprechende Benachrichtigung im DSM! Nochmals Danke für diesen Tipp und die passenden Links dazu. Das hat mir wirklich sehr geholfen und konnte es, soweit ich mich selber beurteilen darf, gut umsetzten. Interessieren würde mich noch, wie ich mir den exit code als Wert ausgeben lassen kann. Als ich versucht habe $? auszugeben bin ich in einer Endlosschleife gelandet.

@tschortsch
Deine Ideen und Vorstellungen werd ich mir jetzt mal näher anschauen, jeodch kann ich für nichts garantieren. Beim rumspielen mit den "exit codes" konnte ich auf jeden Fall schon mal feststellen, das wenn z.B. das Ziel z.B. nicht volumeUSB1, sondern volumeUSB2 heißt aber auf volumeUSB1 gesichert werden soll, das Backup garnicht erst startet und mit einem Fehler abbricht. Natürlich hilft das nicht bei einem angeschlossenen Datenträgern die alle volumeUSB1 heißen. Das macht die Sache halt schwierig für mich. Aber ich schau mal, was ich da finde.

Wer sonst noch Tipps und Anregungen hat, gerne aber auch CodeSchnippsel oder entsprechende Links... immer her damit!

OK, hier dann noch schnell das überabeitete Script. Ich bleib erstmal bei dieser Art der Anzeige. Falls ihr lieber das Ganze in Dateiform haben wollt, dann kann ich das auch gerne ändern.

Tommes

PHP:
#!/bin/sh

# E-Mail Adresse
# --------------------------------------------------------------
# Die E-Mail-Adresse muß identisch mit der im DSM unter 
# Systemsteuerung/Benachrichtigung konfigurierten sein.
    EMAIL="dein.name@mail.tld"

# Backup - Quelle
# --------------------------------------------------------------
    VOLUME="/volume1"        
    SHAREDFOLDER=(/photo 
                  /video/Spielfilme
                  /music/Alben/Deutsch )
                  
# Backup - Ziel 
# --------------------------------------------------------------
    #TARGET="/volume1/Backup"
    TARGET="/volumeUSB1/usbshare/Backup"

# --------------------------------------------------------------
# Ab hier bitte nichts mehr ändern
# --------------------------------------------------------------


# Umgebungsvariablen definieren
	RSYNCCONF=(--stats --log-file-format="%i %o %f" --delete --backup --backup-dir=`$DATE`_Recycle)
	RSYNC="/bin/rsync"
	SSH="/bin/ssh" 
	SSMTP="/usr/bin/ssmtp"
	ECHO="/bin/echo" 
	SYNODSMNOTIFY="/usr/syno/bin/synodsmnotify"
	DATE="/bin/date +%Y-%m-%d"; 
	TIMESTAMP="/bin/date +%d.%m.%Y_%H:%M:%S"  
	
# Datei für das Protokoll anlegen und bei Bedarf die E-Mail-Kopfdaten generieren
LOG="$TARGET/`$DATE`_Sicherungsprotokoll.log"	

if [ "$EMAIL" ]; then
	$ECHO  "To: $EMAIL" > $LOG
	$ECHO  "From: $EMAIL" >> $LOG
	$ECHO  "Subject: Sicherungsprotokoll vom `$TIMESTAMP` Uhr" >> $LOG
	$ECHO  "" >> $LOG	
	else	
		$ECHO "Sicherungsprotokoll vom `$TIMESTAMP` Uhr" > $LOG
	fi

# rsync - Befehl ausführen sowie protokollieren	
for SHARE in "${SHAREDFOLDER[@]}"
	do
		$ECHO "" >> $LOG
		$ECHO "------------------------------------------------------------------------------------" >> $LOG
		$ECHO "Statusbericht für: $VOLUME$SHARE" >> $LOG
		$ECHO "------------------------------------------------------------------------------------" >> $LOG
		$RSYNC -ah "$VOLUME$SHARE" "${RSYNCCONF[@]}" "$TARGET"  >> $LOG 2>&1 
	done

# rsync - Ausführung auswerten und Ergebnis anhand der "exit codes" ausgeben  
	if [ $? -eq 0 ]; then
		$ECHO  "" >> $LOG
		$ECHO "rsync-Datensicherung erfolgreich abgeschlossen" >> $LOG
		DSMNOTIFY="rsync-Datensicherung erfolgreich abgeschlossen"	
		elif [ $? -ne 0 ]; then	
			$ECHO  "" >> $LOG
			$ECHO "rsync-Datensicherung fehlgeschlagen" >> $LOG
			DSMNOTIFY="rsync-Datensicherung fehlgeschlagen"
	fi

# Benachrichtigung an die DSM-Administratorengruppe senden	
		$SYNODSMNOTIFY @administrators "rsync-Script" "$DSMNOTIFY"
	
# Sicherungsprotokoll als E-Mail versenden (oder als Datei im Backupziel einsehen)	
if [ "$EMAIL" ]; then
	$SSMTP $EMAIL < $LOG
	fi
 

exkanzler

Benutzer
Mitglied seit
07. Dez 2015
Beiträge
23
Punkte für Reaktionen
0
Punkte
0

Tommes

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
26. Okt 2009
Beiträge
9.088
Punkte für Reaktionen
1.072
Punkte
314
OKey...! Nein, StoreBackup kannte ich noch nicht. Werde ich mir auf jeden Fall mal anschauen.

Jedoch muß dafür IPKG auf der DS installiert sein und es ist wohl über die Konsole zu konfigurieren, wenn ich das auf die Schnelle richtig interpretiert habe. Beides Dinge, die ich versuchen will zu vermeiden, da der Umgang mit IPKG und der Konsole bei vielen auf Ablehung stößt. Natürlich muß man mein Script auch "manuell" bearbeiten, kann dies aber sehr gut mit dem Text-Editor aus dem Paketzentrum des DSM's erledigen. Dafür baucht man nicht auf die Konsole. Und es läuft ohne die Verwendung von IPKG....

Einfach also, so einfach wie möglich sollte es sein und bleiben... kompliziert kann ja jeder. :D

Trotzdem Danke für dein Feedback.

Tommes
 

dil88

Benutzer
Contributor
Sehr erfahren
Mitglied seit
03. Sep 2012
Beiträge
29.718
Punkte für Reaktionen
1.024
Punkte
754
Ein Skript macht nach meinem Verständnis nichts anderes als das, was man auch auf der Konsole macht.
 

PsychoHH

Benutzer
Mitglied seit
03. Jul 2013
Beiträge
2.967
Punkte für Reaktionen
4
Punkte
78
Ich habe die Auswertung der "exit codes" erfolgreich eingebauen können, wobei hier aber nur über Erfolg und Misserfolg unterschieden wird. Das Ergebnis wird dem Protokoll am Ende hinzugefügt und die DSM-Administratorengruppe erhält eine entsprechende Benachrichtigung im DSM! Nochmals Danke für diesen Tipp und die passenden Links dazu. Das hat mir wirklich sehr geholfen und konnte es, soweit ich mich selber beurteilen darf, gut umsetzten. Interessieren würde mich noch, wie ich mir den exit code als Wert ausgeben lassen kann. Als ich versucht habe $? auszugeben bin ich in einer Endlosschleife gelandet.

Du solltest dir den exit Code einfach mit echo anzeigen lassen können.


Einfach ein leeres Script oder dieses Script auf eine Festplatte kopieren.
Es sollte egal sein, ob diese an Port 1/2 Steckt, da das Script mit find die Datei auf der Platte sucht.

Kann es gerade nicht testen.

Ich würde das Script direkt als rsync.sh auf der Platte speichern. Und einfach im Aufgabenplaner zwei Task einstellen.
1. su /volumeUSB1/usbshare/rsync.sh
2. su /volumeUSB2/usbshare/rsync.sh



PHP:
#!/bin/sh

# E-Mail Adresse
# --------------------------------------------------------------
# Die E-Mail-Adresse muß identisch mit der im DSM unter 
# Systemsteuerung/Benachrichtigung konfigurierten sein.
    EMAIL="dein.name@mail.tld"

# Backup - Quelle
# --------------------------------------------------------------
    VOLUME="/volume1"        
    SHAREDFOLDER=(/photo 
                  /video/Spielfilme
                  /music/Alben/Deutsch )
                  
# Backup - Ziel 
# --------------------------------------------------------------
       if find /volumeUSB1/usbshare/rsync.sh; then         TARGET="/volumeUSB1/usbshare/Backup" fi
if find /volumeUSB2/usbshare/rsync.sh; then             TARGET="/volumeUSB2/usbshare/Backup"             fi# --------------------------------------------------------------
# Ab hier bitte nichts mehr ändern
# --------------------------------------------------------------


# Umgebungsvariablen definieren
    RSYNCCONF=(--stats --log-file-format="%i %o %f" --delete --backup --backup-dir=`$DATE`_Recycle)
    RSYNC="/bin/rsync"
    SSH="/bin/ssh" 
    SSMTP="/usr/bin/ssmtp"
    ECHO="/bin/echo" 
    SYNODSMNOTIFY="/usr/syno/bin/synodsmnotify"
    DATE="/bin/date +%Y-%m-%d"; 
    TIMESTAMP="/bin/date +%d.%m.%Y_%H:%M:%S"  
    
# Datei für das Protokoll anlegen und bei Bedarf die E-Mail-Kopfdaten generieren
LOG="$TARGET/`$DATE`_Sicherungsprotokoll.log"    

if [ "$EMAIL" ]; then
    $ECHO  "To: $EMAIL" > $LOG
    $ECHO  "From: $EMAIL" >> $LOG
    $ECHO  "Subject: Sicherungsprotokoll vom `$TIMESTAMP` Uhr" >> $LOG
    $ECHO  "" >> $LOG    
    else    
        $ECHO "Sicherungsprotokoll vom `$TIMESTAMP` Uhr" > $LOG
    fi

# rsync - Befehl ausführen sowie protokollieren    
for SHARE in "${SHAREDFOLDER[@]}"
    do
        $ECHO "" >> $LOG
        $ECHO "------------------------------------------------------------------------------------" >> $LOG
        $ECHO "Statusbericht für: $VOLUME$SHARE" >> $LOG
        $ECHO "------------------------------------------------------------------------------------" >> $LOG
        $RSYNC -ah "$VOLUME$SHARE" "${RSYNCCONF[@]}" "$TARGET"  >> $LOG 2>&1 
    done

# rsync - Ausführung auswerten und Ergebnis anhand der "exit codes" ausgeben  
    if [ $? -eq 0 ]; then
        $ECHO  "" >> $LOG
        $ECHO "rsync-Datensicherung erfolgreich abgeschlossen" >> $LOG
        DSMNOTIFY="rsync-Datensicherung erfolgreich abgeschlossen"    
        elif [ $? -ne 0 ]; then    
            $ECHO  "" >> $LOG
            $ECHO "rsync-Datensicherung fehlgeschlagen" >> $LOG
            DSMNOTIFY="rsync-Datensicherung fehlgeschlagen - Fehler $?"
    fi

# Benachrichtigung an die DSM-Administratorengruppe senden    
        $SYNODSMNOTIFY @administrators "rsync-Script" "$DSMNOTIFY"
    
# Sicherungsprotokoll als E-Mail versenden (oder als Datei im Backupziel einsehen)    
if [ "$EMAIL" ]; then
    $SSMTP $EMAIL < $LOG
    fi
 

Tommes

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
26. Okt 2009
Beiträge
9.088
Punkte für Reaktionen
1.072
Punkte
314
@PsychoHH

OK, das mit dem - Fehler $? - hat schon mal geklappt. Keine Ahnung was da gestern bei mir schief geaufen ist. Irgendwie habe ich es geschafft, das mir das Script permanent Meldungen per DSM als auch per Mail zugeschoben hat.... und nach der 30'sten Mail hab ich dann mal eben die DS neu gestartet :D
Anwender mit gefährlichen Halbwissen eben.

Den Part mit der Laufwerksabfrage hab ich noch nicht getestet, ist für mich aber auch nicht weiter interessant, da sich die Zahl der Backuplaufwerke bei mir doch stark in Grenzen hält und ich im Aufgabenplaner aussagekräftige Beschreibungen für das jeweils auszuführende "manuell eingeleitete" Script verwenden werde. Aber auch hierfür schon mal... vielen vielen Dank.
Vielleicht bau ich es spaßeshalber mal ein... mal schaun.

Tommes
 

Iarn

Benutzer
Sehr erfahren
Mitglied seit
16. Jun 2012
Beiträge
2.935
Punkte für Reaktionen
338
Punkte
129
Ein Skript macht nach meinem Verständnis nichts anderes als das, was man auch auf der Konsole macht.

Ja so kenne ich es auch von meinen Desktop Linuxen. Damit wäre der Einwand gegen StoreBackup aus meiner Sicht egalisiert
 

Tommes

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
26. Okt 2009
Beiträge
9.088
Punkte für Reaktionen
1.072
Punkte
314
Ich muß meine Aussage revidieren. Die Idee, um mit - if find - das richtige USB-Laufwerk zu lokalisieren war doch ziemlich genial.

Ich habe das Script "rsync.sh" also auf den USB-Stick gepackt und die - if find - Abfrage in etwas abgewandelter Form eingebaut um es estwas Benutzerfreundlicher zu gestalten.

PHP:
# Backup - Ziel (Nur den Zielordner, ohne Angabe des Volumes)
# --------------------------------------------------------------
	DESTINATION="/Backup"

...
..
.

# Angeschlossenes USB-Laufwerk lokalisieren und Ziel definieren	
if find /volumeUSB1/usbshare/rsync.sh; then
	TARGET="/volumeUSB1/usbshare$DESTINATION" 
	fi
if find /volumeUSB2/usbshare/rsync.sh; then       
	TARGET="/volumeUSB2/usbshare$DESTINATION"             
	fi

Dann habe ich im Aufgabenplaner ein neues "benutzerdefiniertes Script" erstellt, welches durch "root" ausgeführt werden soll und unter Aufgabeneinstellungen/Befehl ausführen... in dem Textfeld dann das eingetragen...

PHP:
if find /volumeUSB1/usbshare/rsync.sh; then
/volumeUSB1/usbshare/rsync.sh
fi
if find /volumeUSB2/usbshare/rsync.sh; then
/volumeUSB2/usbshare/rsync.sh
fi

Ich habe dann zwei USB-Stick je als volumeUSB1 und volumeUSB2 an die DS gestöpselt, das "rsync.sh"-Script auf den USB-Stick "volumeUSB1" kopiert und um Aufgbenplaner das Script angestoßen. Danach dann das "rsync.sh"-Script nach volumeUSB2 verschoben und ebenfalls im Aufgabenplaner das Script ausgeführt.

LÄUFT

Jedoch muß der Zielordner ( in meinem Fall /Backup) bereits existieren, sonst hagelt es Fehlermeldungen. Also muß ich jetzt noch eine Abfrage einbauen, ob der Ordner bereits existiert und falls nicht, das dieser erstellt werden soll. Werd ich gleich mal probieren, dürfte ja nicht so schwer sein :D

Ihr seht, so langsam wird das Script richtig gut!

Ungeklärte Frage: Manche DS'en haben ja einen Front-USB. Heißt der dann automatisch volumeUSB3 ?

Tommes
 

PsychoHH

Benutzer
Mitglied seit
03. Jul 2013
Beiträge
2.967
Punkte für Reaktionen
4
Punkte
78
Ja heißt volumeUSB3 und volumeSATA kannst du auch noch reintun :)

Man könnte jetzt noch das script auf der jeweiligen Platte ändern, sodass unterschiedliche Ordner gesichert werden.
also einfach auf jede Platte ein Script rsync.sh erstellen und unterschiedlich konfigurieren, so ist es auch egal an welchen Port man diese anschließt.

Platte 1 dann z.B. photo
Platte 2 dann z.B. music/homes
Platte 3 dann z.B. geheim/homes/photo/music usw...


mkdir -p /Backup sollte einfach den Ordner erstellen, falls dieser nicht existiert :)
Mach das aber ruhig in das Script direkt auf der Platte, sonst wird dieses noch auf der DS erstellt.
 
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