Dateibasierte RSync-Datensicherung auf externen Datenträger oder RSync kompatiblen Server: Unterschied zwischen den Versionen

Aus
Zeile 53: Zeile 53:
Nachdem das jeweilige Script aus dem Wiki in die Zwischenablage kopiert und im Text-Editor eingefügt wurde, kann die entsprechende Datei über "Speichern unter..." am gewünschten Ort abgespeichert werden. Scripte die später über den Aufgabenplaner ausgeführt werden, müssen noch die entsprechenden Berechtigungen erhalten um das jeweilige Script "ausführbar" zu machen (In der schematischen Darstellung mit einem * gekennzeichnet). Dazu muss man in der FileStation mit einem rechtsklick auf die betreffenden Datei gehen und im Kontextmenü den Menüpunkt "Eigenschaften" auswählen. Dort angekommen wechselt man zum Reiter "Genehmigung" und weiter auf die Schaltfläche "Erweiterte Optionen" um darauffolgend den Punkt "Übernommene Genehmigungen einschließen" auszuwählen. Zum Schluss bestätigt man das Ganze mit der Schaltfläche "OK" (Die Datei sollte jetzt die Berechtigung rwxrw-rw, bzw. 766 haben)
Nachdem das jeweilige Script aus dem Wiki in die Zwischenablage kopiert und im Text-Editor eingefügt wurde, kann die entsprechende Datei über "Speichern unter..." am gewünschten Ort abgespeichert werden. Scripte die später über den Aufgabenplaner ausgeführt werden, müssen noch die entsprechenden Berechtigungen erhalten um das jeweilige Script "ausführbar" zu machen (In der schematischen Darstellung mit einem * gekennzeichnet). Dazu muss man in der FileStation mit einem rechtsklick auf die betreffenden Datei gehen und im Kontextmenü den Menüpunkt "Eigenschaften" auswählen. Dort angekommen wechselt man zum Reiter "Genehmigung" und weiter auf die Schaltfläche "Erweiterte Optionen" um darauffolgend den Punkt "Übernommene Genehmigungen einschließen" auszuwählen. Zum Schluss bestätigt man das Ganze mit der Schaltfläche "OK" (Die Datei sollte jetzt die Berechtigung rwxrw-rw, bzw. 766 haben)


Nachdem die Privilegien richtig gesetzt wurden, kann das Script unter Hauptmenü/Systemsteuerung in den Aufgabenplaner aufgenommen werden, ohne die Aufgabe jedoch vorerst auszuführen. Dazu wählt man unter DSM 6 "Erstellen" --> "Geplante Aufgabe" --> "Benutzerdefiniertes Script". Im Reiter "Allgemein" kann man unter "Vorgang" einen individuellen Namen für die Aufgabe vergeben und als Benutzer sollte "root" ausgewählt werden, möchte man eine "lokale" Datensicherung durchführen. Bei einer Netzwerksicherung über eine SSH-Verbindung muss hier der Benutzer angegeben werden, auf dem der RSA-Key ausgestellt wurde, in unserem Fall (siehe Anleitung unten) ist das der Benutzer "admin". Die Checkbox "Aktiviert" wird nur benötigt, sollte das Script automatisiert, also Zeitgesteuert gestartet werden. Dazu wäre dann im nächsten Schritt unter dem Reiter der "Zeitplan" zu definieren. Im Reiter "Aufgabeneinstellungen" muss jetzt noch unter dem Punkt "Befehl ausführen" der Pfad zum "Benutzerdefinierten Script" angegeben werden, also z.B. /volume1/ScriptStuff/search-rsync.sh. Nach dem Bestätigen mit "OK" wird die Aufgabe dem Aufgabenplaner hinzugefügt und kann später, falls gewünscht, nach dem Markieren der Aufgabe, über die Schaltfläche "Ausführen" manuell ausgeführt werden.
Nachdem die Privilegien richtig gesetzt wurden, kann das Script unter Hauptmenü/Systemsteuerung in den Aufgabenplaner aufgenommen werden, ohne die Aufgabe jedoch vorerst auszuführen. Dazu wählt man unter DSM 6 "Erstellen" --> "Geplante Aufgabe" --> "Benutzerdefiniertes Script". Im Reiter "Allgemein" kann man unter "Vorgang" einen individuellen Namen für die Aufgabe vergeben und als Benutzer sollte "root" ausgewählt werden. Bei einer Netzwerksicherung über eine SSH-Verbindung muss hier der Benutzer angegeben werden, auf dem der RSA-Key ausgestellt wurde, in unserem Fall (siehe Anleitung unten) ist das der Benutzer "root". (Nur unter dem Benutzer "root" funktioniert die Signaausgabe sowie die Sicherung der DSM-Konfiguration) Die Checkbox "Aktiviert" wird nur benötigt, sollte das Script automatisiert, also Zeitgesteuert gestartet werden. Dazu wäre dann im nächsten Schritt unter dem Reiter der "Zeitplan" zu definieren. Im Reiter "Aufgabeneinstellungen" muss jetzt noch unter dem Punkt "Befehl ausführen" der Pfad zum "Benutzerdefinierten Script" angegeben werden, also z.B. /volume1/ScriptStuff/search-rsync.sh. Nach dem Bestätigen mit "OK" wird die Aufgabe dem Aufgabenplaner hinzugefügt und kann später, falls gewünscht, nach dem Markieren der Aufgabe, über die Schaltfläche "Ausführen" manuell ausgeführt werden.


=Script: search-rsync.sh (Suchscript für die "lokale" Datensicherung)=
=Script: search-rsync.sh (Suchscript für die "lokale" Datensicherung)=

Version vom 30. März 2016, 08:44 Uhr

Einleitung

Mit dem Start der DSM 6 Beta und Hyper Backup wurde die dateibasierte Datensicherung bis auf weiteres auf Eis gelegt. Stattdessen werden die gesicherten Daten in einer Datenbank abgelegt, auf die man erstmal keinen direkten Zugriff hat. Zum wiederherstellen dieser Daten ist entweder ein NAS-System von Synology oder eine von Synology bereitgestellte Zusatzsoftware, dem "Hyper Backup Explorer" erforderlich, welchen es aktuell jedoch nur für Windows und Ubuntu gibt. Da in meinen Augen eine dateibasierte Datensicherung jedoch eine elementare Funktion darstellt, suchte ich nach einer Möglichkeit auch weiterhin nach diesem Prinzip meine persönlichen Daten zu sichern. Dabei lag mein Fokus auf eine einfache und handliche Funktionsweise sowie eine unkomplizierte Einrichtung über den DSM.

Anmerkung

Bevor ihr anfangt, nehmt bitte noch den Artikel "Wichtige Informationen zum Modden der Synology Stations" zur Kenntnis.

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 verwendet ihr dieses Script auf eigene Gefahr. Aus diesem Grunde solltet ihr das System erstmal mit unwichtigen Testdaten auf Herz und Nieren prüfen, bevor ihr das ganze "produktiv" einsetzt. Auch ist es immer ratsam, bereits ein Backup seiner Daten in Reichweite zu haben.

Voraussetzungen

  • Umgang mit dem DSM Aufgabenplaner
  • Umgang mit einem Editor seiner Wahl (z.B. Notepad++ oder dem DSM Text-Editor)
  • Grundkenntnisse im Umgang mit Shell-Scripten
  • Umgang mit der Konsole (bei Verwendung des SSH-Zuganges)
  • Zum versenden einer E-Mail muss im DSM unter Hauptmenü/Systemsteuerung/Benachrichtigung eine E-Mail Adresse hinterlegt sein.
  • Ein externer USB- oder SATA-Datenträger, eine weitere Synology Diskstation oder einen rsync-kompatiblen Server im Netzwerk.

Erläuterungen zur Funktion und Arbeitsweise

Mit dem hier vorgestellten System ist sowohl eine Datensicherung auf einen lokal angeschlossenen USB- oder SATA-Datenträger, als auch eine Netzwerksicherung auf eine weitere Synology Diskstation bzw. einem rsync-kompatiblen Server im Netzwerk möglich (SSH-Zugang vorausgesetzt). Die gewünschte Ausgangssituation bestimmt die Art und Weise der Scriptausführung, die im folgenden schematisch dargestellt wird:

  Aufgabenplaner                   
  (manuell/auto) ------ SSH -----> /NetBackup/*ssh_rsync.sh						   			 
        | 	(Server <- Client)             |              
        |	                               '-> /Backup
      LOCAL	    ------------   				 
	|	   | volumeUSB1 |				
	|	   |            |				
	v	   | volumeUSB2 |				
*search-rsync.sh ->|            |---------> /local_rsync.sh
		   | volumeUSB3 |             |
		   |		|             '-> /Backup
		   | volumeSATA |
	            ------------ 				   

Datensicherung auf einen "lokal" angeschlossenen USB- oder SATA-Datenträger

Bei einer "lokalen" Datensicherung wird das Script "search-rsync.sh" manuell oder automatisiert über den DSM-Aufgabenplaner ausgeführt. Das Script "local_rsync.sh" wird auf einen an der DS angeschlossenen, externen USB- oder SATA-Datenträger in dessen Wurzelverzeichnis abgelegt, auf dem die Datensicherung erfolgen soll. Nach dem Start über den Aufgabenplaner versucht das Script "search-rsync.sh" anhand einiger Abfragen zu erkennen, an welchem USB- oder SATA Anschluss sich der externe Datenträger und somit das Ausführungs-Script "local_rsync.sh" befindet um es auszuführen.

Datensicherung auf eine weitere Synology Diskstation bzw. einem rsync-kompatiblen Server im Netzwerk

Bei der "SSH" Datensicherung wird das Script "ssh_rsync.sh" direkt über den Aufgabenplaner angesprochen, ohne den Umweg über das "search-rsync.sh" zu gehen. Der Speicherort des Scripts ist hierbei erstmal nicht relevant, jedoch wird empfohlen es in dem "gemeinsamen Ordner" auf der Diskstation abzulegen, indem die Datensicherung stattfinden soll, wie hier beispielhaft unter /NetBackup (der genaue Speicherort kann auch über das Script gesteuert werden). Weiterhin muss ein RSA-Schlüssel über die Konsole angelegt werden um so den automatischen Verbindungsaufbau per SSH zu ermöglichen. Wie das geht, wird weiter unten beschrieben.

Grundlegende Arbeitsweise des Ausführungs-Scriptes

Das Backup selber synchronisiert sämtliche konfigurierte Quellen mit dem Backupziel. Dabei werden die Ordnerpfade relativ, nach dem jeweiligen Volume (1,2,3,4….) 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, /#snapshot und /.DS_Store 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. Protokolle und zum Löschen vorgemerkte Dateien, sowie die Sicherung der DSM-Konfiguration können nach Ablauf einer einstellbaren Zeitvorgabe (in Tagen) automatisch über das System gelöscht werden. 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 entstammt hierbei den exit-codes von rsync und kann unter dem Punkt „Externe Links“ entnommen werden. Optional kein eine optische und akustische Signalausgabe ausgewählt werden.

Hinweise zum Erstellen und ausführen der Scripte

Die hier verwendeten Script-Dateinamen dienen nur der Veranschaulichung und können, unter Beachtung einiger Rahmenbedingungen nach Belieben verändert werden. Für die Erstellung der Scripte wurde im DSM unter dem Benutzer "admin" der DSM eigene Text-Editor, der evtl. noch über das Paketzentrum installiert werden muss, verwendet. Wichtig ist das im Editor unter "Voreinstellungen" im Reiter "Bearbeiten" als Standardcodierung "Unicode (UTF-8)" ausgewählt wird.

Nachdem das jeweilige Script aus dem Wiki in die Zwischenablage kopiert und im Text-Editor eingefügt wurde, kann die entsprechende Datei über "Speichern unter..." am gewünschten Ort abgespeichert werden. Scripte die später über den Aufgabenplaner ausgeführt werden, müssen noch die entsprechenden Berechtigungen erhalten um das jeweilige Script "ausführbar" zu machen (In der schematischen Darstellung mit einem * gekennzeichnet). Dazu muss man in der FileStation mit einem rechtsklick auf die betreffenden Datei gehen und im Kontextmenü den Menüpunkt "Eigenschaften" auswählen. Dort angekommen wechselt man zum Reiter "Genehmigung" und weiter auf die Schaltfläche "Erweiterte Optionen" um darauffolgend den Punkt "Übernommene Genehmigungen einschließen" auszuwählen. Zum Schluss bestätigt man das Ganze mit der Schaltfläche "OK" (Die Datei sollte jetzt die Berechtigung rwxrw-rw, bzw. 766 haben)

Nachdem die Privilegien richtig gesetzt wurden, kann das Script unter Hauptmenü/Systemsteuerung in den Aufgabenplaner aufgenommen werden, ohne die Aufgabe jedoch vorerst auszuführen. Dazu wählt man unter DSM 6 "Erstellen" --> "Geplante Aufgabe" --> "Benutzerdefiniertes Script". Im Reiter "Allgemein" kann man unter "Vorgang" einen individuellen Namen für die Aufgabe vergeben und als Benutzer sollte "root" ausgewählt werden. Bei einer Netzwerksicherung über eine SSH-Verbindung muss hier der Benutzer angegeben werden, auf dem der RSA-Key ausgestellt wurde, in unserem Fall (siehe Anleitung unten) ist das der Benutzer "root". (Nur unter dem Benutzer "root" funktioniert die Signaausgabe sowie die Sicherung der DSM-Konfiguration) Die Checkbox "Aktiviert" wird nur benötigt, sollte das Script automatisiert, also Zeitgesteuert gestartet werden. Dazu wäre dann im nächsten Schritt unter dem Reiter der "Zeitplan" zu definieren. Im Reiter "Aufgabeneinstellungen" muss jetzt noch unter dem Punkt "Befehl ausführen" der Pfad zum "Benutzerdefinierten Script" angegeben werden, also z.B. /volume1/ScriptStuff/search-rsync.sh. Nach dem Bestätigen mit "OK" wird die Aufgabe dem Aufgabenplaner hinzugefügt und kann später, falls gewünscht, nach dem Markieren der Aufgabe, über die Schaltfläche "Ausführen" manuell ausgeführt werden.

Script: search-rsync.sh (Suchscript für die "lokale" Datensicherung)

Vom Prinzip her ist es egal, an welchem Ort das Script abgelegt wird. Es macht jedoch Sinn das Script dort abzulegen, wo man es bei Bedarf von der DSM-Oberfläche aus bearbeiten kann. Ich habe hierfür z.B. eigens einen gemeinsamen Ordner Namens „ScriptStuff“ angelegt. Der Name des Scriptes spielt hier auch keine Rolle und kann frei vergeben werden. Wichtig ist nur, dass das Script die Endung .sh trägt und ausführbar ist. Als Beispiel habe ich das Script „search-rsync.sh“ genannt.

Script: search_rsync.sh

#!/bin/sh

# Zeichenkette für Script-Dateinamen definieren
# ------------------------------------------------------------------------
# Es ist nicht erforderlich, den kompletten Script-Dateinamen anzugeben. |
# Es reicht die Eingabe einer Zeichenkette, die in jedem auszuführenden  |
# Script-Dateinamen enthalten sein muss.                                 |
# Beispiele für die Zeichenkette: "local" = local_Backup_Filme.sh        |
# local_Filme.sh oder auch Filme_local_sichern.sh                        |
#-------------------------------------------------------------------------
SCRIPT_STRING="local"

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

for SCRIPT in /volume*/*share/*$SCRIPT_STRING*.sh
  do
    if [ -f $SCRIPT ]; then
    sh $SCRIPT
    fi
  done

Script: ..._rsync.sh (Ausführungsscript für die "lokale" oder "SSH" Datensicherung)

Das nächste Script mit dem beispielhaften Script-Dateinamen "local_rsync.sh" für lokale bzw. "ssh_rsync.sh" für Netzwerk-Datensicherungen, wird entweder auf den entsprechenden externen USB- oder SATA-Datenträger in dessen Wurzelverzeichnis oder aber in einen "gemeinsamen Ordner" auf der Diskstation abgelegt, auf dem die Datensicherung abgelegt werden soll. Vor der ersten Ausführung des Scriptes müssen im Vorfeld noch die Backup-Quellen (SOURCES), der Backup-Zielordner (DESTINATION) sowie ggfls. eine E-Mailadresse (EMAIL) und bei Bedarf die SSH-Verbindungsdaten eingegeben werden. Ebenso kann eine Zeitvorgabe für das Löschen alter Logdateien und zum Löschen vorgemerkter Dateien bestimmt werden, sowie eine Signalsteuerung miteinbezogen werden.

Es ist hierbei durchaus möglich, unterschiedliche Scripte mit unterschiedlichen Backup-Aufgaben auszuführen, die dabei auch auf unterschiedlichen Datenträgern oder auf der DS (bei SSH-Verbindungen) abgelegt wurden. Es ist nicht zwingend erforderlich, das alle Scripte permanent Verfügbar sind. Alle gefundenen Scripte werden ausgeführt, nicht auffindbare Scripte werden übersprungen. Hierzu bitte auch die weiteren Hinweise in den Scripten beachten. Nachdem alle Parameter bestimmt wurden, kann man den Vorgang über den Aufgabenplaner ausführen lassen.

Script: local_rsync.sh oder ssh_rsync.sh

#!/bin/sh

# E-Mail Adresse, SSH-Benutzer sowie Netzwerkquelle
# ------------------------------------------------------------------------ 
# 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.|
# Weiterhin wird hier der SSH-Benutzer, sowie die Netzwerkquelle in Form |
# der IP eingegeben. Soll keine Datensicherung über SSH stattdinden sind |
# die Felder SSHUSER und FROMSSH mit # auszukommentieren                 |
# ------------------------------------------------------------------------
EMAIL="you@mail.de"
#SSHUSER="root"
#FROMSSH="192.168.178.10"
 
 
# Backup - Quellen  
# ------------------------------------------------------------------------                                                
# Hier können beliebige sowie unterschiedliche Backupquellen von der DS  |
# eingetragen werden. Zu beachten ist, das immer der vollständige Pfad   |
# ohne Angabe des entsprechenden Volume anzugeben ist. Weiterhin ist auf |
# die Schreibweise im Beispiel zu achten, pro Zeile je eine Backupquelle.|                                                         |
# ------------------------------------------------------------------------
SOURCES="/Musik/Alben
         /Fotos
	 /Videos/Serien
	 /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"


# Optische- sowie akustische Signalausgabe
#-------------------------------------------------------------------------
# 0 = Optische- sowie akustische Signalausgabe aus                       |
# 1 = Optische- sowie akustische Signalausgabe an                        |
#     Start      :  Status-LED wechselt von grün nach orange             |
#                   und es erklinkt ein Signalton                        |
#     Erfolgreich:  Status-LED wechselt von orange nach grün             |
#                   und es erklinkt ein weiterer Signalton               |
#     Fehler     :  Status-LED wechselt von orange nach grün             |
#                   und es erklinkt ein 3-Facher Fehler-Signalton        |
#-------------------------------------------------------------------------
SIGNAL="1"
  

# Exportieren der DSM-Systemkonfiguration (.dss)
#-------------------------------------------------------------------------
# Durch Eingabe einer "1" wird die DSM-Systemkonfigurartion (.dss) in den|
# Systemordner /@DSMConfig exportiert. Ist der Export nicht gewünscht,   |
# ist hier eine "0" einzutragen.                                         |
#-------------------------------------------------------------------------
DSSEXPORT="1"

# Rotationszyklus für das Löschen von @Recycle und @Logfiles 
#-------------------------------------------------------------------------
# Zeitangabe, wann Ordner bzw. Dateien in den System-Ordnern             |
# @Recycle (RECYCLE_ROTATE), @Logfiles (LOGFILES_ROTATE) sowie           |
# @DSMConfig (DSMCONFIG_ROTATE) endgültig gelöscht werden sollen, die    |
# älter als x Tage sind. Bei der Angabe "0" werden keinen Ordner/Dateien |
# in dem jeweiligen Ordner @Recycle, @Logfiles oder @DSMConfig gelöscht. |
# ------------------------------------------------------------------------
RECYCLE_ROTATE="90"
LOGFILES_ROTATE="90"
DSMCONFIG_ROTATE="90"

# ------------------------------------------------------------------------
# Ab hier bitte nichts mehr ändern, wenn man nicht weiß was man tut !!!  |
# ------------------------------------------------------------------------

# Umgebungsvariablen definieren
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/syno/bin:/usr/syno/sbin
SCRIPTFILE="${0##*/}"
SCRIPTNAME="${SCRIPTFILE%.*}"
DATEOPT="+%Y-%m-%d_%Hh%M"
TIMESTAMPOPT="+%d.%m.%Y%t%H:%M:%S"

# rsync Optionen konfigurieren
SYNCOPT="-ahR"
SSHOPT="-e ssh"
LOGSTAT="--stats"
EXCLUDE="--exclude=/@eaDir/*** --exclude=/#recycle/*** --exclude=/#snapshot/*** --exclude=/.DS_Store/***"
RECYCLE="--delete --backup --backup-dir=@Recycle/`date $DATEOPT`_$SCRIPTNAME"

# Angeschlossenes USB-Laufwerk lokalisieren und Ziel definieren
if find $0
  then
    mkdir -p "`dirname $0`$DESTINATION"
    TARGET="`dirname $0`$DESTINATION"
  if [ $SIGNAL -eq 1 ]
  	then
  	  echo 3 >/dev/ttyS1
      echo : >/dev/ttyS1
      sleep 2
  fi
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`_$SCRIPTNAME.log"

if [ "$EMAIL" ]
  then
    echo "To: $EMAIL" > $LOG
    echo "From: $EMAIL" >> $LOG
    echo "Subject: Sicherungsprotokoll vom `date $TIMESTAMPOPT` Uhr" >> $LOG
    echo "" >> $LOG
    echo "Ausgefuehrtes rsync-Script: $SCRIPTFILE" >> $LOG
    echo ""
  else	
    echo "Sicherungsprotokoll vom `date $TIMESTAMPOPT` Uhr" > $LOG
    echo "" >> $LOG
    echo "Ausgefuehrtes rsync-Script: $SCRIPTFILE" >> $LOG
fi

# rsync - Befehl ausführen sowie protokollieren
for SHARE in $SOURCES
  do
    echo "" >> $LOG
    echo "--> Zusammenfassung: $SHARE nach $TARGET" >> $LOG
  if [ "$SSHUSER" ]
    then
      rsync $SYNCOPT $SSHOPT $SSHUSER@$FROMSSH:/volume*$SHARE $LOGSTAT $EXCLUDE $RECYCLE "$TARGET" >> $LOG 2>&1
    else
      rsync $SYNCOPT /volume*$SHARE $LOGSTAT $EXCLUDE $RECYCLE "$TARGET" >> $LOG 2>&1
  fi    
  done

# DSM-Systemkonfiguration exportieren
if [ $DSSEXPORT -eq 1 ]
  then
    mkdir -p $TARGET/@DSMConfig
    synoconfbkp export --filepath $TARGET/@DSMConfig/DSMConfig_`date $DATEOPT`.dss
fi

# rsync - Ausführung auswerten und Ergebnis anhand der "exit codes" ausgeben
if [ $? -eq 0 ]
  then
    echo  "" >> $LOG
    echo "rsync-Datensicherung erfolgreich abgeschlossen. Sicherungsziel: $TARGET" >> $LOG
    DSMNOTIFY="rsync-Datensicherung erfolgreich abgeschlossen. Sicherungsziel: $TARGET"
  if [ $SIGNAL -eq 1 ]
  	then
      echo 3 >/dev/ttyS1
      echo 8 >/dev/ttyS1
      sleep 2      
  fi
  
elif [ $? -ne 0 ]
  then
    echo  "" >> $LOG
    echo "rsync-Datensicherung nach $TARGET fehlgeschlagen - Fehler $?" >> $LOG
    DSMNOTIFY="rsync-Datensicherung nach $TARGET fehlgeschlagen - Fehler $?"
  if [ $SIGNAL -eq 1 ]
  	then
      echo 2 >/dev/ttyS1
      sleep 1
      echo 2 >/dev/ttyS1
      sleep 1
      echo 2 >/dev/ttyS1
      sleep 1
      echo 8 >/dev/ttyS1
  fi  
fi

# Dateien im Ordner @Recycle die älter als x Tage sind, löschen.
if [ -d $TARGET/@Recycle/ ]
  then 
    if [ $RECYCLE_ROTATE -ne 0 ]
      then
        find $TARGET/@Recycle -type d -mtime +$RECYCLE_ROTATE -exec rm -rd {} \;
   fi
fi

# Dateien im Ordner @RLogfiles die älter als x Tage sind, löschen.
if [ -d $TARGET/@Logfiles/ ]
  then
    if [ $LOGFILES_ROTATE -ne 0 ]
      then
        find $TARGET/@Logfiles -name "*.log" -type f -mtime +$LOGFILES_ROTATE -exec rm {} \;
    fi
fi

# Dateien im Ordner @DSMConfig die älter als x Tage sind, löschen.
if [ -d $TARGET/@DSMConfig/ ]
  then
    if [ $DSMCONFIG_ROTATE -ne 0 ]
      then
        find $TARGET/@DSMConfig -name "*.log" -type f -mtime +$DSMCONFIG_ROTATE -exec rm {} \;
    fi
fi

# Benachrichtigung an die DSM-Administratorengruppe senden
synodsmnotify @administrators "Script: $SCRIPTNAME" "$DSMNOTIFY"

	
# Sicherungsprotokoll als E-Mail versenden (oder als Datei im Backupziel einsehen)
if [ "$EMAIL" ]
  then
    ssmtp $EMAIL < $LOG
fi

Erstellen eines RSA-Keys für den Aufbau einer SSH-Verbindung

Es soll eine dateibasierte Datensicherung mittels rsync von Diskstation "A" (Produktivsystem) auf Diskstation "B" (Backupsystem) angelegt werden. Dabei übernimmt das Backupsystem die Aufgabe des Servers, worüber der Verbindungsaufbau und der eigentliche Sicherungsvorgang initiiert wird. Das Produktivsystem übernimmt somit die Aufgabe des Client und muß dem ganzen Vorgang nur zustimmen. Um dies zu ermöglichen muß im Vorfeld ein RSA-Schlüssel auf dem Backupsystem erzeugt und dem Produktivsystem der öffentliche Schlüssel mitgeteilt werden, um so den automatischen Verbindungsaufbau per SSH zu ermöglichen. Nachdem die SSH-Verbindung erfolgreich aufgebaut wurde, wird der eigentliche rsync-Befehl abgesetzt und somit die Datensicherung ausgelöst.

Im folgenden werden alle Einstellungen für den Benutzer root getroffen, da nur unter diesem Benutzer die Signalausgabe als auch das Sichern der DSM-Konfiguration funktioniert. Wer hier lieber als "admin" oder vielleicht sogar als eingeschränkter Benutzer "rsync" arbeiten möchte, muss nachfolgend an den entsprechenden Stellen den gewünschten Benutzernamen einsetzen. Das hier verwendete Homeverzeichnis des Benutzer "root" wird im folgenden nur in dessen Kurzform mit ~/ angesprochen, wobei hier immer auf /root verwiesen wird. Alle anderen Benutzerkonten befinden sich im Homeverzeichnis /home/[BENUTZERNAME] bzw. richtigerweise unter /var/services/homes/[BENUTZERNAME].

(Nachfolgend symbolisiert das Zeichen "$" nur den Zeilenanfang und wird nicht mit geschrieben)


Hinweis zum Loginvorgang bis DSM 5.2 für den Benutzer "root"

Login als Benutzer "root" mit dem Passwort des DSM-Benutzer "admin"

Hinweis zum Loginvorgang ab DSM 6 für den Benutzer "root"

Login als Benutzer "admin" mit dem Passwort des DSM-Benutzer "admin"
 
"root"-Zugriff erhält man dann über die Eingabe von...

  $ sudo -i
 
  ...und gibt abermals das Password des DSM-Benutzer "admin" ein.


Beginnen wir auf dem Server der "Diskstation B" oder besser gesagt, dem Backupsystem

Auf der Konsole der DS als Benutzer "root" einloggen. Erstellen des RSA-Schlüssels mit...

$ ssh-keygen -t rsa

Bei der Erstellung wird man nach Speicherort und Passphrase gefragt...

Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no oassphrase):
Enter same passphrase again:

... hier bitte nichts eintragen, sondern einfach nur mit der "Return-Taste" bestätigen. Nach der Ausführung werden im Homeverzeichnis des Benutzer "root" folgende Ordner und Dateien erstellt:

~/.ssh
~/.ssh/id_rsa
~/.ssh/id_rsa.pub

An dieser Stelle sollte man gleich noch die Ordner- und Dateirechte anpassen.

$ chmod 0700 ~/.ssh
$ chmod 0600 ~/.ssh/id_rsa*

Den Inhalt der Datei ~/.ssh/id_rsa.pub z.B. mit vi, nano oder dem AdminTool editieren und den Inhalt in die Zwischenablage kopieren.

$ nano ~/.ssh/id_rsa.pub

Wichtig, wie hier im Beispiel gezeigt (RSA-Schlüssel wurde hier gekürzt) ist, das alles in einer Zeile steht...

ssh-rsa AAAAB3NzaC1yc2..*gekürzt*...EAAAADAQABA3e root@Backupstation

Weiter gehts auf dem Client der "Diskstation A", also dem Produktivsystem.

Auf der Konsole der DS als Benutzer "root" einloggen. Erstellen eines neuen Ornders

$ mkdir ~/.ssh

Daraufhin wird unter ~/.ssh/ eine neue Datei namens "authorized_keys" erstellt...

$ nano ~/.ssh/authorized_keys

...und der Inhalt aus der Zwischenablage, also der Inhalt aus der ~/.ssh/id_rsa.pub, die auf dem Backupsystem erstellt wurde, in die geöffnete Datei eingefügt. Nach dem Speichern und verlassen des Editors müssen auch hier noch die Ordner- und Dateirechte richtig gesetzt werden.

$ chmod 0700 ~/.ssh
$ chmod 0600 ~/.ssh/authorized_keys

Zurück auf der Konsole der Backupstation.

Als Benutzer "root" auf der DS einloggen und als Erstes die SSH-Verbindung prüfen mit...

$ ssh root@IP-DER-DISKSTATION_A -p 22

Der Verbindungsaufbau möchte vom System nochmal mit "yes" bestätigt werden um anschließend auf der Konsole des Produktivsystemes zu landen. Diese Verbindung kann man durch die Eingabe eines...

$ exit

... wieder beenden. Durch den Verbindungsaufbau wurde nun in der Datei ~/.ssh/known_hosts ein neuer Eintrag hinzugefügt, der die Zugangsdaten zur Diskstation beinhaltet. Kontrollieren kann man das mit...

$ nano ~/.ssh/known_hosts

Nachdem alles gut verlaufen ist, wird die Konsole wieder geschlossen mit...

$ exit

Realese-Notes (Stand: 28.03.2016)

  • Mit diesem Update wurde die Möglichkeit geschaffen, auf eine weitere Synology Diskstation oder einen rsync-kompatiblen Server im Netzwerk per SSH-Verbindung zu sichern.
  • Dafür wurde dieses Wiki vollständig Überarbeitet, umgeschrieben und ergänzt um die neuen Funktionen zu beschreiben.
  • Eine Anleitung zur Erstellung eines RSA-Keys um den Zugriff per SSH zu ermöglichen wurde hinzugefügt.


Realese-Notes (Stand: 19.03.2016)

  • Ab sofort kann man die DSM-Systemkonfiguration exportieren. Diese wird auf Wunsch in den Systemordner @DSMConfig nach dem Muster DSMConfig_2016-03-19_22h00.dss abgelegt. Weiterhin kann auch hier über eine Zeitvorgabe (in Tagen) eingestellt werden, wie lange die exportieren Systemkonfigurationen erhalten bleiben sollen.
  • Eine weitere Variante des Such-Scriptes wurde veröffentlicht um die Suchbedingungen individueller anpassen zu können.


Release-Notes (Stand: 18.03.2016)

  • Die chronologische Speicherung innerhalb der Systemordner @Recycle und @Logfiles kann jetzt unabhängig von einander über eine individuell einstellbare Zeitvorgabe in Tagen begrenzt werden. Daten, die älter sind als die eingestellten Zeitvorgaben, werden "unwiderruflich" gelöscht.
  • Die eigentliche Befehlszeile des rsync-Aufrufes im Script wurde neu strukturiert, indem die Ausführungsoptionen in Variablen ausgelagert, gruppiert und optimiert wurden. Das erleichtert eine Anpassung des rsync-Aufruf an die gewünschten Bedürfnisse.
  • Verbesserung der Anzeige und Ausgabe von Datum und Uhrzeit sowie des Script-Dateinamens
  • @Logfile Protokolle werden jetzt nach dem Muster 2016-03-18_21h37_[SCRIPT-NAME].log abgelegt
  • @Recycle Ordner werden jetzt nach dem Muster 2016-03-18_21h37_[SCRIPT-NAME] abgelegt
  • In den Benachrichtigungen und Protokollen wird stets der ausgeführte Script-Dateiname angegeben.
  • Viele kleinere Script-Verbesserungen- und Anpassungen


Release-Notes (Stand: 11.03.2016)

  • Anstatt wie bisher nur eine Backup-Aufgabe ausführen zu können, kann jetzt eine beliebige Anzahl von Backup-Aufgaben auf unterschiedlichen Datenträgern ausgeführt werden.
  • Die Script-Dateinamen („search-rsync.sh“ sowie „rsync.sh“) können ab sofort individuell vergeben werden, einzig die Endung .sh muss erhalten bleiben.
  • Beim Definieren der Backup-Quellen (SOURCES), müssen keine Volume-Bezeichnungen mehr mitgeführt werden. Es reicht demnach der Pfad eines gemeinsamen Ordners, also z.B. /music/Alben/International
  • Über das Benachrichtigungssystems des DSM wird jetzt auch der ausgeführte Script-Dateiname angezeigt.
  • Es wurde eine optische- sowie akustische Signalausgabe eingebaut, die optional ausgewählt werden kann.
  • Kleinere Script-Verbesserungen und Beseitigung von Schönheitsfehlern.

Externe Links