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

Aus
Keine Bearbeitungszusammenfassung
Zeile 1: Zeile 1:
=Einleitung=
=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. Man muss sich also nicht auf die Konsole der DS begeben.
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=
=Anmerkung=
Zeile 11: Zeile 11:
* Umgang mit einem Editor seiner Wahl (z.B. Notepad++ oder dem DSM Text-Editor)
* Umgang mit einem Editor seiner Wahl (z.B. Notepad++ oder dem DSM Text-Editor)
* Grundkenntnisse im Umgang mit Shell-Scripten
* 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.
* 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
* Ein externer USB- oder SATA-Datenträger, eine weitere Synology Diskstation oder einen rsync-kompatiblen Server im Netzwerk.


=Erläuterungen zur Funktion und Arbeitsweise=
=Erläuterungen zur Funktion und Arbeitsweise=
Das hier vorgestellte System besteht aus zwei Scripten, wobei die hier verwendeten Script-Dateinamen nur der Veranschaulichung dienen. Die Script-Dateinamen können, unter Beachtung einiger Rahmenbedingungen nach Belieben verändert werden.
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:
Das erste Script mit dem beispielhaften Namen „search-rsync.sh“ wird über den DSM-Aufgabenplaner angesprochen. Bei Bedarf kann hier auch die automatische bzw. zeitgesteuerte Script-Ausführung konfiguriert werden.
Das zweite Script, welches den beispielhaften Dateinamen "rsync.sh" trägt, wird auf einen an der DS angeschlossenen, externen USB- oder SATA-Datenträger in dessen Wurzelverzeichnis abgelegt, auf dem die Datensicherung erfolgen soll.


Das über den Aufgabenplaner ausgeführte Script "search-rsync.sh" versucht anhand einiger Abfragen zu erkennen, an welchem USB- oder SATA Anschluss sich der externe Datenträger und somit das "rsync.sh"-Script befindet um die Pfade im Backup-Auftrag entsprechend anzupassen. 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.
<pre>
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  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.
  Aufgabenplaner                  
 
  (manuell/auto) ------ SSH -----> /NetBackup/*ssh_rsync.sh  
=Script 1: search-rsync.sh=
        | (Server <- Client)             |             
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, das das Script die Endung .sh trägt. Als Beispiel habe ich das Script „search-rsync.sh“ genannt.
        |                               '-> /Backup
      LOCAL     ------------  
|   | volumeUSB1 |
|   |            |
v   | volumeUSB2 |
*search-rsync.sh ->|            |---------> /local_rsync.sh
  | volumeUSB3 |            |
  | |            '-> /Backup
  | volumeSATA |
            ------------  
</pre>


Angemeldet als Benutzer "admin", kann das Script z.B. mit dem Text-Editor aus dem DSM erstellt werden (evtl. muss das Paket noch über das Paketzentrum installiert werden). Nachdem im Text-Editor das Script eingefügt, die Datei „search-rsync.sh“ erstellt bzw. gespeichert wurde müssen noch die Berechtigungen angepasst werden um das Script "ausführbar" zu machen. Dazu muss man in der FileStation mit einem rechtsklick auf die Datei „search-rsync.sh“ 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)
'''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.  


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. 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.   
'''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.   


Nachfolgend werden zwei Varianten des Such-Scripts vorgestellt. Da beide Varianten ihre Vor- aber auch ihre Nachteile haben und darüber hinaus die Geschmäcker verschieden sind überlasse ich es euch, welches der beiden Varianten ihr nutzen wollt. Es funktionieren beide, ihr müsst euch nur für eines entscheiden.
'''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.


'''- Variante 1: Scripte anhand ihrer vollständigen Script-Dateinamen suchen und ausführen.'''
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)


Bei dieser Variante müssen stets die vollständigen Script-Dateinamen inkl. ihrer Erweiterung (.sh) aufgeführt werden, damit die auszuführenden Scripte gefunden werden können.  
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.


=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.


'''search-rsync.sh (beispielhaft)'''
'''Script: search_rsync.sh'''
<pre>
#!/bin/sh
 
# Script-Dateinamen definieren
# ------------------------------------------------------------------------
# Es besteht die Möglichkeit mehrere Scripte auszuführen, die dazu      |
# noch auf unterschiedlichen Datenträgern liegen. Dabei ist es auch nicht|
# zwingend erforderlich, das alle Scripte permanent verfügbar sein müssen|
# Wird ein Script oder auch mehrere Scripte gefunden, werden diese      |
# ausgeführt und somit das eigentliche Backupsystem angestoßen.          |
# Weiterhin ist auf die Schreibweise im Beispiel zu achten, pro Zeile je |
# ein Script-Dateiname.                                                  |
# ------------------------------------------------------------------------
SCRIPTNAME="rsync.sh
    rsync-music.sh"
 
# ------------------------------------------------------------------------
# Ab hier bitte nichts mehr ändern                                      |
# ------------------------------------------------------------------------
for SCRIPT in $SCRIPTNAME
  do 
  # Durchsuche volumeUSB1
  if [ -f /volumeUSB1/usbshare/$SCRIPT ]; then
    sh /volumeUSB1/usbshare/$SCRIPT
  fi
  # Durchsuche volumeUSB2
  if [ -f /volumeUSB2/usbshare/$SCRIPT ]; then
    sh /volumeUSB2/usbshare/$SCRIPT
  fi
  # Durchsuche volumeUSB3
  if [ -f /volumeUSB3/usbshare/$SCRIPT ]; then
    sh /volumeUSB3/usbshare/$SCRIPT
  fi
  # Durchsuche volumeSATA
  if [ -f /volumeSATA/satashare/$SCRIPT ]; then
    sh /volumeSATA/satashare/$SCRIPT
  fi
done
</pre>
 
'''- Variante 2: Scripte anhand einer bestimmten Zeichenkette im Script-Dateinamen suchen und ausführen.'''
 
Bei dieser Variante ist es nicht mehr erforderlich, den kompletten Script-Dateinamen anzugeben, sondern es reicht eine Zeichenkette, die in jedem Script-Dateinamen enthalten sein muss. So lassen sich zum Beispiel alle Scripte finden die die Zeichenkette "rsync" tragen: rsync_Backup_Filme.sh rsync_Filme.sh oder auch Filme_per_rsync_Script_sichern.sh
 
 
'''search-rsync.sh (beispielhaft)'''
<pre>
<pre>
#!/bin/sh
#!/bin/sh
Zeile 89: Zeile 61:
# Zeichenkette für Script-Dateinamen definieren
# Zeichenkette für Script-Dateinamen definieren
# ------------------------------------------------------------------------
# ------------------------------------------------------------------------
# Eingabe einer Zeichenkette, die in jedem auszuührenden Script-        |
# Es ist nicht erforderlich, den kompletten Script-Dateinamen anzugeben. |
# Dateinamen enthalten sein muss.                                       |
# Es reicht die Eingabe einer Zeichenkette, die in jedem auszuführenden  |
# Beispiele für die Zeichenkette: "rsync" = rsync_Backup_Filme.sh        |
# Script-Dateinamen enthalten sein muss.                                 |
# rsync_Filme.sh oder auch Filme_per_rsync_Script_sichern.sh             |
# Beispiele für die Zeichenkette: "local" = local_Backup_Filme.sh        |
# local_Filme.sh oder auch Filme_local_sichern.sh                       |
#-------------------------------------------------------------------------
#-------------------------------------------------------------------------
SCRIPT_STRING="rsync"
SCRIPT_STRING="local"


# ------------------------------------------------------------------------
# ------------------------------------------------------------------------
Zeile 108: Zeile 81:
</pre>
</pre>


=Script 2: rsync.sh=
=Script: ..._rsync.sh (Ausführungsscript für die "lokale" oder "SSH" Datensicherung)=
Das zweite Script mit dem beispielhaften Script-Dateinamen "rsync.sh", wird auf den entsprechenden externen USB- oder SATA-Datenträger in dessen Wurzelverzeichnis abgelegt, auf dem die Datensicherung abgelegt werden soll.  
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 falls gewünscht, die Signalsteuerung angegeben werden. Ebenso ist das setzen einer Zeitvorgabe für das Löschen alter Logdateien und zum Löschen vorgemerkter Dateien sinnvoll. Weiterhin muss der Script-Dateiname im „search-rsync.sh“ Script unter der Variablen „SCRIPTNAME“ hinterlegt werden.
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 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. Die auszuführenden Script-Dateinamen müssen dafür in der „search-rsync.sh“ hinterlegt werden. Hierzu auch die weiteren Hinweise in den Scripten beachten.
Im Gegensatz zum ersten Script (search-rsync.sh), müssen hier keine Berechtigungen gesetzt werden. Hier reicht es also, das Script über den Text-Editor des DSM zu erstellen und auf einen an der DS angeschlossenen, externen Datenträger abzulegen. Nachdem alle Parameter bestimmt wurden, kann man den Vorgang über den Aufgabenplaner ausführen lassen.
 


'''rsync.sh (beispielhaft)'''
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'''
<pre>
<pre>
#!/bin/sh
#!/bin/sh


# E-Mail Adresse
# E-Mail Adresse, SSH-Benutzer sowie Netzwerkquelle
# ------------------------------------------------------------------------  
# ------------------------------------------------------------------------  
# Bei Angabe einer E-Mail-Adresse, die identisch mit der bereits im DSM  |
# Bei Angabe einer E-Mail-Adresse, die identisch mit der bereits im DSM  |
Zeile 127: Zeile 98:
# Möchte man dies nicht, kann das Feld mit # auskommentiert werden. Es  |
# Möchte man dies nicht, kann das Feld mit # auskommentiert werden. Es  |
# wird dann nur ein Sicherungsprotokoll unter @Logfiles im Ziel abgelegt.|
# 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"
EMAIL="you@mail.de"
#SSHUSER="admin"
#FROMSSH="192.168.178.10"
   
   
   
   
Zeile 188: Zeile 164:
LOGFILES_ROTATE="90"
LOGFILES_ROTATE="90"
DSMCONFIG_ROTATE="90"
DSMCONFIG_ROTATE="90"


# ------------------------------------------------------------------------
# ------------------------------------------------------------------------
Zeile 204: Zeile 178:
# rsync Optionen konfigurieren
# rsync Optionen konfigurieren
SYNCOPT="-ahR"
SYNCOPT="-ahR"
SSHOPT="-e ssh"
LOGSTAT="--stats"
LOGSTAT="--stats"
EXCLUDE="--exclude=/@eaDir/*** --exclude=/#recycle/*** --exclude=/#snapshot/*** --exclude=/.DS_Store/***"
EXCLUDE="--exclude=/@eaDir/*** --exclude=/#recycle/*** --exclude=/#snapshot/*** --exclude=/.DS_Store/***"
Zeile 244: Zeile 219:
     echo "" >> $LOG
     echo "" >> $LOG
     echo "--> Zusammenfassung: $SHARE nach $TARGET" >> $LOG
     echo "--> Zusammenfassung: $SHARE nach $TARGET" >> $LOG
     rsync $SYNCOPT /volume*$SHARE $LOGSTAT $EXCLUDE $RECYCLE "$TARGET" >> $LOG 2>&1
  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
   done


Zeile 321: Zeile 301:
fi
fi
</pre>
</pre>
=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 '''admin''' getroffen. Wer hier lieber als "root" 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 "admin" wird im folgenden nur in dessen Kurzform mit ~/ angesprochen, wobei hier immer auf /home/[BENUTZERNAME] verwiesen wird. Richtigerweise befindet sich das Homeverzeichnis der Benutzer unter /var/services/homes/[BENUTZERNAME], der des Benutzers "root" jedoch unter /root
'''Beginnen wir auf dem Server der "Diskstation B" oder besser gesagt, dem Backupsystem'''
Auf der Konsole der DS als Benutzer "admin" mit dessen Passwort einloggen.
Erstellen des RSA-Schlüssels mit...
<pre>$ ssh-keygen -t rsa</pre>
Bei der Erstellung wird man nach Speicherort und Passphrase gefragt...
<pre>
Enter file in which to save the key (/var/services/homes/admin/.ssh/id_rsa):
Enter passphrase (empty for no oassphrase):
Enter same passphrase again:
</pre>
... hier bitte nichts eintragen, sondern einfach nur mit der "Return-Taste" bestätigen. Nach der Ausführung werden im Homeverzeichnis des Benutzer "admin" folgende Ordner und Dateien erstellt:
<pre>
~/.ssh
~/.ssh/id_rsa
~/.ssh/id_rsa.pub
</pre>
An dieser Stelle sollte man gleich noch die Ordner- und Dateirechte anpassen.
<pre>$ chmod 0700 ~/.ssh
$ chmod 0600 ~/.ssh/id_rsa*
</pre>
Den Inhalt der Datei ~/.ssh/id_rsa.pub z.B. mit vi, nano oder dem AdminTool editieren und den Inhalt in die Zwischenablage kopieren.
<pre>$ nano ~/.ssh/id_rsa.pub</pre>
Wichtig, wie hier im Beispiel gezeigt (RSA-Schlüssel wurde hier gekürzt) ist, das alles in einer Zeile steht...
<pre>ssh-rsa AAAAB3NzaC1yc2..*gekürzt*...EAAAADAQABA3e admin@Backupstation</pre>
'''Weiter gehts auf dem Client der "Diskstation A", also dem Produktivsystem.'''
Auf der Konsole der DS als Benutzer "admin" mit dessen Passwort einloggen. Erstellen eines neuen Ornders
<pre>$ mkdir ~/.ssh</pre>
Daraufhin wird unter ~/.ssh/ eine neue Datei namens "authorized_keys" erstellt...
<pre>$ nano ~/.ssh/authorized_keys</pre>
...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.
<pre>
$ chmod 0700 ~/.ssh
$ chmod 0600 ~/.ssh/authorized_keys
</pre>
'''Zurück auf der Konsole der Backupstation.'''
Als Benutzer "admin" auf der DS einloggen und als Erstes die SSH-Verbindung prüfen mit...
<pre>$ ssh admin@IP-DER-DISKSTATION_A -p 22</pre>
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...
<pre>$ exit</pre>
... 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...
<pre>$ nano ~/.ssh/known_hosts</pre>
Nachdem alles gut verlaufen ist, wird die Konsole wieder geschlossen mit...
<pre>$ exit</pre>
=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)=
=Realese-Notes (Stand: 19.03.2016)=

Version vom 28. März 2016, 20:46 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, 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.

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="admin"
#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 admin getroffen. Wer hier lieber als "root" 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 "admin" wird im folgenden nur in dessen Kurzform mit ~/ angesprochen, wobei hier immer auf /home/[BENUTZERNAME] verwiesen wird. Richtigerweise befindet sich das Homeverzeichnis der Benutzer unter /var/services/homes/[BENUTZERNAME], der des Benutzers "root" jedoch unter /root

Beginnen wir auf dem Server der "Diskstation B" oder besser gesagt, dem Backupsystem Auf der Konsole der DS als Benutzer "admin" mit dessen Passwort 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 (/var/services/homes/admin/.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 "admin" 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 admin@Backupstation

Weiter gehts auf dem Client der "Diskstation A", also dem Produktivsystem. Auf der Konsole der DS als Benutzer "admin" mit dessen Passwort 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 "admin" auf der DS einloggen und als Erstes die SSH-Verbindung prüfen mit...

$ ssh admin@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