Hallo noch einmal,
ich habe das Ganze jetzt für eine Weile beobachtet und es funkioniert jetzt so, wie ich es mir gewünscht habe. Die zuvor beschriebenen Probleme lagen tatsächlich an der Trennung durch den Provider. In der jetzigen Version meiner Backup-Routine habe ich nun doch auch eine Protokollierung der WAN-IP-Adresse eingebaut. Anstatt den IP-Check von DynDNS zu verwenden, habe ich mich jedoch entschieden, ein eigenes kleines php-Skript auf unseren Server zu installieren (auf diese naheliegende Idee war ich gar nicht gekommen).
| <?php
echo $_SERVER['REMOTE_ADDR'] . "\n";
?>
|
Der eigentliche Ablauf ist jetzt folgendermaßen:
1. rsnapshot macht ein inkrementelles Backup (sowohl vom lokalen File-Server als auch vom entfernten Web-Server) auf einer dafür vorgesehenen lokalen Festplatte
2. rsync synchronisiert einen entfernten Server ("Hidrive") und einen lokalen NAS ("Diskstation") mit der lokalen Backup-Festplatte
Dabei könnte folgendes Problem auftreten: Wenn die lokale Backup-Festplatte ausfällt oder durch eine Fehlbenutzung gelöscht wird, würde der Aufruf von rsync dazu führen, dass bei der Synchronisation auch die Daten auf dem Hidrive und der Diskstation gelöscht werden. Das muss in jedem Fall vermieden werden.
Ich habe mich jetzt dazu entschieden, nach jedem Backup die Statusinformationen des Backup-Laufwerkes zu speichern und vor der nächsten Ausführung zu prüfen, ob das Laufwerk unverändert ist. Wird eine Veränderung der Statusinformationen festgestellt, wird die Synchronisation nicht durchgeführt und der Administrator erhält die Information, dass eine manuelle Überprüfung erforderlich ist. Das Skript wird als Cron-Job ausgeführt. Stdout geht automatisch als Email zum Administrator.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92 | #!/bin/bash
# aktuelle Statusinformationen des Backup-Laufwerks in Datei speichern
df | grep /backup1 > /var/log/backup_drive2.txt
less /var/log/backup_drive2.txt
date
# rsnapshot starten
echo starting daily snapshot...
echo local:
rsnapshot daily
date
echo remote:
rsnapshot -c /root/server.conf daily
date
day=$(date +%u)
if [ "$day" = "6" ]; then
echo starting weekly snapshot...
echo local:
rsnapshot weekly
date
echo remote:
rsnapshot -c /root/server.conf weekly
date
fi
day=$(date +%d)
if [ "$day" = "01" ]; then
echo starting monthly snapshot...
echo local:
rsnapshot monthly
date
echo remote:
rsnapshot -c /root/server.conf monthly
date
fi
# Der absolute Super-GAU waere, wenn die Daten auf der BackUp-Festplatte versehentlich geloescht werden
# und rsync trotzdem die Synchronisation startet. Vor dem Start von rsync wird daher kontrolliert, ob
# sich die Groesse der Backup-Festplatte seit dem letzten Backup veraendert hat.
if [ "$(</var/log/backup_drive.txt)" = "$(</var/log/backup_drive2.txt)" ]; then
# Keine Veraenderungen an der Festplatte
# Uebertragung der Daten kann stattfinden
echo starting upload
# backup auf hidrive schreiben:
# Backup-Leitung verwenden
/sbin/route add rsync.hidrive.strato.com gateway 192.168.2.1 metric 1
result=1
while [[ result -ne 0 ]]
do
# IP-Adresse ausgeben
/sbin/route add my.homepage gateway 192.168.2.1 metric 1
echo WAN-IP:
wget http://my.homepage/get_ip.php -O- 2>/dev/null
/sbin/route del my.homepage
# Backup starten
/usr/bin/rsync -azP -e 'ssh -i /root/.ssh/public_hidrive' --hard-links --recursive --delete /backup1/ username@rsync.hidrive.strato.com:/users/username > /dev/null
result=$?
done
/sbin/route del rsync.hidrive.strato.com
echo upload backup finished
date
echo starting local backup
# lokales backup auf diskstation schreiben:
/sbin/route add diskstation gateway 192.168.0.252 metric 1
/usr/bin/rsync -azP -e 'ssh -i /root/.ssh/diskstation' --hard-links --recursive --delete /backup1/ root@diskstation:/volume1/public/backup > /dev/null
/sbin/route del diskstation
echo local backup finished
date
df | grep /backup1 > /var/log/backup_drive.txt
less /var/log/backup_drive.txt
else
# Die Groesse der Festplatte hat sich seit dem letzten Durchlauf des Backups veraendert.
# Ein Datenverlust kann nicht ausgeschlossen werden.
# Festplatte muss manuell geprueft werden. Uebertragung findet nicht statt.
echo FATAL ERROR: unexpected volume size
echo expected:
less /var/log/backup_drive.txt
echo actual size:
less /var/log/backup_drive2.txt
echo backup aborted!!!
fi
echo start cleaning up
/root/bin/cleanup.sh
echo finished
date
|
Vielleich hilft dieses Skript ja dem ein oder anderen von Euch. Ich würde mich auch weiterhin sehr über Verbesserungsvorschläge freuen. Der eigentliche Thread ist jedoch hiermit erledigt.
Vielen Dank und Gruß, bbb