rsync
siehe auch: rsnapshot
Verzeichnisangaben
Bei Verzeichnissen kopiert rsync mit einem angehängten Slash beim Quellverzeichnis den Inhalt des Verzeichnisses und ohne erstellt es das Verzeichnis neu. Beim Zielverzeichnis ist es egal. Beispiele:
Source | Destination | Ordnerstruktur |
---|---|---|
./files/dir1/ | /backup/dir1 | /backup/dir1 |
./files/dir1 | /backup/dir1 /backup/dir1/ | /backup/dir1/dir1 |
./files/dir1/ | /backup/dir1 | /backup/dir1 |
Kommandozeilenoptionen
Switch | Beschreibung |
---|---|
-a | archive mode (kurz für -rlptgoD) |
-r, –recursive | steigt rekursiv in die angegebenen Verzeichnisse ab |
-l, –links | kopiert Symlinks als Symlinks |
-p, –perms | behält Rechte bei |
-t, –times | behält Änderungszeitpunkt bei |
-g, –group | behält Gruppeneigentum bei |
-o, –owner | behält Eigentümer bei |
-D, –devices –specials | behält Geräte- (nur su!) und Spezialdateien bei |
-n, –dry-run | Testlauf |
-b, –backup | Backups überschriebener/gelöschter Dateien anlegen |
–backup-dir=$dir | speichert Sicherungsdateien in angegebenem Ordner |
–backup-dir=$(date +%F) | Backups in ./yyyy-mm-dd/ |
–delete | sollte nur zusammen mit -b verwendet werden! löscht Dateien im Zielverzeichnis, wenn sie im Quellverzeichnis nicht vorhanden sind |
–max-size=2G | verhindert Übertragung von Dateien größer als 2GiB |
–min-size=256 | überträgt keine Dateien <256 Bytes |
-q, –quiet | unterdrückt Ausgaben (z.B. für cron) |
-z, –compress | Dateien beim Transfer komprimieren |
–progress | zeigt Einzelfortschritt an |
–info=progress2 | zeigt Gesamtfortschritt an (erst ab v3.1) |
-e "ssh -p$port" | verbindet über SSH, Beispieloption für den Port |
–filter=$datei | Filterregeln aus Datei lesen |
Filterregeln
Regeln
Zeilenbeginn | Bedeutung |
---|---|
+ | Inklusion |
- | Exklusion |
# | Kommentar (wird ignoriert) |
Muster
Muster | Bedeutung |
---|---|
/$file | Datei $file im Wurzelverzeichnis |
$dir/ | Verzeichnisse, die $dir heißen |
Beispiel
~/.rsync-exclude
# Filterdatei selbst ausschließen - /rsync-filter.txt # Download-Ordner im Wurzelverzeichnis ausschließen - /Downloads/ # Papierkorb nicht mitsichern - /.Trash*/ # Thumbnails nicht mitsichern - .DS_Store - Thumbs.db # Cache-Ordner **TODO** # "geheime" Dotfiles ausschließen - /.*sh_history # Druckerspooler nicht sichern - /.cups/ # keine Cloud-Ordner sichern - /.dropbox/ - /.dropbox-master/ - /Google\ Drive/ - /Dropbox/
Tiefe der Synchronisation begrenzen
Synchronisiert nur bis zu einer Tiefe von 2 Ordnern und nicht weiter:
rsync -r --exclude="/*/*/" source/ target/
Je nach gewünschter Tiefe das "exclude" erweitern.
Nur bestimmte Dateien synchronisieren
rsync -mnrv --include="*/" --include="file_11*.jpg" --exclude="*" /Storage/uploads/ /website/uploads/
-m | löscht leere Ordner |
–include="*/" | Geht durch alle Ordner |
–exclude="*" | ignoriert alle Dateien, die nicht inkludiert wurden |
Client
Ein funktionierendes passwortloses SSH-Setup ist von Vorteil.
Mac
Systemvoraussetzungen
- rsync 3.0+ muss installiert sein (kein Abgleich von Dateilisten mehr)
Backup des Benutzerverzeichnisses
/usr/local/bin/rsync -az --progress -e "ssh -pPORT" /Users/BENUTZER/ BENUTZER@SERVER:/backup/BENUTZER/
Wichtig: Slash am Ende des Quell- und Zielverzeichnisses! Kopiert alle Inhalte (Dateien und Unterordner) im Benutzer-Heimatverzeichnis in den Backup-Ordner des Benutzers. Kein Slash = Kopiert das Verzeichnis an sich.
volles System-Backup
rsync -aAXv --exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*","/media/*","/lost+found"} /* /path/to/backup/folder
(Quelle)
Server
- rsync 3.0+ muss installiert sein
- openSSH muss installiert sein
- es ist nicht empfehlenswert, rsync im Server-Modus laufen zu lassen. Über SSH verliert man nur extrem wenig Geschwindigkeit, aber es ist viel sicherer.
SSH-Nutzern nur Rsync erlauben
- /usr/local/bin/validated-rsync
#!/bin/sh case "$SSH_ORIGINAL_COMMAND" in *\&*) echo "Rejected" ;; *\(*) echo "Rejected" ;; *\{*) echo "Rejected" ;; *\;*) echo "Rejected" ;; *\<*) echo "Rejected" ;; *\>*) echo "Rejected" ;; *\`*) echo "Rejected" ;; *\|*) echo "Rejected" ;; rsync\ --server*) $SSH_ORIGINAL_COMMAND ;; *) echo "Rejected" ;; esac
Alternative: rrsync ("restricted rsync")