Backup: Automatische Skripte mit rsync: Unterschied zwischen den Versionen
Keine Bearbeitungszusammenfassung |
KKeine Bearbeitungszusammenfassung |
||
(11 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
Zeile 7: | Zeile 7: | ||
Man braucht auf den Quell- und Zielrechnern jeweils rsync. | Man braucht auf den Quell- und Zielrechnern jeweils rsync. | ||
Bei Linux ist das in der Standardinstallation enthalten. | Bei Linux ist das meist in der Standardinstallation enthalten oder kann als Paket installiert werden. | ||
Bei Windows braucht man cygwin. Zusätzlich zur normalen cygwin-Paketauswahl folgende Pakete anwählen: | Bei Windows braucht man [[Cygwin: Basisinstallation|cygwin]]. Zusätzlich zur normalen cygwin-Paketauswahl folgende Pakete anwählen: | ||
Net --> rsync, openssh | Net --> rsync, openssh | ||
Falls der Quellrechner auf Windows | Falls der Quellrechner auf Windows läuft, muss dann noch ein openssh Server eingerichtet werden (siehe hier: [[Cygwin: Einrichtung des SSH-Servers]]). | ||
== Erstellen des eigentlichen Backupscripts == | == Erstellen des eigentlichen Backupscripts == | ||
rsync kann bequem Verzeichnisse synchronisieren. Die Scripte sind ascii-Textfiles. | rsync kann bequem Verzeichnisse synchronisieren. Die Scripte sind ascii-Textfiles. Kommentare werden durch Raute-Zeichen # gekennzeichnet. | ||
==== Beispielscript: ==== | ==== Einfaches Beispielscript: ==== | ||
Das folgende Script | Das folgende Script sorgt für das automatische Backup des home-Bereichs der acid1. | ||
#!/bin/bash | #!/bin/bash | ||
Zeile 27: | Zeile 27: | ||
Bei Unklarheiten hilft die Kommandozeile: | Bei Unklarheiten hilft die Kommandozeile: | ||
rsync --help | rsync --help | ||
oder | oder ausführlicher: | ||
man rsync | man rsync | ||
Für uns besonders wichtig waren folgende Optionen: | |||
-a (Dateiattribute bleiben bestehen) | -a (Dateiattribute bleiben bestehen) | ||
-u (update: nur | -u (update: nur ältere Dateien überschreiben) | ||
--delete (Dateien, die auf dem Quellrechner | --delete (Dateien, die auf dem Quellrechner gelöscht wurden, auch auf dem Ziel loeschen) | ||
--backup (Dateien, die auf dem Ziel mit --delete | --backup (Dateien, die auf dem Ziel mit --delete gelöscht werden, werden in ein Backupverzeichnis verschoben) | ||
--backup-dir (das besagte Backupverzeichnis) | --backup-dir (das besagte Backupverzeichnis) | ||
--exclude-from (Datei, die angibt, was NICHT synchronisiert werden soll, z.B. Gaussian Checkpoints; siehe acid_rsync_exclude.txt) | --exclude-from (Datei, die angibt, was NICHT synchronisiert werden soll, z.B. Gaussian Checkpoints; siehe acid_rsync_exclude.txt) | ||
Nach der Erstellung | Nach der Erstellung müssen die Scripts mit chmod ausführbar gemacht werden. | ||
== Einrichtung des cron-Dienstes == | == Einrichtung des cron-Dienstes == | ||
Der cron-Dienst sorgt | Der cron-Dienst sorgt dafür, dass die Backupscripts regelmäßig nach Zeitplan ausgeführt werden. | ||
Der Zeitplan wird in eine Datei namens crontab geschrieben. | Der Zeitplan wird in eine Datei namens crontab geschrieben. | ||
Eine bestehende crontab kann man mit folgendem Befehl anzeigen: | Eine bestehende crontab kann man mit folgendem Befehl anzeigen: | ||
Zeile 47: | Zeile 47: | ||
Den Editiermodus startet man mit dem Befehl: | Den Editiermodus startet man mit dem Befehl: | ||
crontab -e | crontab -e | ||
Es | Es öffnet sich ein Editor (meist vim), in dem man die Datei editiert. | ||
==== Beispiel-Crontab: ==== | ==== Beispiel-Crontab: ==== | ||
Die folgende crontab | Die folgende crontab sorgt dafür, daß das oben gezeigte einfache Beispiel-Script zum angegebenen Zeitplan ausgeführt wird: | ||
SHELL=/bin/bash | SHELL=/bin/bash | ||
Zeile 57: | Zeile 57: | ||
Mit Raute # kommentiert man Befehle aus. Am Anfang kann man die Shell festlegen, am besten /bin/bash. | Mit Raute # kommentiert man Befehle aus. Am Anfang kann man die Shell festlegen, am besten /bin/bash. | ||
Wichtig: Es sollte immer der | Wichtig: Es sollte immer der vollständige Pfad zu den Backupscripts angegeben werden, sonst funzt es nicht. | ||
Vor jedem Befehl stehen die Zeitplan-Infos in Form von 5 Zahlen(gruppen): | Vor jedem Befehl stehen die Zeitplan-Infos in Form von 5 Zahlen(gruppen): | ||
1. Minute, 2. Stunde, 3. Tag, 4. Monat, 5. Wochentag (1=Montag, 2=Dienstag etc.) | 1. Minute, 2. Stunde, 3. Tag, 4. Monat, 5. Wochentag (1=Montag, 2=Dienstag etc.) | ||
Sternchen * als Platzhalter sind ebenfalls | Sternchen * als Platzhalter sind ebenfalls zulässig. | ||
Beispiele: | |||
0 12 * * 2 bedeutet: ausführen immer dienstags um 12:00 Uhr. | |||
*/5 * * * * bedeutet: ausführen alle 5 Minuten. | |||
33 3 * 3 * bedeutet: ausführen am 3. jedes Monats um 3:33 Uhr. | |||
Beim Speichern der Datei wird die neue crontab automatisch installiert. | Beim Speichern der Datei wird die neue crontab automatisch installiert. | ||
Fehlermeldungen resultieren meist in einer Systemmail an den jeweiligen Benutzer, die man in /var/mail/<username> findet. | Fehlermeldungen resultieren meist in einer Systemmail an den jeweiligen Benutzer, die man in /var/mail/<username> findet. | ||
== Spezielle Anwendungen und Beispiele == | |||
Das folgende Skript erweitert das obige Beispielskript um folgende Features: | |||
* Sichern mehrerer Ordner auf dem Quellrechner, die zu Beginn explizit angesagt werden: '''folders="...''' | |||
* Datumsabgleich der mit --delete bzw. --backup verschobenen Daten mit '''touch''' | |||
* dadurch können später aus dem quellrechner_geloescht-Baum zielsicher alte Dateien nach ihrem Löschdatum identifiziert und gelöscht werden | |||
#!/bin/bash | |||
# regelmaessiges Autobackup der wichtigen Verzeichnisse auf quellrechner | |||
folders="Dokumente bin .mozilla .mozilla-thunderbird .ssh .gnupg .purple .kde/share/apps/kaffeine /etc/ssh" | |||
for f in $folders | |||
do | |||
rsync -avu --exclude-from=/home/user/rsync_exclude.txt --delete --backup --backup-dir=/home/user/quellrechner_geloescht.tmp/$f/ quellrechner:/home/user/$f/ /home/user/quellrechner_aktuell/$f/ | |||
done | |||
find /home/user/quellrechner_geloescht.tmp/ -exec touch -- {} \; | |||
cp -rf /home/user/quellrechner_geloescht.tmp/* /home/user/quellrechner_geloescht/ | |||
cp -rf /home/user/quellrechner_geloescht.tmp/.* /home/user/quellrechner_geloescht/ | |||
rm -rf /home/user/quellrechner_geloescht.tmp | |||
Das nachfolgende Beispiel sorgt für die automatische Sicherung diverser Webseiten auf den NAS-Server: | |||
#!/bin/bash | |||
OPTIONS="$1 -au -e ssh --backup --delete" | |||
ROOTDIR=/home/datenbackups | |||
backup_with_rsync () { | |||
src_dir="$1" | |||
target_dir="$ROOTDIR/${2}_aktuell/" | |||
backup_dir="$ROOTDIR/${2}_deleted.tmp/" | |||
deleted_dir="$ROOTDIR/${2}_deleted/" | |||
mkdir -p "$backup_dir" | |||
rsync $OPTIONS --backup-dir="$backup_dir" "$src_dir" "$target_dir" | |||
find "$backup_dir" -exec touch -- {} \; | |||
rmdir --ignore-fail-on-non-empty "$backup_dir" | |||
test -d "$backup_dir" && cp -rf "${backup_dir}/"* "$deleted_dir" | |||
rm -rf "$backup_dir" | |||
return 0 | |||
} | |||
# Scholle Autobackup | |||
backup_with_rsync root@scholle:/srv/www/htdocs/ scholle | |||
# Sektionsseite Chemie Autobackup | |||
backup_with_rsync sunoc125@upload.rz.uni-kiel.de:/www/sunoc125/htdocs/ sektionsseite | |||
# chemie-in-kiel.de Autobackup | |||
backup_with_rsync sunoc190@upload.rz.uni-kiel.de:/www/sunoc190/htdocs/ chemie_in_kiel | |||
# SFB 677 Website Autobackup | |||
backup_with_rsync sunoc125@upload.rz.uni-kiel.de:/www/sunoc125/htdocs_sfb677/ sfb677 | |||
[[Kategorie:Installations- und Konfigurationsanleitungen]] | |||
[[Kategorie:Anleitung]] |
Aktuelle Version vom 5. Oktober 2009, 14:18 Uhr
Wozu ist das gut?
Mit rsync kann man Verzeichnis(bäume) zwischen verschiedenen Rechnern synchronisieren. Dies eignet sich prima für Backups, vor allem, wenn das Ganze automatisiert regelmäßig laufen kann, ohne daß man sich dauernd selbst drum kümmern muß.
Voraussetzungen
Man braucht auf den Quell- und Zielrechnern jeweils rsync. Bei Linux ist das meist in der Standardinstallation enthalten oder kann als Paket installiert werden. Bei Windows braucht man cygwin. Zusätzlich zur normalen cygwin-Paketauswahl folgende Pakete anwählen:
Net --> rsync, openssh
Falls der Quellrechner auf Windows läuft, muss dann noch ein openssh Server eingerichtet werden (siehe hier: Cygwin: Einrichtung des SSH-Servers).
Erstellen des eigentlichen Backupscripts
rsync kann bequem Verzeichnisse synchronisieren. Die Scripte sind ascii-Textfiles. Kommentare werden durch Raute-Zeichen # gekennzeichnet.
Einfaches Beispielscript:
Das folgende Script sorgt für das automatische Backup des home-Bereichs der acid1.
#!/bin/bash # acid1 home-directory autobackup rsync -aul -e ssh --exclude-from=/home/datenbackups/acid_rsync_exclude.txt --backup --backup-dir=/home/datenbackups/acid1_backup --delete acid1:/home/ /home/datenbackups/acid1/home/
Bei Unklarheiten hilft die Kommandozeile:
rsync --help
oder ausführlicher:
man rsync
Für uns besonders wichtig waren folgende Optionen:
-a (Dateiattribute bleiben bestehen) -u (update: nur ältere Dateien überschreiben) --delete (Dateien, die auf dem Quellrechner gelöscht wurden, auch auf dem Ziel loeschen) --backup (Dateien, die auf dem Ziel mit --delete gelöscht werden, werden in ein Backupverzeichnis verschoben) --backup-dir (das besagte Backupverzeichnis) --exclude-from (Datei, die angibt, was NICHT synchronisiert werden soll, z.B. Gaussian Checkpoints; siehe acid_rsync_exclude.txt)
Nach der Erstellung müssen die Scripts mit chmod ausführbar gemacht werden.
Einrichtung des cron-Dienstes
Der cron-Dienst sorgt dafür, dass die Backupscripts regelmäßig nach Zeitplan ausgeführt werden. Der Zeitplan wird in eine Datei namens crontab geschrieben. Eine bestehende crontab kann man mit folgendem Befehl anzeigen:
crontab -l
Den Editiermodus startet man mit dem Befehl:
crontab -e
Es öffnet sich ein Editor (meist vim), in dem man die Datei editiert.
Beispiel-Crontab:
Die folgende crontab sorgt dafür, daß das oben gezeigte einfache Beispiel-Script zum angegebenen Zeitplan ausgeführt wird:
SHELL=/bin/bash # taegliches Autobackup um 02:00 Uhr der ACID-Rechner 0 2 * * * /home/datenbackups/autobackup_acid
Mit Raute # kommentiert man Befehle aus. Am Anfang kann man die Shell festlegen, am besten /bin/bash. Wichtig: Es sollte immer der vollständige Pfad zu den Backupscripts angegeben werden, sonst funzt es nicht. Vor jedem Befehl stehen die Zeitplan-Infos in Form von 5 Zahlen(gruppen): 1. Minute, 2. Stunde, 3. Tag, 4. Monat, 5. Wochentag (1=Montag, 2=Dienstag etc.) Sternchen * als Platzhalter sind ebenfalls zulässig. Beispiele:
0 12 * * 2 bedeutet: ausführen immer dienstags um 12:00 Uhr. */5 * * * * bedeutet: ausführen alle 5 Minuten. 33 3 * 3 * bedeutet: ausführen am 3. jedes Monats um 3:33 Uhr.
Beim Speichern der Datei wird die neue crontab automatisch installiert.
Fehlermeldungen resultieren meist in einer Systemmail an den jeweiligen Benutzer, die man in /var/mail/<username> findet.
Spezielle Anwendungen und Beispiele
Das folgende Skript erweitert das obige Beispielskript um folgende Features:
- Sichern mehrerer Ordner auf dem Quellrechner, die zu Beginn explizit angesagt werden: folders="...
- Datumsabgleich der mit --delete bzw. --backup verschobenen Daten mit touch
- dadurch können später aus dem quellrechner_geloescht-Baum zielsicher alte Dateien nach ihrem Löschdatum identifiziert und gelöscht werden
#!/bin/bash # regelmaessiges Autobackup der wichtigen Verzeichnisse auf quellrechner folders="Dokumente bin .mozilla .mozilla-thunderbird .ssh .gnupg .purple .kde/share/apps/kaffeine /etc/ssh" for f in $folders do rsync -avu --exclude-from=/home/user/rsync_exclude.txt --delete --backup --backup-dir=/home/user/quellrechner_geloescht.tmp/$f/ quellrechner:/home/user/$f/ /home/user/quellrechner_aktuell/$f/ done find /home/user/quellrechner_geloescht.tmp/ -exec touch -- {} \; cp -rf /home/user/quellrechner_geloescht.tmp/* /home/user/quellrechner_geloescht/ cp -rf /home/user/quellrechner_geloescht.tmp/.* /home/user/quellrechner_geloescht/ rm -rf /home/user/quellrechner_geloescht.tmp
Das nachfolgende Beispiel sorgt für die automatische Sicherung diverser Webseiten auf den NAS-Server:
#!/bin/bash OPTIONS="$1 -au -e ssh --backup --delete" ROOTDIR=/home/datenbackups backup_with_rsync () { src_dir="$1" target_dir="$ROOTDIR/${2}_aktuell/" backup_dir="$ROOTDIR/${2}_deleted.tmp/" deleted_dir="$ROOTDIR/${2}_deleted/" mkdir -p "$backup_dir" rsync $OPTIONS --backup-dir="$backup_dir" "$src_dir" "$target_dir" find "$backup_dir" -exec touch -- {} \; rmdir --ignore-fail-on-non-empty "$backup_dir" test -d "$backup_dir" && cp -rf "${backup_dir}/"* "$deleted_dir" rm -rf "$backup_dir" return 0 } # Scholle Autobackup backup_with_rsync root@scholle:/srv/www/htdocs/ scholle # Sektionsseite Chemie Autobackup backup_with_rsync sunoc125@upload.rz.uni-kiel.de:/www/sunoc125/htdocs/ sektionsseite # chemie-in-kiel.de Autobackup backup_with_rsync sunoc190@upload.rz.uni-kiel.de:/www/sunoc190/htdocs/ chemie_in_kiel # SFB 677 Website Autobackup backup_with_rsync sunoc125@upload.rz.uni-kiel.de:/www/sunoc125/htdocs_sfb677/ sfb677