Rsync
Aus Ubuntu-Forum Wiki
| |
Inhaltsverzeichnis |
[Bearbeiten] 1 Allgemeines
Mittels rsync ist es möglich, manuell und automatisch Datenbestände in verschiedenen Verzeichnisbäumen abzugleichen bzw. zu synchronisieren und somit auf dem gleichen Stand zu halten.
Der Begriff Synchronisieren ist allerdings nicht der Richtige, besser wäre die Bezeichnung Replikation, d.h. es werden neue oder veränderte Dateien von der Quelle auf das Ziel kopiert.
Zur echten Synchronisation sollte man das Programm unison (auch mit grafischer Oberfläche, siehe dazu unten unter Links) verwenden. Dies kann lokal oder über das Netzwerk (z.B. mittels ssh) erfolgen. Zu bedenken ist hierbei jedoch, dass nicht mehr auf dem Quell-Laufwerk vorhandene Dateien und Verzeichnisse auch auf dem Ziel-Laufwerk gelöscht werden. Beide Verzeichnisse hätten also immer den gleichen Inhalt (synchron).
[Bearbeiten] 2 Installation
Falls rsync noch nicht installiert ist, sollte man zuerst die Paketquellen freischalten und anschließend das Paket rsync installieren. Per Terminal wäre der Befehl:
sudo apt-get install rsync
[Bearbeiten] 3 Benutzung
Generell ist die Rsync-Syntax wie folgt:
rsync Parameter Quelle Ziel
[Bearbeiten] 3.1 Kurzbeschreibung einiger Parameter
Eine vollständige Liste der Parameter gibt es hier.
| -v | verbose | ausgiebiger Bericht der gerade laufenden Bearbeitung |
| -q | quiet | keine Ausgabe von Fehlermeldungen |
| -a | archive | Zusammenfassung der Parameter -rlptgoD |
| -r | recursive | Abgleichen mit allen Unterverzeichnissen |
| -l | links | Kopieren der symlinks |
| -p | perms | übertragen der Zugriffssrechte |
| -t | time | Übertragen des Zeitstempels |
| -g | group | Übertragen der Gruppenrechte |
| -o | owner | übertragen der Benutzerrechte |
| -n | Testparameter | Testparameter, die Befehle werden ausgeführt aber es wird nicht kopiert (Testlauf) |
| -u | update | Bereits vorhadene Dateien werden nur bei neuerem Quelldatum kopiert |
| -E | execute | Attribut "ausführbar" bleibt erhalten |
| --delete | delete | löscht nicht mehr vorhandene Dateien auf der Quelle auch auf dem Ziel (synchron) |
| --exclude | exclude | schließt Verzeichnisse von der Sicherung aus |
[Bearbeiten] 3.2 Beispiele zur lokalen Datensicherung
rsync -a /home/peter/daten /home/peter/sicherung/
Hierbei wird das Verzeichnis "daten" des Users "peter" inkl. des Verzeichnisnamens in das Verzeichnis "sicherung" in dessen eigenem Homeverzeichnis kopiert.
rsync -a /home/peter/daten/ /home/peter/sicherung/daten/
Hierbei werden nur die Daten aus dem Verzeichnis /daten in den Zielordner /daten kopiert.
[Bearbeiten] 3.3 Dateien vom Kopieren ausschließen
Damit nur gewünschte Nutzdaten übertragen werden, können bestimmte Dateitypen von der Verarbeitung ausgeschlossen (exclude) werden:
--exclude=*.bak --exclude=.tmp --exclude=*~ Quelle Ziel
Um hierbei die Übersicht zu behalten, kann dies in eine Liste der nicht zu kopierenden Dateien ausgelagert werden.
--exclude-from="Name und Ort der exclude Datei"
Manuelle Datensicherung ist ja schön und gut, aber warum, wenn es auch automatisch geht. Linux verfügt über viele hilfreiche Features, um zeitgesteuerte Aktionen auszuführen. Hierzu gehört der crond, welcher über eine Konfigurationsdatei (/etc/crontab) gesteuert werden kann.
Bindet man nun das Syncronisationsscript in diese Datei (/ect/crontab) ein, kann der Sicherungslauf automatisch zeit- oder aktionsgesteuert im Hintergrund angestossen werden.
Erklärungen zu crontab: Die 5 ersten Felder eines Eintrags sind
- Minute
- Stunde
- Tag des Monats
- Monat
- Wochentag (0 oder 7 ist Sonntag)
Hiernach würde dieser Crontabeintrag
*/15 * * * * peter /home/peter/sicherung_smb
alle 15 Minuten an allen Tagen der Woche das Script sicherung_smb mit den Rechten des Users peter aufrufen und ausführen. Dies eignet sich z.B. für die permanente Datensicherung alle 15 Minuten. Da hierbei nur die veränderten Daten übertragen werden, ist der Zeitaufwand für die Datensicherung relativ gering.
Es eignet sich für permanent eingebundene Ziele genauso wie für Wechselspeichermedien, auf die kopiert werden soll. Was passieren soll, wird in dem jeweiligen aufzurufenden Script geregelt.
Man kann auch nur ein Script zur Datensicherung verwenden, in dem alle Arten der gewünschten Datensicherungen auf verschiedene Ziele geregelt werden, je nachdem welche Laufwerke bei der Script aktivierung gerade gemountet sind.
Dies hat den Vorteil, dass, egal ob man nun einen Memorystick einsteckt, auf dem eine Verzeichnis-Synchronisation mit der Arbeitsstation erfolgen soll, oder das externe Festplattenlaufwerk eingeschaltet wird, um eine Datensicherung durchzuführen. Das Script prüft ab, was eingesteckt wurde, und stösst dann alle 15 Minuten die notwendigen Synchronistaionen an.
[Bearbeiten] 3.4 Externe Laufwerke
Für externe Speichermedien wie z.B externe Festplattenlaufwerke und Memorysticks kann man den Vorgang auch dahingehend automatisieren, dass, wenn ein bestimmter Datenträger eingeschalten oder angesteckt wird, automatisch eine Datensicherung (oder Synchronisierung) erfolgt.
[Bearbeiten] 3.5 Fest gemountete Datensicherungsverzeichnisse
Verfügt man z.B. über einen mount auf einem Server, welcher bereits bei der Anmeldung aktiviert wird, könnte ein solcher Crontabeintrag lauten:
15 1 * * 1,2,3,4,5,6,7 peter /home/peter/sicherung_smb
Dieser Eintrag würde 15 Minuten nach jeder vollen Stunde das aufgeführte Script abarbeiten.
Anmerkungen: Der Benutzer von rsync muss auf dem Ziel über die notwendigen Rechte zur Dateiablage verfügen (read+write). rsync kann nur Dateien übetragen, auf die der Benutzer von rsync auch die notwendigen Rechte besitzt. Enthält die Quellangabe als letztes Zeichen einen Slash (/), wird der letze angegebende Verzeichnisname nicht mitkopiert (auf dem Ziellaufwerk neu angelegt), sondern es wird nur dessen Inhalt in das angegebene Ziel kopiert.
Beispiel:
rsync -a /home/peter/daten/ /home/peter/sicherung/daten/
Kopiert nur die Daten (Dateien und Verzeichniss) aus dem Verzeichnis /daten in den Unterordner /daten des Ziellaufwerks.
rsync -a /home/peter/daten /home/peter/sicherung/daten/
Dies würde im Unterschied zum ersten Beispiel im Zielordner /daten ein neues Verzeichnis /daten/daten erstellen und den Inhalt dort hinkopieren.
Beim Kopieren (Replikation) verbleiben natürlich Dateien und Verzeichnisse auf den Ziellaufwerk, welche bereits auf der Quelle gelöscht wurden.
Möchte man die Verzeichnisse syncron halten, lohnt sich die Verwendung des Programms unison (mit grafischer Oberfläche).
Zu bedenken ist hierbei jedoch, dass nicht mehr auf dem Quell-Laufwerk vorhandene Dateien und Verzeichnisse auch auf dem Ziel-Laufwerk gelöscht werden. Beide Verzeichnisse hätten also immer den gleichen Inhalt (synchron).
[Bearbeiten] 3.6 Kleines Script zum Einbinden in die crontab zur automatischen Datensicherung
#!/bin/bash # einfaches Script zur automatischen Datensicherung auf externe Medien # mittels des Befehls rsync zur Datenreplikation # gibt es eine Datei unter /media/usbdisk/datensicherung/usb_disk if test -e /media/usbdisk/datensicherung/usb_disk # dann führe das Script unter == /home/Benutzername/script/backup_usb_disk == aus then echo "gefunden" # Auswahl der Backupfunktion externes File oder direkt mittels rsync # ausführen eines externen Scripts # exec /home/Benutzername/script/scriptname # oder direktes Ausführen des rsync Befehls zur Replikation der Dateien # rsync -a /vollständige_quelle /vollständiges_ziel else echo "nicht gefunden" fi
Automatisches Backup mit dem o.a. Script
Zunächst benötigen wir ein Verzeichnis auf dem Zieldatenträger hier:
/media/usbdisk/datensicherung
Als nächstes benötigen wir eine Datei in diesem Verzeichnis:
touch /media/usbdisk/datensicherung/usb_disk
Der Befehl touch legt diese Datei an, jedoch ohne Inhalt, ggf. könnte man hier Infos reinschreiben.
Das eigentliche Sicherungsscript legt man in das Homeverzeichnis von root (/root/script/backup_usb_disk)
oder eben in das eigene Homeverzeichnis
/home/Benutzername/script/backup_usb_disk
Bitte beachtet hierbei wer das Script ausführen darf (im crontab kann man festlegen mit welchen Benutzerrechten dies geschehen soll) und macht das Script anschließend noch ausführbar.
chmod u+x backup_usb_script
Im Script selbst muss man ggf. noch das Quell und das Ziellaufwerk sowie die Quell- und Zielverzeichnisse abändern.
Man könnte jetzt verschiedene externe Laufwerke mit verschiedenen Backupfunktionen einrichten und beim einstecken oder anschalten des Laufwerks würde beim nächsten Abarbeiten des crond bzw. der /etc/crontab die gewünschten Datenreplikationen durchführen (je nach dem welche Aktivierungszeit eingestelt wurde).
Man könnte dies alles in ein Script einbauen, wäre einfacher zu pflegen und alles in nur einem Script integriert.
Ich habe hierbei bewusst auf das Einbinden der UID der externen Laufwerke verzichtet, das dies für den Anfänger durchsichtiger erscheint was eigentlich passiert.
Zusammenfassung was benötigt wird:
Auf dem Ziellaufwerk - zum Feststellen was angesteckt wurde: Verzeichnis /media/usbdisk/datensicherung Datei /media/usbdisk/datensichrung/usb_disk
Im eigenen Home oder Home des root- Benutzers - eigentliches Sicherungsscript: Script /home/Benutzername/script/backup_usb_disk
crontab Eintrag in der Datei: /etc/crontab
Falls man die automatische Variante nicht will, kann man auch einen Starter auf der Desktop-Oberfläche anlegen um das Sicherungskript zu starten, oder man startet es halt von Hand aus der Konsole heraus.
Hierbei entfällt der notwendige crontab Eintrag.
Die Echoeinträge im Skript können entfernt werden, denn sie dienen während des Testens nur zur Anzeige, ob die gesuchte Datei vorhanden ist oder nicht. Ebenso muss festgelegt werden, ob ein externes Skript angestossen werden soll oder ob man hier direkt den rsync-Befehl benutzen möchte. Hierzu muss man lediglich vor dem eigentlichen Befehl das Gatter (#) entfernen (# = auskommentiert, Kommentarzeile ohne Verarbeitung).