====== rsync ====== siehe auch: [[:admin:backup: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 ([[https://wiki.archlinux.org/index.php/Full_system_backup_with_rsync|Quelle]]) ===== Server ===== * rsync 3.0+ muss installiert sein * open[[SSH]] 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 ==== #!/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: [[https://www.samba.org/ftp/unpacked/rsync/support/rrsync|rrsync]] ("restricted rsync")