Anleitung: "RAID 1"-Ersatz mit der FritzBox / Zeitgesteuertes Backup mit rsync
Ursprünglich wollte ich mir eigentlich ein (Standalone-)NAS-Server kaufen, da aber die aktuellen FritzBox-Modelle immer mehr Funktionen bieten, fehlte mir eigentlich nur noch eine wichtige Funktion: Quasi ein "Raid 1"-Modus um eine entsprechende Datensicherheit beim (physischen) Ausfall eines Laufwerks zu gewährleisten!
Die Idee war nun recht simple: Man schließe einfach zwei USB-Festplatten oder Flashlaufwerke an die FritzBox an und "spiegelt" alle Daten oder einen bestimmten Verzeichniszweig auf das zweite Laufwerk! Fällt nun eines der Laufwerke mit einen Defekt aus, hat man immer noch das Backup der Daten!
Solch eine Backup-Funktion für ein zweites Laufwerk würde ich mir natürlich auch als vollintegrierte Funktion von AVM für die FritzBoxen wünschen! Die Idee dürfen sie hier gerne kopieren! ;-)
Die Vorteile der hier vorgestellten Variante:
- keine Modifikation der Firmware, nur die debug.cfg muss angepasst werden
- rsync wird jeweils nur zum Backup gestartet und anschließend beendet, einziger Hintergrundprozess ist die Funktionsschleife in der debug.cfg
- Fehlerausgaben und Kontrollmöglichkeit über das System-Log der FritzBox, wie etwa Zeitpunkt und Dauer des Backup, sowie den rsync Return Code im Fehlerfall
- bei den IP-getriggerten Varianten kann das Backup jederzeit manuell über die FritzBox-Oberfläche gestartet werden
- es können entweder das ganze Laufwerk oder einzelne Verzeichnisse gesichert werden
Die erforderlichen Arbeitschritte in Kurzfassung:
1.) zwei USB-Festplatten oder -Flashspeicher anschließen, sowie ggf. Quell/Ziel-Verzeichnisse erstellen
2.) die passende "rsync"-Binärdatei auf den FritzBox-Speicher kopieren
3.) die debug.cfg anpassen (oder neu erstellen) und die FritzBox neu starten
... fertig!
Voraussetzungen:
Ihr braucht natürlich eine FritzBox mit USB-Anschluss bzw. USB-Speicherunterstützung und falls nötig einen USB-Hub. Telnet muss auf der FritzBox aktiviert sein, um die debug.cfg anpassen zu können. Des weiteren selbstverständlich zwei USB-Speicherlaufwerke (USB-Sticks, -Festplatten, SD-Cardreader oder ähnlich), wobei das zweite Laufwerk über genug freien Speicher verfügen muss, um alle Daten des Backup aufnehmen zu können!
Ein Laufwerk wird also immer als Master genutzt, auf diesen werden die Daten zuerst gespeichert und das zweite Laufwerk wird als Backup-Laufwerk genutzt.
Wie ihr das Backup im Netzwerk nur schreibgeschützt bereitstellen könnt, findet ihr in den Anmerkungen weiter unten.
Des weiteren benötigt ihr für eure FritzBox eine passende rsync-Binary (siehe Installation).
Variante 1: Tägliches Backup (ausgelöst bzw. initialisiert durch die wechselnde IP-Adresse):
Für alle die über einen herkömmlichen (DSL-)Internet-Anschluss verfügen, bei dem täglich eine Zwangstrennung mit wechselnder IP-Adresse erfolgt, empfiehlt sich das tägliche Backup über die neue IP-Adresse zu initialisieren!
Das hat gleich zwei wesentliche Vorteile:
1.) Ihr könnt den Zeitpunk des Täglichen Backup einfach mit dem Zeitpunkt der Zwangstrennung in der FritzBox einstellen ohne jedes mal die debug.cfg anpassen zu müssen:
FritzBox Menü: "Internet" >> "Zugangsdaten" >> "Verbindungseinstellungen" >> "Zwangstrennung durch den Anbieter verschieben in die Zeit zwischen..."
2.) Ihr könnt jederzeit einfach ein neues Backup initialisieren, indem ihr über die FritzBox Oberfläche eine neue IP-Adresse anfordert:
FritzBox Menü: "Internet" >> "Online-Monitor" >> "Neu verbinden"
Diejenigen die über eine statische IP-Adresse verfügen, müssen ggf. auf die zeitgesteuerten Varianten zurückgreifen. Mit einem Neustart der FritzBox könnt ihr zur Not aber auch hier manuell ein Backup auslösen:
FritzBox Menü: "System" >> "Sicherung" >> "Neustart" >> "Neu starten"
(Anpassungen für IPv6 Anschlüsse siehe weiter unten bei den weiteren Hinweisen!)
Variante 2: Zeitgesteuertes Backup zu festen Uhrzeiten, z.B. jeden Tag um 5:00 und 23:00 Uhr:
Variante 3 kombiniert das IP- und zeitgesteuertes Backup:
Anzupassende Parameter:
Folgende Zeilen in dem Code müsst ihr für eure FritzBox noch entsprechend anpassen:
alias rsync=[...] zeigt auf den Pfad und Dateinamen euer rsync-Binärdatei
rsync_Source=[...] zeigt auf den Quelllaufwerk bzw. -Pfad der zu sichernden Dateien (sollte mit "/" enden)
rsync_Target=[...] zeigt auf das Backup-Laufwerk[/Verzeichnis/] (sollte mit "/" enden)
rsync_StartTimes=[...] hier listet ihr die Zeiten auf, zu der das Backup immer ausgeführt werden soll (nur bei den zeitgesteuerten Varianten)
Installation:
1.) Beide USB-Laufwerke an die FritzBox anschließen und auf dem Backuplaufwerk am besten einen separaten Ordner für das Backup erstellen, bei mir ist das z.B. der Ordner "Backup". Falls ihr das ganze Laufwerk sichern wollt gebt ihr als Source den Stammpfad des Laufwerkes an. Fall ihr nur ein Verzeichnis samt Unterverzeichnisse sichern wollt, erstellt ihr dafür am besten einen gesonderten Ordner (in meinen Beispiel ist das der Ordner "Source").
2.) Ihr benötigt für eure FritzBox eine kompilierte rsync Binärdatei je nach Model eine Version für die MIPS FritzBoxen (z.B. für die Fritz!Box 7390) oder eine für die MIPSel FritzBoxen (z.B. die Fritz!Box 7170)
Ich habe für die 7390 diese hier von MaxMuster benutzt:
http://www.ip-phone-forum.de/showthread.php?t=104159&p=1906699#post1906699
Die rsync Binärdatei legt ihr direkt auf den Speicher der FritzBox oder auf den Source-Laufwerk ab. Ich habe sie z.B. in das Stammverzeichnis bzw. das per NAS-Zugriff "sichtbare Root-Verzeichnis" abgelegt, also dem internen Speicher der Fritz!Box 7390, Dateiname "rsync-mips-static".
3.) Nun müsst ihr eine der Scriptvarianten für die debug.cfg, entsprechend euren Laufwerkspfaden anpassen und auf die FritzBox kopieren.
Bei der FritzBox 7390 geht das recht einfach, per Telnet auf die FritzBox einwählen, dann soweit vorhanden die debug.cfg von den Flashspeicherbereich auf dem NAS-Speicherbereich kopieren, der per NAS-Zugang direkt erreichbar ist, dort könnt ihr die debug.cfg dann komfortabel editieren.
Die vorhandene debug.cfg von dem Flashspeicherbereich in den "NAS-Speicherbereich" kopieren:
cat /var/flash/debug.cfg > /var/media/ftp/debug.cfg
... dort editieren bzw. das Script hinzufügen und dann wieder zurück in den Flashbereich kopieren:
cat /var/media/ftp/debug.cfg > /var/flash/debug.cfg
Wenn ihr zuvor noch keine debug.cfg erstellt haben solltet, könnt ihr diese einfach mit einem geeigneten Texteditor neu erstellen, z.B. Notepad++ (Wichtig: die debug.cfg nur mit UNIX-Zeilenumbrüchen speichern!) und dann wie angegeben wieder in den Flashbereich zurückkopieren.
Alternativ könnt ihr die debug.cfg auch direkt auf der FritzBox erstellen und diese mit "nvi" bearbeiten:
echo "" > /var/flash/debug.cfg
nvi /var/flash/debug.cfg
Beachtet Bitte, dass nach jeder Änderung der debug.cfg die FritzBox neu gestartet werden muss, damit die Änderungen aktiv werden!
4.) Nachdem alles soweit vorbereit ist müsst ihr die FritzBox nur noch neu starten, damit die Änderungen in der debug.cfg übernommen und aktiviert werden!
Nach dem Neustart schaut in das Ereignis-Log der FritzBox. Falls ein Pfad falsch angegeben sein sollte, könnt ihr das hier sehen! Der rsync Return Code (127) kann auch bedeuten, das der Pfad zur rsync-Datei nicht korrekt ist! Wenn soweit alles ok ist, sollte das im Ereignis-Log etwa so aussehen:
Weitere Hinweise und Anmerkungen:
chmod -R 777 "$rsync_Target"
Die Zeile chmod -R 777 "$rsync_Target" wird normalerweise nur benötigt wenn sich "$rsync_Target" auf dem internen Speicher der FritzBox oder auf einen Ext3-formatierten Laufwerk befindet!
Wenn sich das Backup auf einen FAT/FAT32-Laufwerk befindet, hat diese Zeile keinen weiteren Effekt und ihr könnt diese entfernen!
Tip: Wenn ihr das Backup nur schreibgeschützt bzw. mit Nur-Lesezugriff bereitstellen wollt, dann ändert diese Zeile auf chmod -R 755 "$rsync_Target". Auf diese Weise kann das Backup per NAS/Netzwerkzugriff nicht mehr versehentlich gelöscht oder überschrieben werden! Das funktioniert natürlich nur, wenn das Backuplaufwerk zuvor Ext3 formatiert wurde!
Wollt ihr dann dennoch Dateien im Backup löschen, könnt ihr das über das Telnet-Login auf der FritzBox tun!
IPv4 / IPv6-Anschlüsse
Wer über einen reinen IPv6 Anschluss mit wechselnde IPv6 Adresse verfügt, muss ggf. die get_IP() Funktion zur Abfrage der öffentlichen IPv4-Adresse mit einer angepassten Version für die IPv6-Abfrage ersetzen.
Ersetzt in dem Fall ggf. die Zeilen:
mit den Zeilen:
rsync-Parameter: "--delete"
Mit dem rsync-Parameter "--delete" werden in der Source gelöschte Dateien auch im Backup gelöscht, somit wird das Backup immer synchron zur Source gehalten. Wer nun in der Source gelöschte Dateien auf der Backup-Seite erhalten möchte um diese etwa nur manuell zu löschen, braucht nur den Parameter '--delete' entfernen!
rsync Parameter: -c oder --checksum
Mit dem rsync-Parameter -c bzw. --checksum werden die Dateien nicht anhand von Größe und Datum zwischen Quell- und Backup-Verzeichnis verglichen, sondern über eine Checksum-Funktion, dazu werden die Quell- und Backupdaten soweit vorhanden mindestens einmal gelesen.
Der Vergleich der Dateien dauert damit zwar wesentlich länger aber nur so können Schreibfehler und beschädigte Dateien auf der Backupseite erkannt und korrigiert werden! Da es hier jedoch um die Datensicherheit und nicht um Geschwindigkeit geht, ist dieser Parameter hier unverzichtbar!
rsync Parameter: -v (bzw. --verbose, -vv, -vvv)
VORSICHT: Die verwendete Version von rsync (3.0.9) funktioniert innerhalb der debug.cfg mit dem Parameter -v bzw. --verbose oder in Kombinationen mit diesen nicht korrekt! Die Verwendung der -v Schalter innerhalb der debug.cfg führt dazu, dass rsync vorzeitig abgebrochen wird! Dieser Parameter darf daher nicht in der debug.cfg verwendet werden! Im Telnet-Fenster dagegen könnt ihr den -v Schalter normal verwenden.
Weitere Möglichkeiten mit rsync
rsync ist ein mächtiges Tool. Ihr könnt mit rsync natürlich nicht nur Dateien lokal sichern oder abgleichen, sondern beispielsweise auch zwischen entfernten Geräten über das Netzwerk. Auf diese Weise könntet ihr beispielsweise auch das Backup auf eine zweite (entfernte) FritzBox oder ein anderen NAS System erstellen. Ein Blick in das Manual von rsync zeigt euch die nötigen Parameter, insofern betrachtet diese Anleitung hier als kleine Anregung!
Kompatibilität:
Die hier vorgestellten Scripte für die debug.cfg sollten auf diversen FritzBoxen mit USB-Anschluss bzw. USB-Speicherunterstützung laufen. Angefangen von der Fritz!Box 7170 über die 7390 bis zur 7490 und mehr!
Getestet habe ich die Scripte ausgiebig mit einer Fritz!Box 7390.
(Die Schleifen und Funktionen wurden auch mit der FritzBox 7170 getestet, rsync sollte hier prinzipiell auch funktionieren, IPv6 funktioniert hier natürlich nicht!)
Handelt es sich hier um ein "echten Raid-1" Verbund?:
Nein, natürlich nicht! Die Daten werden zwar auf das zweite Laufwerk quasi "gespiegelt" bzw. als Backup gesichert, allerdings nicht in Echtzeit sondern nur zeitlich verzögert ein- oder mehrmals pro Tag!
Ebenso können Source- und Backuplaufwerk über verschiedene Dateisysteme verfügen,
z.B. die Quelle: FAT32 und das Backup: Ext3
...zur Geschwindigkeit:
Ich habe meine Scripte an der FritzBox mit ein paar "alten" USB-SD-Cardreadern samt SD-Karte getestet.
Die komplette Replizierung von etwa 1000 Dateien mit 2664 MB/2,7 GB dauerte hier etwa 17-18 Minuten und der Abgleich bzw. Vergleich der Daten mit der rsync --checksum Funktion etwa 10 Minuten.
Wenn man nun die FritzBox pro Tag nicht mehr als zwei Stunden Daten checken lassen möchte, ließen sich bei dieser Geschwindigkeit auf der 7390 so um die 32 GB per Backup sichern.
Wesentlich interessanter wird das Ganze natürlich auf einer Fritz!Box 7490 oder neuer, da diese über eine schnellere CPU und über USB 3.0 Anschlüsse verfügt.
Auf einer alten Fritz!Box 7170 mit USB 1.1 Anschlüsse sieht das dagegen natürlich nicht so toll aus!
Ursprünglich wollte ich mir eigentlich ein (Standalone-)NAS-Server kaufen, da aber die aktuellen FritzBox-Modelle immer mehr Funktionen bieten, fehlte mir eigentlich nur noch eine wichtige Funktion: Quasi ein "Raid 1"-Modus um eine entsprechende Datensicherheit beim (physischen) Ausfall eines Laufwerks zu gewährleisten!
Die Idee war nun recht simple: Man schließe einfach zwei USB-Festplatten oder Flashlaufwerke an die FritzBox an und "spiegelt" alle Daten oder einen bestimmten Verzeichniszweig auf das zweite Laufwerk! Fällt nun eines der Laufwerke mit einen Defekt aus, hat man immer noch das Backup der Daten!
Solch eine Backup-Funktion für ein zweites Laufwerk würde ich mir natürlich auch als vollintegrierte Funktion von AVM für die FritzBoxen wünschen! Die Idee dürfen sie hier gerne kopieren! ;-)
Die Vorteile der hier vorgestellten Variante:
- keine Modifikation der Firmware, nur die debug.cfg muss angepasst werden
- rsync wird jeweils nur zum Backup gestartet und anschließend beendet, einziger Hintergrundprozess ist die Funktionsschleife in der debug.cfg
- Fehlerausgaben und Kontrollmöglichkeit über das System-Log der FritzBox, wie etwa Zeitpunkt und Dauer des Backup, sowie den rsync Return Code im Fehlerfall
- bei den IP-getriggerten Varianten kann das Backup jederzeit manuell über die FritzBox-Oberfläche gestartet werden
- es können entweder das ganze Laufwerk oder einzelne Verzeichnisse gesichert werden
Die erforderlichen Arbeitschritte in Kurzfassung:
1.) zwei USB-Festplatten oder -Flashspeicher anschließen, sowie ggf. Quell/Ziel-Verzeichnisse erstellen
2.) die passende "rsync"-Binärdatei auf den FritzBox-Speicher kopieren
3.) die debug.cfg anpassen (oder neu erstellen) und die FritzBox neu starten
... fertig!
Voraussetzungen:
Ihr braucht natürlich eine FritzBox mit USB-Anschluss bzw. USB-Speicherunterstützung und falls nötig einen USB-Hub. Telnet muss auf der FritzBox aktiviert sein, um die debug.cfg anpassen zu können. Des weiteren selbstverständlich zwei USB-Speicherlaufwerke (USB-Sticks, -Festplatten, SD-Cardreader oder ähnlich), wobei das zweite Laufwerk über genug freien Speicher verfügen muss, um alle Daten des Backup aufnehmen zu können!
Ein Laufwerk wird also immer als Master genutzt, auf diesen werden die Daten zuerst gespeichert und das zweite Laufwerk wird als Backup-Laufwerk genutzt.
Wie ihr das Backup im Netzwerk nur schreibgeschützt bereitstellen könnt, findet ihr in den Anmerkungen weiter unten.
Des weiteren benötigt ihr für eure FritzBox eine passende rsync-Binary (siehe Installation).
Variante 1: Tägliches Backup (ausgelöst bzw. initialisiert durch die wechselnde IP-Adresse):
Für alle die über einen herkömmlichen (DSL-)Internet-Anschluss verfügen, bei dem täglich eine Zwangstrennung mit wechselnder IP-Adresse erfolgt, empfiehlt sich das tägliche Backup über die neue IP-Adresse zu initialisieren!
Das hat gleich zwei wesentliche Vorteile:
1.) Ihr könnt den Zeitpunk des Täglichen Backup einfach mit dem Zeitpunkt der Zwangstrennung in der FritzBox einstellen ohne jedes mal die debug.cfg anpassen zu müssen:
FritzBox Menü: "Internet" >> "Zugangsdaten" >> "Verbindungseinstellungen" >> "Zwangstrennung durch den Anbieter verschieben in die Zeit zwischen..."
2.) Ihr könnt jederzeit einfach ein neues Backup initialisieren, indem ihr über die FritzBox Oberfläche eine neue IP-Adresse anfordert:
FritzBox Menü: "Internet" >> "Online-Monitor" >> "Neu verbinden"
Diejenigen die über eine statische IP-Adresse verfügen, müssen ggf. auf die zeitgesteuerten Varianten zurückgreifen. Mit einem Neustart der FritzBox könnt ihr zur Not aber auch hier manuell ein Backup auslösen:
FritzBox Menü: "System" >> "Sicherung" >> "Neustart" >> "Neu starten"
(Anpassungen für IPv6 Anschlüsse siehe weiter unten bei den weiteren Hinweisen!)
Code:
#!/bin/sh
eventadd 1 "====================== debug.cfg gestartet ======================"
sleep 60
get_IP() { /sbin/showdsldstat | grep " ip" | sed -e "s/^.*ip //g" -e "s/ .*$//" -e "\$!d" ; }
alias rsync="/var/media/ftp/rsync-mips-static"
rsync_Source="/var/media/ftp/Multiple-CardReader-01/Source/"
rsync_Target="/var/media/ftp/Generic-StorageDevice-01/Backup/"
{
while true; do
new_IP="$(get_IP)"
if [ "$new_IP" != "$old_IP" ] ; then
if [ ! -d "$rsync_Source" ] ; then
eventadd 1 "===== ERROR: rsync_Source not found! ($rsync_Source) ====="
elif [ ! -d "$rsync_Target" ] ; then
eventadd 1 "===== ERROR: rsync_Target not found! ($rsync_Target) ====="
else
eventadd 1 "================ IP: "$new_IP", Starte rsync... ================"
rsync -ac --delete "$rsync_Source" "$rsync_Target"
rsync_returncode="$?"
if [ "$rsync_returncode" != "0" ] ; then
eventadd 1 "===== rsync Return Code ($rsync_returncode): rsync-Fehler oder noch nicht fertig... ====="
old_IP="restart"
else
chmod -R 777 "$rsync_Target"
eventadd 1 "======================== rsync beendet! ======================="
old_IP="$new_IP"
fi
fi
fi
sleep 90
done
}&
Variante 2: Zeitgesteuertes Backup zu festen Uhrzeiten, z.B. jeden Tag um 5:00 und 23:00 Uhr:
Code:
#!/bin/sh
eventadd 1 "====================== debug.cfg gestartet ======================"
sleep 60
alias rsync="/var/media/ftp/rsync-mips-static"
rsync_Source="/var/media/ftp/Multiple-CardReader-01/Source/"
rsync_Target="/var/media/ftp/Generic-StorageDevice-01/Backup/"
rsync_StartTimes="05:00,23:00"
{
while true; do
new_Date="$(date -I)"
new_Time="$(date | sed -e "s/\(^.*\)\(..:..:..\)\(.*$\)/\2/")"
new_Time2="$(echo $new_Time | sed -e "s/\(^..:..\)\(.*\)/\1/")"
echo "$rsync_StartTimes" | grep "$new_Time2" >/dev/null
if [[ "$?" = "0" || "$old_Time" = "restart" ]] ; then
if [ ! -d "$rsync_Source" ] ; then
eventadd 1 "===== ERROR: rsync_Source not found! ($rsync_Source) ====="
elif [ ! -d "$rsync_Target" ] ; then
eventadd 1 "===== ERROR: rsync_Target not found! ($rsync_Target) ====="
else
eventadd 1 "======================== Starte rsync... ========================"
rsync -ac --delete "$rsync_Source" "$rsync_Target"
rsync_returncode="$?"
if [ "$rsync_returncode" != "0" ] ; then
eventadd 1 "===== rsync Return Code ($rsync_returncode): rsync-Fehler oder noch nicht fertig... ====="
old_Time="restart"
else
chmod -R 777 "$rsync_Target"
eventadd 1 "======================== rsync beendet! ======================="
old_Time="$new_Time2"
fi
sleep 10
fi
fi
sleep 55
done
}&
Code:
#!/bin/sh
eventadd 1 "====================== debug.cfg gestartet ======================"
sleep 60
get_IP() { /sbin/showdsldstat | grep " ip" | sed -e "s/^.*ip //g" -e "s/ .*$//" -e "\$!d" ; }
alias rsync="/var/media/ftp/rsync-mips-static"
rsync_Source="/var/media/ftp/Multiple-CardReader-01/Source/"
rsync_Target="/var/media/ftp/Generic-StorageDevice-01/Backup/"
rsync_StartTimes="05:00,23:00"
{
while true; do
new_IP="$(get_IP)"
new_Date="$(date -I)"
new_Time="$(date | sed -e "s/\(^.*\)\(..:..:..\)\(.*$\)/\2/")"
new_Time2="$(echo $new_Time | sed -e "s/\(^..:..\)\(.*\)/\1/")"
echo "$rsync_StartTimes" | grep "$new_Time2" >/dev/null
if [[ "$?" = "0" || "$old_Time" = "restart" || "$new_IP" != "$old_IP" ]] ; then
if [ ! -d "$rsync_Source" ] ; then
eventadd 1 "===== ERROR: rsync_Source not found! ($rsync_Source) ====="
elif [ ! -d "$rsync_Target" ] ; then
eventadd 1 "===== ERROR: rsync_Target not found! ($rsync_Target) ====="
else
eventadd 1 "================ IP: "$new_IP", Starte rsync... ================"
rsync -ac --delete "$rsync_Source" "$rsync_Target"
rsync_returncode="$?"
if [ "$rsync_returncode" != "0" ] ; then
eventadd 1 "===== rsync Return Code ($rsync_returncode): rsync-Fehler oder noch nicht fertig... ====="
old_Time="restart"
else
chmod -R 777 "$rsync_Target"
eventadd 1 "======================== rsync beendet! ======================="
old_Time="$new_Time2"
old_IP="$new_IP"
fi
sleep 10
fi
fi
sleep 55
done
}&
Anzupassende Parameter:
Folgende Zeilen in dem Code müsst ihr für eure FritzBox noch entsprechend anpassen:
Code:
alias rsync="/var/media/ftp/rsync-mips-static"
rsync_Source="/var/media/ftp/Multiple-CardReader-01/Source/"
rsync_Target="/var/media/ftp/Generic-StorageDevice-01/Backup/"
rsync_StartTimes="05:00,23:00"
alias rsync=[...] zeigt auf den Pfad und Dateinamen euer rsync-Binärdatei
rsync_Source=[...] zeigt auf den Quelllaufwerk bzw. -Pfad der zu sichernden Dateien (sollte mit "/" enden)
rsync_Target=[...] zeigt auf das Backup-Laufwerk[/Verzeichnis/] (sollte mit "/" enden)
rsync_StartTimes=[...] hier listet ihr die Zeiten auf, zu der das Backup immer ausgeführt werden soll (nur bei den zeitgesteuerten Varianten)
Installation:
1.) Beide USB-Laufwerke an die FritzBox anschließen und auf dem Backuplaufwerk am besten einen separaten Ordner für das Backup erstellen, bei mir ist das z.B. der Ordner "Backup". Falls ihr das ganze Laufwerk sichern wollt gebt ihr als Source den Stammpfad des Laufwerkes an. Fall ihr nur ein Verzeichnis samt Unterverzeichnisse sichern wollt, erstellt ihr dafür am besten einen gesonderten Ordner (in meinen Beispiel ist das der Ordner "Source").
2.) Ihr benötigt für eure FritzBox eine kompilierte rsync Binärdatei je nach Model eine Version für die MIPS FritzBoxen (z.B. für die Fritz!Box 7390) oder eine für die MIPSel FritzBoxen (z.B. die Fritz!Box 7170)
Ich habe für die 7390 diese hier von MaxMuster benutzt:
http://www.ip-phone-forum.de/showthread.php?t=104159&p=1906699#post1906699
Die rsync Binärdatei legt ihr direkt auf den Speicher der FritzBox oder auf den Source-Laufwerk ab. Ich habe sie z.B. in das Stammverzeichnis bzw. das per NAS-Zugriff "sichtbare Root-Verzeichnis" abgelegt, also dem internen Speicher der Fritz!Box 7390, Dateiname "rsync-mips-static".
3.) Nun müsst ihr eine der Scriptvarianten für die debug.cfg, entsprechend euren Laufwerkspfaden anpassen und auf die FritzBox kopieren.
Bei der FritzBox 7390 geht das recht einfach, per Telnet auf die FritzBox einwählen, dann soweit vorhanden die debug.cfg von den Flashspeicherbereich auf dem NAS-Speicherbereich kopieren, der per NAS-Zugang direkt erreichbar ist, dort könnt ihr die debug.cfg dann komfortabel editieren.
Die vorhandene debug.cfg von dem Flashspeicherbereich in den "NAS-Speicherbereich" kopieren:
cat /var/flash/debug.cfg > /var/media/ftp/debug.cfg
... dort editieren bzw. das Script hinzufügen und dann wieder zurück in den Flashbereich kopieren:
cat /var/media/ftp/debug.cfg > /var/flash/debug.cfg
Wenn ihr zuvor noch keine debug.cfg erstellt haben solltet, könnt ihr diese einfach mit einem geeigneten Texteditor neu erstellen, z.B. Notepad++ (Wichtig: die debug.cfg nur mit UNIX-Zeilenumbrüchen speichern!) und dann wie angegeben wieder in den Flashbereich zurückkopieren.
Alternativ könnt ihr die debug.cfg auch direkt auf der FritzBox erstellen und diese mit "nvi" bearbeiten:
echo "" > /var/flash/debug.cfg
nvi /var/flash/debug.cfg
Beachtet Bitte, dass nach jeder Änderung der debug.cfg die FritzBox neu gestartet werden muss, damit die Änderungen aktiv werden!
4.) Nachdem alles soweit vorbereit ist müsst ihr die FritzBox nur noch neu starten, damit die Änderungen in der debug.cfg übernommen und aktiviert werden!
Nach dem Neustart schaut in das Ereignis-Log der FritzBox. Falls ein Pfad falsch angegeben sein sollte, könnt ihr das hier sehen! Der rsync Return Code (127) kann auch bedeuten, das der Pfad zur rsync-Datei nicht korrekt ist! Wenn soweit alles ok ist, sollte das im Ereignis-Log etwa so aussehen:
Weitere Hinweise und Anmerkungen:
chmod -R 777 "$rsync_Target"
Die Zeile chmod -R 777 "$rsync_Target" wird normalerweise nur benötigt wenn sich "$rsync_Target" auf dem internen Speicher der FritzBox oder auf einen Ext3-formatierten Laufwerk befindet!
Wenn sich das Backup auf einen FAT/FAT32-Laufwerk befindet, hat diese Zeile keinen weiteren Effekt und ihr könnt diese entfernen!
Tip: Wenn ihr das Backup nur schreibgeschützt bzw. mit Nur-Lesezugriff bereitstellen wollt, dann ändert diese Zeile auf chmod -R 755 "$rsync_Target". Auf diese Weise kann das Backup per NAS/Netzwerkzugriff nicht mehr versehentlich gelöscht oder überschrieben werden! Das funktioniert natürlich nur, wenn das Backuplaufwerk zuvor Ext3 formatiert wurde!
Wollt ihr dann dennoch Dateien im Backup löschen, könnt ihr das über das Telnet-Login auf der FritzBox tun!
IPv4 / IPv6-Anschlüsse
Wer über einen reinen IPv6 Anschluss mit wechselnde IPv6 Adresse verfügt, muss ggf. die get_IP() Funktion zur Abfrage der öffentlichen IPv4-Adresse mit einer angepassten Version für die IPv6-Abfrage ersetzen.
Ersetzt in dem Fall ggf. die Zeilen:
Code:
get_IP() { /sbin/showdsldstat | grep " ip" | sed -e "s/^.*ip //g" -e "s/ .*$//" -e "\$!d" ; }
...
new_IP="$(get_IP)"
Code:
get_IPv6() { /sbin/showdsldstat | grep -i "IPv6.*address " | sed -e "s/^.*address //g" -e "s/ .*$//" -e "\$!d" ; }
...
new_IP="$(get_IPv6)"
rsync-Parameter: "--delete"
Mit dem rsync-Parameter "--delete" werden in der Source gelöschte Dateien auch im Backup gelöscht, somit wird das Backup immer synchron zur Source gehalten. Wer nun in der Source gelöschte Dateien auf der Backup-Seite erhalten möchte um diese etwa nur manuell zu löschen, braucht nur den Parameter '--delete' entfernen!
rsync Parameter: -c oder --checksum
Mit dem rsync-Parameter -c bzw. --checksum werden die Dateien nicht anhand von Größe und Datum zwischen Quell- und Backup-Verzeichnis verglichen, sondern über eine Checksum-Funktion, dazu werden die Quell- und Backupdaten soweit vorhanden mindestens einmal gelesen.
Der Vergleich der Dateien dauert damit zwar wesentlich länger aber nur so können Schreibfehler und beschädigte Dateien auf der Backupseite erkannt und korrigiert werden! Da es hier jedoch um die Datensicherheit und nicht um Geschwindigkeit geht, ist dieser Parameter hier unverzichtbar!
rsync Parameter: -v (bzw. --verbose, -vv, -vvv)
VORSICHT: Die verwendete Version von rsync (3.0.9) funktioniert innerhalb der debug.cfg mit dem Parameter -v bzw. --verbose oder in Kombinationen mit diesen nicht korrekt! Die Verwendung der -v Schalter innerhalb der debug.cfg führt dazu, dass rsync vorzeitig abgebrochen wird! Dieser Parameter darf daher nicht in der debug.cfg verwendet werden! Im Telnet-Fenster dagegen könnt ihr den -v Schalter normal verwenden.
Weitere Möglichkeiten mit rsync
rsync ist ein mächtiges Tool. Ihr könnt mit rsync natürlich nicht nur Dateien lokal sichern oder abgleichen, sondern beispielsweise auch zwischen entfernten Geräten über das Netzwerk. Auf diese Weise könntet ihr beispielsweise auch das Backup auf eine zweite (entfernte) FritzBox oder ein anderen NAS System erstellen. Ein Blick in das Manual von rsync zeigt euch die nötigen Parameter, insofern betrachtet diese Anleitung hier als kleine Anregung!
Kompatibilität:
Die hier vorgestellten Scripte für die debug.cfg sollten auf diversen FritzBoxen mit USB-Anschluss bzw. USB-Speicherunterstützung laufen. Angefangen von der Fritz!Box 7170 über die 7390 bis zur 7490 und mehr!
Getestet habe ich die Scripte ausgiebig mit einer Fritz!Box 7390.
(Die Schleifen und Funktionen wurden auch mit der FritzBox 7170 getestet, rsync sollte hier prinzipiell auch funktionieren, IPv6 funktioniert hier natürlich nicht!)
Handelt es sich hier um ein "echten Raid-1" Verbund?:
Nein, natürlich nicht! Die Daten werden zwar auf das zweite Laufwerk quasi "gespiegelt" bzw. als Backup gesichert, allerdings nicht in Echtzeit sondern nur zeitlich verzögert ein- oder mehrmals pro Tag!
Ebenso können Source- und Backuplaufwerk über verschiedene Dateisysteme verfügen,
z.B. die Quelle: FAT32 und das Backup: Ext3
...zur Geschwindigkeit:
Ich habe meine Scripte an der FritzBox mit ein paar "alten" USB-SD-Cardreadern samt SD-Karte getestet.
Die komplette Replizierung von etwa 1000 Dateien mit 2664 MB/2,7 GB dauerte hier etwa 17-18 Minuten und der Abgleich bzw. Vergleich der Daten mit der rsync --checksum Funktion etwa 10 Minuten.
Wenn man nun die FritzBox pro Tag nicht mehr als zwei Stunden Daten checken lassen möchte, ließen sich bei dieser Geschwindigkeit auf der 7390 so um die 32 GB per Backup sichern.
Wesentlich interessanter wird das Ganze natürlich auf einer Fritz!Box 7490 oder neuer, da diese über eine schnellere CPU und über USB 3.0 Anschlüsse verfügt.
Auf einer alten Fritz!Box 7170 mit USB 1.1 Anschlüsse sieht das dagegen natürlich nicht so toll aus!