Dateibasierte RSync-Datensicherung auf externen Datenträger oder RSync kompatiblen Server

Aus

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 von, als auch auf einen lokal angeschlossenen USB- oder SATA-Datenträger, sowie 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)
     |
     |                      .--> USB/SATA-Datenträger   --> start-rsync.sh
     |-> *search-rsync.sh ->|
     |                      '--> Diskstation SSH-Server --> start-rsync.sh
     |
     |                      .--> USB/SATA-Datenträger   --> *start-rsync.sh
     '--------------------->|
                            '--> Diskstation SSH-Server --> *start-rsync.sh	 
	   				   

Der DSM-Aufgabenplaner

Der DSM-Aufgabenplaner ist die eigentliche Schaltzentrale dieses Systems, worüber sowohl das Such-Script (search-rsync.sh) als auch das Ausführungs-Script (start-rsync.sh) aufgerufen werden kann. Versierte Anwender können die Scripte bei Bedarf natürlich z.B. auch direkt über die Konsole aufrufen und ausführen.

Das Such-Script (search-rsync.sh)

Die Verwendung des Such-Scripts ist nicht zwingend erforderlich und kommt auch nur bei einer lokalen Datensicherung (auf internes Volume, USB- oder SATA-Datenträger) zum Einsatz, da sich die Suche nur auf lokale Datenträger beschränkt. Aber auch wenn es nicht unbedingt benötigt wird, so hat das Such-Script den entscheidenen Vorteil, dass das Ausführungs-Script entweder anhand des vollständigen Script-Dateinamens, oder aber anhand einer bestimmten Zeichenkette innerhalb des Script-Dateinamens lokalisiert, ausgeführt oder bei Bedarf von der Ausführung ausgeschlossen werden kann. Der Name sowie der Speicherort des Such-Scripts ist auch erstmal nicht relevant. Es macht jedoch Sinn dem Script einen aussagekräftigen Namen zu geben und es an einem Ort auf der Synology Diskstation abzulegen, wo man es bei Bedarf z.B. mit dem DSM eigenen Text-Editor bearbeiten kann. Einzig muss darauf geachtet werden, dass das Script die Dateiendung .sh trägt und ausführbar ist. Über das Such-Script lassen sich demnach mehrere Ausführungs-Scripte suchen und ausführen.

Das Ausführungs-Script (start-rsync.sh)

Das Ausführungs-Script befindet sich entweder im Wurzel- oder auch Hauptverzeichnis eines an der DS angeschlossenen, externen USB- oder SATA-Datenträgers, oder aber innerhalb eines "gemeinsamen Ordners" auf der Synology Diskstation, dort wo die gesicherten Daten später abgelegt werden sollen. Der Standort des Scripts bestimmt also das Ziel der Datensicherung, welcher jedoch auch über die Variable $DESTINATION im Script genauer definiert werden kann. Auch hier ist der Name des Ausführungs-Scripts erstmal nicht relevant, es macht jedoch auch hier Sinn einen aussagekräftigen Namen zu vergeben, da unter umständen mehrere Scripte hintereinander ausgeführt werden. Einzig muss darauf geachtet werden, dass das Script die Dateiendung .sh trägt und ausführbar ist, sollte es nicht über das Such-Script ausgeführt werden.

Das Ausführungs-Script 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. Protokolle und zum Löschen vorgemerkte Dateien, sowie die Sicherung der DSM-Systemkonfiguration im Ordner /@DSMConfig, können nach Ablauf einer einstellbaren Zeitvorgabe (in Tagen) automatisch über das System gelöscht werden. Über das interne Benachrichtingssystem werden alle durchgeführten Schritte in einem Protokoll zusammengefasst welche im Ordner @/Logfiles abgelegt werden und man sich diese bei Bedarf auch als E-Mail zustellen lassen kann. Ebenso werden auftretende Fehler oder Störungen protokolliert und an verschiedenen Stellen mit weitergehenden Informationen, wie z.B. den Exit-Codes der rsync Ausführung näher beschrieben. Außerdem erhält die DSM-Administratorengruppe über das Benachrichtigungssystems des DSM eine Meldung über Erfolg oder Misserfolg des Vorganges inkl. Fehler-Code. Optional kein eine optische und akustische Signalausgabe ausgewählt werden.

Datensicherungsvarianten

Dieses System ist mittlerweile so flexibel Aufgebaut, das Quelle und Ziel einer Datensicherung individuell definiert werden kann. So kann bei einer lokalen Datensicherung zwischen Synology Diskstation und einem angeschlossenen, externen USB- oder SATA-Datenträger sowohl der Datenträger als auch die Synology Diskstation die Quelle als auch das Ziel sein. Auch eine Datensicherung innerhalb einer Synology Diskstation ist möglich z.B. um regelmäßig Daten von /volume1 nach /volume2 zu sichern. Gleiches gilt für die Datensicherung auf eine weitere Synology Diskstation oder einem rsync-kompatiblen Server über eine SSH-Verbindung. Das Ziel der Datensicherung bestimmt immer der Speicherort des Ausführungs-Script, wobei selbst hier noch das Ziel individuell angepasst werden kann.

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 1: Das Such-Script "search-rsync.sh"

Da es mehrere Ansätze für die Suche gibt, kann man sich hier Weitere Suchscriptvarianten anschauen und sich die für sich passenden Möglichkeit auswählen.

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="start"

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

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

Script 2: Das ausführungs-Script "start-rsync.sh"

Das nächste Script mit dem beispielhaften Script-Dateinamen "start-rsync.sh", 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.

start-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"

# Volume lokalisieren und Sicherungsziel definieren
if find $0; then
  mkdir -p "`dirname $0`$DESTINATION"
  TARGET="`dirname $0`$DESTINATION"
  # Signalausgabe - Beginn der Datensicherung
  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    

  # SSH-Verbindung prüfen. Falls erfolgreich --> Netzwerksicherung
  if [ "$SSHUSER" ] && [ "$FROMSSH" ] && ssh $SSHUSER@$FROMSSH; then 
    echo "" >> $LOG
    echo "--> Zusammenfassung: $SHARE nach $TARGET" >> $LOG
                 
    if ssh $SSHUSER@$FROMSSH test -d /volume*$SHARE; then
      echo "    SSH-Verbindungsaufbau erfolgreich. Quellordner $SHARE wurde lokalisiert. Start..." >> $LOG
      rsync $SYNCOPT $SSHOPT $SSHUSER@$FROMSSH:/volume*$SHARE $LOGSTAT $EXCLUDE $RECYCLE "$TARGET" >> $LOG 2>&1   
    else
      echo "    SSH-Verbindungsaufbau erfolgreich. Der Quellordner $SHARE konnte jedoch NICHT lokalisiert werden!" >> $LOG
      echo "    Bitte kontrollieren Sie ihre Einstellungen. Verschluesselte Ordner muessen eingehangen sein." >> $LOG
    fi     
  
  fi
    
  # SSH-Verbindung prüfen. Falls NICHT erfolgreich --> lokale Sicherung...
  if [ ! "$SSHUSER" ] && [ ! "$FROMSSH" ]; then
    echo "" >> $LOG
    echo "--> Zusammenfassung: $SHARE nach $TARGET" >> $LOG
    
    if [ -d /volume*"$SHARE" ]; then
      echo "    Der lokale Quellordner $SHARE wurde lokalisiert. Start..." >> $LOG
      rsync $SYNCOPT /volume*$SHARE $LOGSTAT $EXCLUDE $RECYCLE "$TARGET" >> $LOG 2>&1
    else  
      echo "    Der lokale Quellordner $SHARE konnte NICHT lokalisiert werden!" >> $LOG
      echo "    Bitte kontrollieren Sie ihre Einstellungen. Verschluesselte Ordner muessen eingehangen sein." >> $LOG
    fi   
    
  fi  
done

# SSH-Verbindung prüfen. Falls Fehlerhaft --> Abbruch
if [ "$SSHUSER" ] || [ "$FROMSSH" ] && ! ssh $SSHUSER@$FROMSSH; then
  echo "" >> $LOG
  echo "    Es konnte keine SSH-Verbindung hergestellt werden. Bitte kontrollieren sie Ihre Einstellungen" >> $LOG
fi  

# 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"
  # Signalausgabe - Ende der Datensicherung
  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 $?"
  # Signalausgabe - Fehlermeldung
  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 -rf {} \;
  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 "*.dss" -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: 31.03.2016)

  • Das System ist mittlerweile so flexibel Aufgestellt, das Quelle und Ziel einer Datensicherung individuell definiert werden kann. Aus diesem Grunde mussten abermals Änderungen am Wiki-Eintrag vorgenommen werden und das alles beschreiben zu können.
  • Es wurden weitere Funktionen und Abfragen hinzugefügt die prüfen, ob eine SSH-Verbindung erfolgreich hergestellt und ob der gewünschte Quellordner lokalisiert werden konnte um eine Datensicherung durchzuführen. Treten hier Unstimmigkeiten auf, wird eine Fehlermeldung ins Protokoll geleitet. Eine Unstimmigkeit könnte z.B. ein nicht eingehangener verschlüsselter Ordner, ein nicht berechtigter SSH-Benutzer, eine falsche oder fehlende IP-Adresse oder ein einfacher Tippfehler sein.
  • Gleiches gilt für die "lokale" Datensicherung. Auch hier wird erstmal über eine Abfrage versucht, den gewünschten Quellordner zu lokalisieren, bevor die Datensicherung durchgeführt wird. Bei Unstimmigkeiten werden auch hier Fehlermeldungen ins Protokoll geleitet.
  • Weiterhin wurde die Scriptschreibweise ein wenig angepasst und verbessert um es kompakter aussehen zu lassen.


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