[Projekt] rsync -Alternative dateibasierte Datensicherung

Status
Für weitere Antworten geschlossen.

PsychoHH

Benutzer
Mitglied seit
03. Jul 2013
Beiträge
2.967
Punkte für Reaktionen
4
Punkte
78
Dank Umzug ist meine zweit DS gerade nicht angeschlossen und ich kann es nicht testen.

Vielleicht klappt es sonst mit der Methode von dil88 oder ipkg?

Eventuell testet ja mal jemand mit 5.2 :)
 

Tommes

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
26. Okt 2009
Beiträge
9.669
Punkte für Reaktionen
1.566
Punkte
314
Angepasstes Script für DSM 5

Hallo Leute!

Mir war grad langweilig und da hab ich das Script mal etwas modifiziert, so das es auch unter DSM 5 lauffähig ist. Ihr müßt nur darauf achten, das ihr die beiden Scripte nicht durcheinanderwürfelt. Das ursprüngliche Script läuft ausschließlich unter DSM 6 und das nachfolgende Script läuft nur unter DSM 5, da sich hier u.a. einige Pfadangaben unterscheiden. Auch baut das Script unter DSM 5 auf der ASH-Shell auf, unter DSM 6 jedoch auf der BASH-Shell.

Also nochmal: Das nachfolgend aufgeführte Script ist nur für DSM 5, nicht für DSM 6 geeignet.

Und bitte testet das ganze erstmal wieder mit unwichtigen Testdaten, bevor es ans Eingemachte geht. Denn ich übernehme keine Garantie auf das Ganze.



Der erste Teil des Scripts, also der Teil, der vom Aufgabenplaner ausgeführt wird, hat sich nicht geändert. Diesen könnt ihr so lassen, also so...

search-rsync.sh
Code:
#!/bin/sh
# Durchsuche volumeUSB1
if [ -f /volumeUSB1/usbshare/rsync.sh ]; then
   sh /volumeUSB1/usbshare/rsync.sh
fi

# Durchsuche volumeUSB2
if [ -f /volumeUSB2/usbshare/rsync.sh ]; then
   sh /volumeUSB2/usbshare/rsync.sh
fi

# Durchsuche volumeUSB3
if [ -f /volumeUSB3/usbshare/rsync.sh ]; then
   sh /volumeUSB3/usbshare/rsync.sh
fi

# Durchsuche volumeSATA
if [ -f /volumeSATA/usbshare/rsync.sh ]; then
   sh /volumeSATA/usbshare/rsync.sh
fi

Der zweite Teil ist, wie oben bereits erwähnt, nur für DSM 5 geeignet.

rsync.sh
Code:
#!/bin/sh

#Wichtiger Hinweis
#-------------------------------------------------------------------------
# Auch wenn dieses Script intensiv auf einwandfreie Funktion hin getestet|
# wurde so kann eine Fehlfunktion und demzufolge ein möglicher           |
# Datenverlust nicht ausgeschlossen werden.                              |
# Daher nutzt ihr dieses Script auf eigene Gefahr.                       |
# Aus diesem Grunde solltet ihr dieses System erstmal mit unwichtigen    |
# Testdaten auf seine Funktion hin testen, bevor ihr das ganze           |
# "produktiv" einsetzt.                                                  |
#-------------------------------------------------------------------------

#Kurze Funktionsbeschreibung "rsync.sh"
#-------------------------------------------------------------------------
# Das vorliegende Script, welches den Dateinamen "rsync.sh" tragen muss, |
# wird auf dem externen Datenträger in dessen Wurzelverzeichnis abgelegt,|
# auf dem die Datensicherung stattfinden soll. Entsprechend muß dieses   |
# Script im Vorfeld den Begebenheiten angepasst, werden indem man        |
# E-Mail-Adresse, Backupquellen und das Ziel definiert.                  |
#                                                                        |
# Nachdem das Script "search-rsync.sh" dieses Script gefunden und        |
# ausgeführt hat, wird der eigentlich Backupvorgang initiert.            |
#                                                                        |
# Im folgenden wird erstmal Anhand einer Abfrage erkannt, an welchen     |
# USB- oder SATA Anschluss sich der externe Datenträger befindet um die  |
# Pfade im Script entsrechend anpassen zu können. Der so ermittelte      |
# Laufwerkspfad wird dem Ziel-Ordner vorangestellt um so das Backup      |
# an der richtigen Stelle absetzen zu können.                            |
#                                                                        |
# Das Backup selber synchronisiert die Quellen mit dem Ziel. Dabei werden|
# die Ornderpfade relativ, nach Volume angelegt. Gelöschte Dateien       |
# in der Quelle werden im Ziel in den Ordner @Recycle verschoben um      |
# einen möglichen Datenverlust vorzubeugen. Systemorder wie z.B. /@eaDIR,|
# /#recycle etc. werden von der Synchronisation ausgeschlossen.          |
#                                                                        |
# Des weiteren wird ein Protokoll in den Ordner @Logfiles geschrieben    |
# welches man sich bei Bedarf auch per E-Mail zusenden lassen kann.      |
# Außerdem erhält die DSM-Administratorengruppe über das                 |
# Benachrichtigungssystems des DSM eine Meldung über Erfolg oder         |
# Misserfolg des Vorganges inkl. Fehler-Code. Der Fehlercode enstammt    |
# hierbei den exit-codes von rsync und kann bei Bedarf ergooglet werden. |
# ------------------------------------------------------------------------


# E-Mail Adresse
# ------------------------------------------------------------------------ 
# Bei Angabe einer E-Mail-Adresse, die identisch mit der bereits im DSM  |
# unter Hauptmenue/Systemsteuerung/Benachrichtigung hinterlegten         |
# E-Mail-Adresse sein muß, wird einem das Sicherungsprotokoll zugestellt |
# Möchte man dies nicht, kann das Feld mit # auskommentiert werden. Es   |
# wird dann nur ein Sicherungsprotokoll unter @Logfiles im Ziel abgelegt.|
# ------------------------------------------------------------------------
  EMAIL="you@mail.de"
 
# Backup - Quellen  
# ------------------------------------------------------------------------                                                
# Hier können beliebige sowie unterschiedliche Backupquellen von der DS  |
# eingetragen werden. Zu beachten ist, das immer der vollständige Pfad   |
# unter Angabe des entsprechenden Volume anzugeben ist. Weiterhin ist auf|
# die Schreibweise im Beispiel zu achten, pro Zeile je eine Backupquelle.|
# ------------------------------------------------------------------------
SOURCES="/volume1/Musik/Alben
	 /volume2/Fotos
	 /volume3/Videos/Serien
	 /volume1/homes/admin"

# Backup - Ziel		   
# ------------------------------------------------------------------------				  
# Als Backupziel bedarf es nur der Angabe des Ordners, worin das Backup  |
# abgelegt werden soll. Das Script erkennt automatisch an welchen USB-   |
# oder SATA-Port sich der externe Datenträger befindet (volumeUSB1,      |
# volumeUSB2, volumeUSB3 oder volumeSATA) und fügt die Ordnerstruktur    |
# dementsprechnend dem Backupziel hinzu.                                 |
# ------------------------------------------------------------------------
  DESTINATION="/Backup_DS"
	
	
# ------------------------------------------------------------------------
# Ab hier bitte nichts mehr ändern                                       |
# ------------------------------------------------------------------------

# Umgebungsvariablen definieren
  SSMTP="/usr/bin/ssmtp"
  RSYNC="/usr/syno/bin/rsync"
  MKDIR="/bin/mkdir"
  FIND="/usr/bin/find" 
  ECHO="/bin/echo"
  DATE="/bin/date +%Y-%m-%d_%H%M"
  TIMESTAMP="/bin/date +%d.%m.%Y_%H:%M:%S"
  SYNODSMNOTIFY="/usr/syno/bin/synodsmnotify"
  
# Angeschlossenes USB-Laufwerk lokalisieren und Ziel definieren (DSM 5)   
if $FIND /volumeUSB1/usbshare/rsync.sh; then
    $MKDIR -p /volumeUSB1/usbshare$DESTINATION
    TARGET="/volumeUSB1/usbshare$DESTINATION" 
    fi
if $FIND /volumeUSB2/usbshare/rsync.sh; then  
    $MKDIR -p /volumeUSB2/usbshare$DESTINATION
    TARGET="/volumeUSB2/usbshare$DESTINATION"             
    fi
if $FIND /volumeUSB3/usbshare/rsync.sh; then  
    $MKDIR -p /volumeUSB3/usbshare$DESTINATION
    TARGET="/volumeUSB3/usbshare$DESTINATION"             
    fi    
if $FIND /volumeSATA/usbshare/rsync.sh; then 
    $MKDIR -p /volumeSATA/satashare$DESTINATION
    TARGET="/volumeSATA/satashare$DESTINATION"             
    fi
    
	
# Ordner und Datei für das Protokoll anlegen und bei Bedarf die E-Mail-Kopfdaten generieren
  $MKDIR -p $TARGET/@Logfiles
  LOG="$TARGET/@Logfiles/`$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 $SOURCES; do
		$ECHO "" >> $LOG
		$ECHO "--> Zusammenfassung: $SHARE nach $TARGET" >> $LOG
		$RSYNC -ahR "$SHARE" --stats --log-file-format="%i %o %f" --exclude=/@eaDir/*** --exclude=/#recycle/*** --exclude=/#snapshot/*** --exclude=/.DS_Store/*** --delete --backup --backup-dir=@Recycle/`$DATE` "$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 $TARGET" >> $LOG        
		DSMNOTIFY="rsync-Datensicherung erfolgreich abgeschlossen $TARGET"            
		
	elif [ $? -ne 0 ]; then                
		$ECHO  "" >> $LOG            
		$ECHO "rsync-Datensicherung fehlgeschlagen - Fehler $? $TARGET" >> $LOG            
		DSMNOTIFY="rsync-Datensicherung fehlgeschlagen - Fehler $? $TARGET"    
	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

Viel Spaß damit, ich hoffe es gefällt euch.

Feedback erwünscht.

Tommes
 
Zuletzt bearbeitet:

dil88

Benutzer
Contributor
Sehr erfahren
Mitglied seit
03. Sep 2012
Beiträge
30.679
Punkte für Reaktionen
2.082
Punkte
829
Wenn sich die Versionen nur durch die binary-Pfade unterscheiden und ich nichts falsch gemacht habe, dann müsste das folgende Skript sowohl unter DSM 5.2 als auch DSM 6.0 laufen:

Rich (BBCode):
#!/bin/sh

# Wichtiger Hinweis
# -------------------------------------------------------------------------
# Auch wenn dieses Script intensiv auf einwandfreie Funktion hin getestet|
# wurde so kann eine Fehlfunktion und demzufolge ein möglicher           |
# Datenverlust nicht ausgeschlossen werden.                              |
# Daher nutzt ihr dieses Script auf eigene Gefahr.                       |
# Aus diesem Grunde solltet ihr dieses System erstmal mit unwichtigen    |
# Testdaten auf seine Funktion hin testen, bevor ihr das ganze           |
# "produktiv" einsetzt.                                                  |
# -------------------------------------------------------------------------

# Kurze Funktionsbeschreibung "rsync.sh"
# -------------------------------------------------------------------------
# Das vorliegende Script, welches den Dateinamen "rsync.sh" tragen muss, |
# wird auf dem externen Datenträger in dessen Wurzelverzeichnis abgelegt,|
# auf dem die Datensicherung stattfinden soll. Entsprechend muß dieses   |
# Script im Vorfeld den Begebenheiten angepasst, werden indem man        |
# E-Mail-Adresse, Backupquellen und das Ziel definiert.                  |
#                                                                        |
# Nachdem das Script "search-rsync.sh" dieses Script gefunden und        |
# ausgeführt hat, wird der eigentlich Backupvorgang initiert.            |
#                                                                        |
# Im folgenden wird erstmal Anhand einer Abfrage erkannt, an welchen     |
# USB- oder SATA Anschluss sich der externe Datenträger befindet um die  |
# Pfade im Script entsrechend anpassen zu können. Der so ermittelte      |
# Laufwerkspfad wird dem Ziel-Ordner vorangestellt um so das Backup      |
# an der richtigen Stelle absetzen zu können.                            |
#                                                                        |
# Das Backup selber synchronisiert die Quellen mit dem Ziel. Dabei werden|
# die Ornderpfade relativ, nach Volume angelegt. Gelöschte Dateien       |
# in der Quelle werden im Ziel in den Ordner @Recycle verschoben um      |
# einen möglichen Datenverlust vorzubeugen. Systemorder wie z.B. /@eaDIR,|
# /#recycle etc. werden von der Synchronisation ausgeschlossen.          |
#                                                                        |
# Des weiteren wird ein Protokoll in den Ordner @Logfiles geschrieben    |
# welches man sich bei Bedarf auch per E-Mail zusenden lassen kann.      |
# Außerdem erhält die DSM-Administratorengruppe über das                 |
# Benachrichtigungssystems des DSM eine Meldung über Erfolg oder         |
# Misserfolg des Vorganges inkl. Fehler-Code. Der Fehlercode enstammt    |
# hierbei den exit-codes von rsync und kann bei Bedarf ergooglet werden. |
# ------------------------------------------------------------------------

# E-Mail Adresse
# ------------------------------------------------------------------------
# Bei Angabe einer E-Mail-Adresse, die identisch mit der bereits im DSM  |
# unter Hauptmenue/Systemsteuerung/Benachrichtigung hinterlegten         |
# E-Mail-Adresse sein muß, wird einem das Sicherungsprotokoll zugestellt |
# Möchte man dies nicht, kann das Feld mit # auskommentiert werden. Es   |
# wird dann nur ein Sicherungsprotokoll unter @Logfiles im Ziel abgelegt.|
# ------------------------------------------------------------------------
EMAIL="you@mail.de"

# Backup - Quellen
# ------------------------------------------------------------------------
# Hier können beliebige sowie unterschiedliche Backupquellen von der DS  |
# eingetragen werden. Zu beachten ist, das immer der vollständige Pfad   |
# unter Angabe des entsprechenden Volume anzugeben ist. Weiterhin ist auf|
# die Schreibweise im Beispiel zu achten, pro Zeile je eine Backupquelle.|
# ------------------------------------------------------------------------
SOURCES="/volume1/Musik/Alben
	 /volume2/Fotos
	 /volume3/Videos/Serien
	 /volume1/homes/admin"

# Backup - Ziel
# ------------------------------------------------------------------------
# Als Backupziel bedarf es nur der Angabe des Ordners, worin das Backup  |
# abgelegt werden soll. Das Script erkennt automatisch an welchen USB-   |
# oder SATA-Port sich der externe Datenträger befindet (volumeUSB1,      |
# volumeUSB2, volumeUSB3 oder volumeSATA) und fügt die Ordnerstruktur    |
# dementsprechnend dem Backupziel hinzu.                                 |
# ------------------------------------------------------------------------
DESTINATION="/Backup_DS"

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

# Umgebungsvariablen definieren
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/syno/bin:/usr/syno/sbin
DATEOPT="+%Y-%m-%d_%H%M"
TIMESTAMPOPT="+%d.%m.%Y_%H:%M:%S"

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

# Ordner und Datei für das Protokoll anlegen und bei Bedarf die E-Mail-Kopfdaten generieren
mkdir -p $TARGET/@Logfiles
LOG="$TARGET/@Logfiles/`date $DATEOPT`_Sicherungsprotokoll.log"

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

# rsync - Befehl ausführen sowie protokollieren
for SHARE in $SOURCES; do
  echo "" >> $LOG
  echo "--> Zusammenfassung: $SHARE nach $TARGET" >> $LOG
  rsync -ahR "$SHARE" --stats --log-file-format="%i %o %f" --exclude=/@eaDir/*** --exclude=/#recycle/*** --exclude=/#snapshot/*** --exclude=/.DS_Store/*** --delete --backup --backup-dir=@Recycle/`date $DATEOPT` "$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 $TARGET" >> $LOG
  DSMNOTIFY="rsync-Datensicherung erfolgreich abgeschlossen $TARGET"
elif [ $? -ne 0 ]; then
  echo  "" >> $LOG
  echo "rsync-Datensicherung fehlgeschlagen - Fehler $? $TARGET" >> $LOG
  DSMNOTIFY="rsync-Datensicherung fehlgeschlagen - Fehler $? $TARGET"
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

Ich habs nicht getestet, sondern einfach nur "blind" angepasst.
 

Tommes

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
26. Okt 2009
Beiträge
9.669
Punkte für Reaktionen
1.566
Punkte
314
Öhm... was soll ich sagen dil88... sieht eigentlich ziemlich einfach aus, was du da gemacht hast. Manchmal sieht man halt den Wald vor lauter Bäumen nicht. Ich war da schon wieder ganz woanders mit meinen Gedanken um das Script Versionsunabhängig zu bekommen.

Getestet hab ich es auch noch nicht, hoffe aber, das ich heute Abend die Zeit finde, das unter DSM 5 und 6 mal zu auszuprobieren. Vielen Dank bis dahin an dich.

Tommes
 

dil88

Benutzer
Contributor
Sehr erfahren
Mitglied seit
03. Sep 2012
Beiträge
30.679
Punkte für Reaktionen
2.082
Punkte
829
Richtig, ich hatte das in Beitrag 80 schon angesprochen. Falls es mit $DATEOPS und $TIMESTAMPOPS Probleme gibt, kann man da auch wieder mit $DATE und $TIMESTAMP arbeiten und dort dann einfach date statt /bin/date verwenden.
 

Tommes

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
26. Okt 2009
Beiträge
9.669
Punkte für Reaktionen
1.566
Punkte
314
Hab das von dir modifizierte Script unter DSM 5 und DSM 6 jeweils am volumeUSB1 sowie volumeUSB2 getestet, Backup erstellt, Daten hinzugefügt, Daten gelöscht... läuft alles prima. Somit ist das Script nun offiziell Versionsunabhängig. Ich denke, das ich das ganze mal ins Wiki packen werde... irgendwann, in naher Zukunft.

Tommes
 

tschortsch

Benutzer
Mitglied seit
16. Dez 2008
Beiträge
1.645
Punkte für Reaktionen
34
Punkte
74
Wo gibts hier den "gefällt mir" Button? :D
 

dil88

Benutzer
Contributor
Sehr erfahren
Mitglied seit
03. Sep 2012
Beiträge
30.679
Punkte für Reaktionen
2.082
Punkte
829
Fehlt, aber die Botschaft kommt ja auch so an. ;) Danke, Tommes, fürs Testen!
 

Tommes

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
26. Okt 2009
Beiträge
9.669
Punkte für Reaktionen
1.566
Punkte
314
Um dem ganzen noch die Krone aufzusetzen habe ich, wie bereits angedroht, einen Wiki-Eintrag erstellt. Vielleicht könnt ihr das ja nochmal gegenlesen um zu schauen, ob alles Top ist!

Hier erstmal der Link: http://www.synology-wiki.de/index.p...cherung_auf_einen_angeschlossenen_Datenträger

Ich habe bewusst nicht den Bereich "Modding-Themen" ausgewählt, weil man das alles ja über den DSM abwickeln kann.

Ich hoffe ich konnte damit dem ein oder anderen eine brauchbare Alternative zur DSM 6 Datenbanksicherung liefern. Mir hat das ganze hier auf jeden Fall total viel Spaß gemacht und danke nochmal allen die mir dabei geholfen haben. Vielen, vielen Dank. Ohne euch hätte ich das wohl nicht hinbekommen. So, jetzt aber genug gequatscht...

Tommes
 

dil88

Benutzer
Contributor
Sehr erfahren
Mitglied seit
03. Sep 2012
Beiträge
30.679
Punkte für Reaktionen
2.082
Punkte
829
Klasse, danke Tommes!
 

freddiek

Benutzer
Mitglied seit
12. Mrz 2013
Beiträge
30
Punkte für Reaktionen
0
Punkte
12
Hallo Tommes, di88 & Co.

habe es inzwischen auch bei meiner DS213+ mit der FW 5.2 testen können und es funktioniert 1A.

Eine Kleinigkeit ist mir jedoch aufgefallen, die vielleicht auch bei anderen Users zur Fragen führen könnte.

Folgendes Use Case:
An meiner DS213+ hängen an beiden USB Ports jeweils eine externe USB Festplatte. Der Grund dafür ist recht simpel, ich habe einfach keine einzelne Platte, die das komplette Backup vom NAS aufnehmen könnte.
Aus diesem Grund wird das Backup auf diese beide Platten gesplittet. Soweit so gut. Ich habe das search-rsync Skript im Aufgabenplaner hinterlegt und jeweils auf den externen USB Festplatten ein rsync Skript (mit angepassten Quellen und Zielen) hinterlegt. Wenn ich jetzt den Job ausführen lasse, werden auf beiden Platten beide Konfigurationen ausgeführt. Nachdem ich mir das Skript angeschaut habe, war mir auch klar warum. Abhilfe schuf bei mir eine eindeutige Kennzeichnung der Skripte und die Anpassung der jeweiligen Suchfunktionen für diese Skripte sowohl im search-rsync als auch in den jeweiligen rsync.

Wie schon gesagt, das als kleiner Hinweis für diejenigen, die 2 externe Platten gleichzeitig verwenden, auf denen 2 unterschiedlich konfigurierte rsync Skripte verwendet werden sollten.

Am Ende möchte ich noch ein dickes danke schön an alle aussprechen, die diese kultivierte Backup-Art ermöglicht haben :D

Schöne Grüße
freddiek
 

PsychoHH

Benutzer
Mitglied seit
03. Jul 2013
Beiträge
2.967
Punkte für Reaktionen
4
Punkte
78
Ich verstehe nicht ganz was du erreichen willst. Es soll doch auch so sein, dass beide Platten unterschiedliche Daten sichern oder nicht?

Sprich Ordner abc auf Platte 1 und die anderen Ordner auf Platte 2.
 

freddiek

Benutzer
Mitglied seit
12. Mrz 2013
Beiträge
30
Punkte für Reaktionen
0
Punkte
12
Hi PsychoHH

ganz genau, das ist mein Szenario.

So wie ich es verstanden habe, hinterlegst du auf der Platte 1 das Skript mit der Konfiguration Daten: ABC und auf der Platte 2 ein Skript mit der Konfiguration Daten: DEF.
Wenn ich es ohne Änderungen/Anpassungen der Skipt-Namen laufen lasse, bekomme ich folgendes Ergebnis:

Platte 1 : Daten ABC und Daten DEF
Platte 2 : Daten ABC und Daten DEF

Vielleicht wird jetzt etwas klarer was ich vorher meinte.

Gruß freddiek
 

Tommes

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
26. Okt 2009
Beiträge
9.669
Punkte für Reaktionen
1.566
Punkte
314
Hi freddiek!

Erstmal danke für deine lobenden Worte. Das Verhalten, was du da ansprichst, klingt interessant und merkwürdig zugleich. Denn eigentlich sollte das Script einen eingesteckten Datenträger am jeweiligen USB-Port automatisch erkennen (volumeUSB1, volumeUSB2 etc.) und so die Pfade im Script dementsprechend anpassen. In den erstellten Protokollen sollten diese Pfade ja hinterlegt sein, vielleicht hast du diese ja noch, bevor du das rsync.sh umbenannt hast und wirfst mal einen Blick hinein. Evtl. lassen sich daraus Rückschlüsse ziehen.

Ich werde das von dir angesprochene Verhalten auf jeden Fall mal nachstellen und schauen, ob sich das bei mir genauso verhält. Gib mir aber bitte etwas Zeit, da ich nicht weiß wann ich dazu komme.

Tommes
 

PsychoHH

Benutzer
Mitglied seit
03. Jul 2013
Beiträge
2.967
Punkte für Reaktionen
4
Punkte
78
Okay alles klar.

Ich denke wir haben nicht darüber nachgedacht was ist wenn man parallel zwei Platten betreibt. Erst dachte ich er nutzt die selbe source variable für beide Scripte. Eigentlich sollte das aber nicht passieren, wenn dann sollte ein unset helfen, wir sollten aber wohl folgenden Teil wieder ändern. Da sonst nicht mehr der aktuelle Pfad im Script als TARGET gesetzt wird.



# Angeschlossenes USB-Laufwerk lokalisieren und Ziel definieren (DSM 5)
if $FIND /volumeUSB1/usbshare/rsync.sh; then
$MKDIR -p /volumeUSB1/usbshare$DESTINATION
TARGET="/volumeUSB1/usbshare$DESTINATION"
fi
if $FIND /volumeUSB2/usbshare/rsync.sh; then
$MKDIR -p /volumeUSB2/usbshare$DESTINATION
TARGET="/volumeUSB2/usbshare$DESTINATION"
fi
if $FIND /volumeUSB3/usbshare/rsync.sh; then
$MKDIR -p /volumeUSB3/usbshare$DESTINATION
TARGET="/volumeUSB3/usbshare$DESTINATION"
fi
if $FIND /volumeSATA/usbshare/rsync.sh; then
$MKDIR -p /volumeSATA/satashare$DESTINATION
TARGET="/volumeSATA/satashare$DESTINATION"
fi

Folgendes nutzen.

# Angeschlossenes USB-Laufwerk lokalisieren und Ziel definieren
LOCATION=$(dirname "$(readlink -e "$0")")
if $FIND $LOCATION/rsync.sh; then
$MKDIR -p $LOCATION$DESTINATION
TARGET="$LOCATION$DESTINATION"

Sollte es dann noch Probleme mit der Source geben müsste man es mit unset probieren oder aber man definitiv die variable mit der aktuellen Quelle und zieht diese danach ab, so ist diese immer individuell für jedes Script.

Ich muss heute abend ml zwei Sticks anschließen und werde das testen. Hoffentlich habe ich gerade keinen Denkfehler.
 

Tommes

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
26. Okt 2009
Beiträge
9.669
Punkte für Reaktionen
1.566
Punkte
314
Das Umstellen des Scriptes nach der von dir vorgeschlagenen Methode hätte aber zur Folge, das dieses nur noch ab DSM 6 läuft. Ich hab aus Kompatibilitätsgründen wieder auf das ursprüngliche Vorgehen zurückgeswitcht. Nicht desto trotz wäre es klasse, wenn du das heute Abend mal testen könntest.

Tommes
 

freddiek

Benutzer
Mitglied seit
12. Mrz 2013
Beiträge
30
Punkte für Reaktionen
0
Punkte
12
Hallo zusammen,

Diese Info habe ich jetzt gnadenlos (jedoch nicht absichtlich :eek:) unterschlagen.
Beide Platten stecken gleichzeitig im NAS.
Wahrscheinlich ist das auch die Ursache für das oben beschriebenes Verhalten.

freddiek
 

PsychoHH

Benutzer
Mitglied seit
03. Jul 2013
Beiträge
2.967
Punkte für Reaktionen
4
Punkte
78
Das Umstellen des Scriptes nach der von dir vorgeschlagenen Methode hätte aber zur Folge, das dieses nur noch ab DSM 6 läuft. Ich hab aus Kompatibilitätsgründen wieder auf das ursprüngliche Vorgehen zurückgeswitcht. Nicht desto trotz wäre es klasse, wenn du das heute Abend mal testen könntest.

Tommes

Du hast recht.

Hab mal gebastelt.

Sollte jetzt für alle Versionen klappen.
Probier es aber spätestens morgen mal auf DSM 5/6 aus.


Wer will kann es mal probieren.

if find $0; then
mkdir -p "`dirname $0`$DESTINATION"
TARGET="`dirname $0`$DESTINATION"
fi




Jedenfalls klappt es bei mir unter DSM6. Bei meiner DSM5 DS habe ich gerade keine externe Platte dran und kann es nicht testen, ich habe das Script aber mehrmals "durchgespielt".
Das Script sollte jetzt ohne Probleme unter DSM5/6 laufen und auch parallel auf zwei Platten laufen.

Wäre gut, wenn du es mal testes freddiek



Änder mal diese zwei Sachen:

# Umgebungsvariablen definieren
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/syno/bin:/usr/syno/sbin
DATEOPT="+%Y-%m-%d_%H%M"
TIMESTAMPOPT="+%d.%m.%Y_%H:%M:%S"


# Angeschlossenes USB-Laufwerk lokalisieren und Ziel definieren
if find $0; then
mkdir -p "`dirname $0`$DESTINATION"
TARGET="`dirname $0`$DESTINATION"
fi
 
Zuletzt bearbeitet:

Tommes

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
26. Okt 2009
Beiträge
9.669
Punkte für Reaktionen
1.566
Punkte
314
PsychoHH! Was soll ich sagen... du hast mal wieder den Vogel abgeschossen. Langsam frag ich mich, wer hier von uns eigentlich das Script im Griff hat *lach*

Hab das grade mal mit 2 USB-Sticks gleichzeitig unter DSM 6 RC gestestet, läuft mit deiner Änderung absolut sauber durch und alle SOURCES landen dort, wo sie hin gehören. Unter DSM 5 hab ich das gleiche Problem wie du, das ich nur einen USB-Port frei habe, aber auch hier läuft das Script sauber durch. Und da alle Tests positiv verlaufen sind, habe ich gleich mal den WIKI-Eintrag angepasst.

Klasse Arbeit, Psycho und mal wieder ein dickes Dankeschön.

Tommes
 

PsychoHH

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

Ich habe einfach mal überlegt warum es nicht unter DSM 5 ging. Und habe mich dann kurz per ssh auf die entfernte DS verbunden und probiert wie es denn unter DSM 5 geht.
Wie gesagt ich kann gerade keine externe Anschließen, da sie woanders steht. Also wäre es gut, wenn jemand das nochmal unter DSM 5 testet.


Einen hab ich aber noch ...

Ich habe dein Search Script kurz angepasst.
Nun kann man einfach die Scripte verschieden bennen z.B. rsyncMusik.sh rsyncBilder.sh usw..
Es geht aber auch Backup.rsync.Musik.sh Hauptsache rsync kommt vor.

Weiterhin ist es egal an welchen Port die Platte angeschlossen wird, auch tauschen sollte möglich sein.
Es dient einfach zu leichteren Erkennung der Konfiguration.



#!/bin/sh
# Durchsuche volumeUSB1
if [ -f /volumeUSB1/usbshare/*"rsync"*.sh ]; then
sh /volumeUSB1/usbshare/*"rsync"*.sh
fi


# Durchsuche volumeUSB2
if [ -f /volumeUSB2/usbshare/*"rsync"*.sh ]; then
sh /volumeUSB2/usbshare/*"rsync"*.sh
fi


# Durchsuche volumeUSB3
if [ -f /volumeUSB3/usbshare/*"rsync.sh"* ]; then
sh /volumeUSB3/usbshare/*"rsync"*.sh
fi


# Durchsuche volumeSATA
if [ -f /volumeSATA/usbshare/*"rsync"*.sh ]; then
sh /volumeSATA/usbshare/*"rsync"*.sh
fi
 
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