====== 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")