
Wenn Sie Linux-Server verwalten oder einfach einen Computer mit Daten besitzen, deren Verlust Sie sich nicht leisten können, sollten Sie lernen, mit Linux zu arbeiten. rsync zur Automatisierung von Backups Es ist praktisch unerlässlich. Sie brauchen keine teure Software-Suite einzurichten oder auf proprietäre Tools angewiesen zu sein: Mit wenigen, gut durchdachten Befehlen erhalten Sie ein solides, effizientes und wartungsarmes Backup-System.
In diesem Leitfaden werden Sie Folgendes sehen Von den Grundlagen von rsync bis hin zu fortgeschrittenen BearbeitungsmethodenLokale Backups, Remote-Backups via SSH, Time Machine-ähnliche Backups mit Snapshots, produktionsreife Skripte, Cronjobs, Systemd-Timer, Ausschlüsse, Rotationen und Verifizierung. Siehe unsere Vergleich der Backup-Methoden Um eine Strategie zu entwickeln. Die Idee ist, dass Sie den Artikel mit einem klaren Plan und Anweisungen abschließen, die Sie praktisch kopieren und an Ihre Umgebung anpassen können.
Was ist rsync und warum wird es so häufig für Backups verwendet?
Rsync ist ein Kommandozeilen-Tool, das für Dateien und Verzeichnisse zwischen zwei Standorten synchronisieren, entweder auf demselben Computer oder zwischen verschiedenen Rechnern, üblicherweise über SSH oder mit einem eigenen rsyncd-Daemon.
Der Vorteil von rsync gegenüber einem einfachen cp oder scp besteht darin, dass es einen intelligenten Algorithmus implementiert. Differenzielle BlockübertragungEs vergleicht Quelle und Ziel und sendet nur die Änderungen, nicht jedes Mal die gesamte Datei. Bei großen Datenmengen, in denen nur kleine Teile geändert werden, sind die Zeit- und Bandbreiteneinsparungen enorm.
Darüber hinaus kann rsync Nahezu alle Metadaten bleiben erhalten.Berechtigungen, Eigentümer, Gruppen, Zeitstempel, symbolische Links, Geräte… Deshalb ist es so nützlich für „ernsthafte“ Backups, bei denen nicht nur der Inhalt, sondern auch die Einrichtung des Dateisystems von Bedeutung ist.
Ein weiterer wichtiger Vorteil ist, dass rsync funktioniert sowohl lokal als auch aus der FerneSie können es verwenden, um zwei Ordner auf demselben Server zu synchronisieren, Daten von einem Remote-Server auf Ihren Backup-Rechner zu übertragen oder Daten per SSH an ein entferntes NAS oder VPS zu senden.

rsync auf verschiedenen Distributionen installieren und testen
Obwohl bei vielen Distributionen rsync bereits vorinstalliert ist, ist es eine gute Idee. Überprüfen Sie die Installation und aktualisieren Sie auf eine aktuelle Version. sowohl auf dem Quell- als auch auf dem Zielrechner, bevor Sie Ihre automatischen Backups einbinden.
Auf Debian- oder Ubuntu-basierten Systemen können Sie beispielsweise Folgendes tun:
rsync --version
sudo apt update
sudo apt install rsync
Bei Distributionen wie RHEL, CentOS, Rocky Linux oder anderen Derivaten wäre die Vorgehensweise sehr ähnlich; man müsste lediglich den Paketmanager ändern, aber das Grundprinzip bliebe gleich. Stellen Sie sicher, dass rsync verfügbar und auf dem neuesten Stand ist. in beiden Extremen.
rsync --version
sudo dnf install rsync # En sistemas modernos
sudo yum install rsync # En sistemas más antiguos
Grundlegende rsync-Optionen, die Sie ständig verwenden werden
Obwohl rsync über eine gute Auswahl an Parametern verfügt, werden Sie in der Praxis bei Backups 90 % Ihrer Zeit mit der Verwendung von ... verbringen. eine kleine Auswahl an Optionen Das sollte man auswendig lernen.
Die Gesamtstruktur des Befehls ist recht einfach, aber es gibt ein Detail, das viele Möglichkeiten eröffnet: Der abschließende Schrägstrich in den Pfaden verändert das Verhalten.
Generische Syntax:
rsync ORIGEN DESTINO
Der entscheidende Unterschied liegt in der Behandlung des Quellverzeichnisses:
# Copia el directorio como tal dentro del destino
rsync -av /source/dir /backup/
# Kopiere NUR den Inhalt des Verzeichnisses in das Zielverzeichnis
rsync -av /source/dir/ /backup/
Einige der am häufigsten verwendeten Backup-Optionen sind besonders praktisch, weil Sie vereinen viele Dinge in einem kurzen Text.:
- -a: Dateimodus. Entspricht -rlptgoD (rekursiv, erhält symbolische Links, Berechtigungen, Zeitstempel, Gruppe, Eigentümer und spezielle Dateien).
- -v: „Ausführlicher“ Modus. Zeigt an, was das Programm gerade tut und auf welche Dateien es zugreift.
- -zKomprimiert Daten während der Übertragung, ideal für Remote-Kopien über das Internet.
- -h: lässt Größenangaben "schön" aussehen (MB, GB…), perfekt für Menschen.
- -P: kombiniert Fortschritts- und Teildateien, um den aktuellen Stand zu überprüfen und gegebenenfalls fortsetzen zu können.
- -Löschen: Löscht am Zielort die Dateien, die am Quellort nicht mehr vorhanden sind, und hinterlässt eine exakte Kopie.
- -n / –Trockenlauf: Simuliert die Ausführung, ohne irgendetwas zu berühren, fantastisch, um nichts durcheinanderzubringen.
- –ausschließen / –ausschließen-von: ermöglicht es Ihnen, Muster oder eine vollständige Liste von Routen auszuschließen, die Sie nicht kopieren möchten.
- –link-dest: Erstellt Hardlinks zu einer vorherigen Kopie, die Grundlage für inkrementelle Backups vom Typ Time Machine.
Manuelle lokale Kopien und erste Beispiele
Der erste Schritt vor der Automatisierung jeglicher Vorgänge besteht darin, … klare und bewährte manuelle KopierbefehleLassen Sie uns typische Anwendungsfälle betrachten, die wir später in Skripten verwenden werden.
Wenn Sie Ihr Home-Verzeichnis klonen möchten auf ein lokale SicherungsfestplatteDer minimale Befehl sähe folgendermaßen aus:
rsync -av /home/usuario/ /mnt/disco_backup/usuario/
Dieser rsync-Befehl scannt Ihren Die Startseite wurde vollständig aktualisiert, wobei Berechtigungen, Datumsangaben und Struktur beibehalten wurden.und kopiert nur das, was fehlt oder sich seit dem letzten Mal geändert hat, was bereits eine sehr saubere inkrementelle Kopie darstellt, ohne die Sache zu verkomplizieren.
Ein weiteres klassisches Beispiel ist die Synchronisation. Projektdaten, Fotos oder Dokumente zwischen zwei Ordnern auf demselben Server oder sogar auf verschiedenen Festplatten, um ein zweites lokales Spiel immer frisch zu haben.
rsync -av /media/fotos/ /backup/fotos/
Wenn es um sensible Systemdaten geht, wie zum Beispiel /etc oder /var/wwwEs ist verständlich, eine exakte Kopie zu wünschen, bei der alles, was im Original fehlt, aus der Sicherung entfernt wird. Hier kommt die bekannte Löschoption ins Spiel.
rsync -av --delete /var/www/ /backup/www/
Sichere Remote-Backups mit SSH
Seine wahre Stärke zeigt rsync erst, wenn man es mit folgenden kombiniert: SSH zum Senden von Kopien vom ServerSo können Sie Ihre Daten auf einem anderen Knoten in Ihrem Netzwerk, einem NAS oder einem VPS im Internet speichern. Dadurch sind Sie nicht von einem einzelnen Gerät abhängig und erfüllen einen Teil der bekannten 3-2-1-Regel (mindestens eine externe Kopie).
Idealerweise sollten Sie die Authentifizierung mit öffentlichem Schlüssel konfigurieren, anstatt Passwörter ständig manuell einzugeben. Sobald Sie den Schlüssel auf den Backup-Server kopiert haben, sind die Befehle sehr intuitiv.
# Empujar datos locales a un servidor remoto de backup
rsync -avz /etc/ backup@servidor-remoto:/backups/etc/
# Daten von einem Remote-Server auf Ihren Backup-Rechner übertragen
rsync -avz backup@remote-server:/var/www/ /backups/www/
In etwas differenzierteren Szenarien können Sie anpassen SSH-Verschlüsselung, Port oder Komprimierung von rsync selbst mit -e, zum Beispiel wenn Ihr Server auf einem anderen Port lauscht oder Sie eine langsame Verbindung optimieren möchten.
rsync -avz \
-e "ssh -p 2222 -c -o Compression=no" \
/origen/ backup@servidor-remoto:/destino/
Ein nützlicher Trick bei schwachen Verbindungen oder gemeinsam genutzten Netzwerken ist die Verwendung von –bwlimit, um eine Überlastung der Verbindung zu vermeiden und dass niemand ohne Internetverbindung bleibt, während Sie eine umfangreiche Datensicherung durchführen.
rsync -avz --bwlimit=5000 /datos/ backup@servidor-remoto:/backups/datos/
Vollständige, differenzielle und inkrementelle Backups mit rsync
Obwohl rsync bereits differentielle Übertragungen auf Blockebene durchführt, ist es aus Sicht einer Backup-Strategie sinnvoll, Folgendes zu erwägen: drei Arten von Kopien: vollständige, differentielle und inkrementelle Kopienwas Sie direkt mit rsync-Optionen implementieren können.
Eine vollständige Kopie ist unkompliziert: Sie erstellt den gesamten Inhalt der Quelle am Zielort neu, ideal als erste Datensicherung oder um eine saubere Referenz zu haben.
# Copia completa de un árbol de directorios
rsync -a /ruta/origen/ /ruta/destino/
Differenzielles Kopieren baut auf dieser Grundlage auf und konzentriert sich darauf, das Ziel mit der Quelle in Einklang zu bringen, Änderungen zu kopieren und nicht mehr vorhandene Elemente zu entfernen. Das ist im Allgemeinen gemeint, wenn man von … spricht. ein Spiegelbild des Systems haben.
# Copia diferencial, manteniendo el destino idéntico al origen
rsync -a --delete /ruta/origen/ /ruta/destino/
Der spannendste Teil ist die „echte“ inkrementelle Datensicherung, bei der zusätzlich zur Synchronisierung Sie speichern Verläufe nach Datum, ohne Daten zu duplizieren.Hier kommt die Option –link-dest ins Spiel, die für Dateien, die sich nicht geändert haben, Hardlinks zu einer früheren Kopie erstellt.
# Copia incremental apoyada en una copia previa
rsync -a --link-dest=/ruta/a/copiaprevia \
/ruta/origen/ /ruta/destino-incremental/
Bei dieser Vorgehensweise erscheint jeder Sicherungsordner als vollständige Kopie, ist aber intern Identische Dateien teilen sich Blöcke auf der Festplatte.Dadurch wird der Platzbedarf erheblich reduziert und eine einfache Navigation durch historische Momentaufnahmen ermöglicht.
Time Machine-ähnliche Backups mit Snapshots und Hardlinks
Viele Menschen möchten den Komfort von macOS Time Machine mit seinen Snapshots nach DatumMit rsync ist das problemlos möglich, indem man --link-dest, ein wenig Shell-Code und etwas Organisation kombiniert.
Die Idee besteht darin, ein aktuelles Verzeichnis zu pflegen, das auf die letzte funktionierende Sicherung verweist, und gleichzeitig ein neues Verzeichnis zu erstellen. Ordner mit Zeitstempel (Datum-Uhrzeit) Diese repräsentieren jeweils einen Snapshot. Unveränderte Dateien werden über Hardlinks mit dem vorherigen Snapshot verknüpft, und neue Blöcke werden nur dann geschrieben, wenn tatsächliche Unterschiede vorliegen.
Ein typischer Befehl in diesem Schema könnte etwa so aussehen:
rsync -avPh --delete \
--link-dest="$TARGETDIR/current" \
"$SOURCEDIR/$USER/" \
"$TARGETDIR/$USER-$TIMESTAMP"
Anschließend kümmert sich ein Skript um die Aktualisierung des symbolischen Links. aktuell, sodass es immer auf den neuesten Snapshot verweist.und um eine kleine, nach Datum geordnete Historie zu führen. Damit können Sie ältere Ausgaben durchsuchen, indem Sie einfach den gewünschten Ordner öffnen.
Die Automatisierung erfolgt ganz natürlich: Man speichert das Skript beispielsweise in einem Ordner wie /usr/local/bin/rsync-timemachine und planen Sie es so ein, dass es täglich mit cron zu der für Sie passenden Zeit ausgeführt wird.
0 5 * * * bash /usr/local/bin/rsync-time-machine
Automatisieren Sie die Datensicherung täglich mit Cron.
Irgendwann macht das manuelle Kopieren keinen Sinn mehr; die übliche Vorgehensweise ist Planen Sie Backups mit Cron. sodass sie automatisch außerhalb der Spitzenzeiten (zum Beispiel am frühen Morgen) laufen und Sie sich nur noch gelegentlich um die Protokolle kümmern müssen.
Der Vorgang ist immer derselbe: Man erstellt ein Skript, das eine vollständige Kopie mit allen Optionen (Ausschlüsse, Protokolle usw.) erstellt, erteilt ihm Ausführungsrechte und fügt es in die Crontab des entsprechenden Benutzers oder, falls es darum geht, das gesamte System zu bearbeiten, in die Crontab des Root-Benutzers ein.
Ein Beispiel für ein einfaches Skript zum lokalen Kopieren könnte so aussehen:
#!/bin/bash
SOURCE_DIR="/home"
BACKUP_DIR="/backup/home"
LOG_FILE="/var/log/backup/rsync-local.log"
DATE=$(date +"%Y-%m-%d %H:%M:%S")
mkdir -p «$BACKUP_DIR» «$(dirname «$LOG_FILE»)»
echo "Lokale Sicherung gestartet" >> "$LOG_FILE"
rsync -av –delete
–exclude='*.tmp' \
–exclude='.cache' \
–exclude='Downloads/*' \
«$SOURCE_DIR/» «$BACKUP_DIR/» >> «$LOG_FILE» 2>&1
Wenn ; dann
echo » Sicherung erfolgreich abgeschlossen» >> «$LOG_FILE»
sonst
echo » Backup mit Fehlern» >> «$LOG_FILE»
fi
Sobald Sie das Skript beispielsweise eingefügt haben, /usr/local/bin/rsync-local-backup.sh Und wenn Sie es als ausführbar markieren, fügen Sie es zu Cron hinzu, damit es zu einem bestimmten Zeitpunkt ausgeführt wird.
sudo chmod +x /usr/local/bin/rsync-local-backup.sh
sudo crontab -e
In der Crontab-Datei könnten Sie beispielsweise Folgendes einfügen:
0 2 * * * /usr/local/bin/rsync-local-backup.sh
systemd-Timer: eine moderne Alternative zu Cron
In modernen Systemen lohnt es sich oft Verwenden Sie systemd-Timer anstelle von cron.insbesondere wenn Sie Dienste besser integrieren, Netzwerkabhängigkeiten verwalten oder zentralisierte Protokolle in journalctl haben möchten.
Die Idee besteht darin, einen Dienst zu definieren, der Ihr Backup-Skript ausführt, sowie einen Timer, der angibt, wann es ausgeführt werden soll. Der Dienst könnte beispielsweise so aussehen:
Description=Rsync Backup Service
After=network-online.target
Wants=network-online.target
Typ=Oneshot
ExecStart=/usr/local/bin/rsync-remote-backup.sh
Benutzer=root
StandardOutput=journal
StandardError=journal
TimeoutSec=7200
WantedBy = multiuser.target
Und der zugehörige Timer würde wie folgt definiert werden, für einen Tägliche Datensicherung um 2 Uhr morgens mit einer gewissen Zufälligkeit, um nicht alles auf einmal zu überfordern:
Description=Daily Rsync Backup Timer
Requires=rsync-backup.service
OnCalendar=*-*-* 02:00:00
Persistent=true
RandomizedDelaySec=10min
WantedBy=timers.target
Damit bleibt nur noch, systemd neu zu laden, den Timer zu aktivieren und zu überprüfen, ob er korrekt programmiert wird und dass Das Dienstprotokoll zeigt, dass die Kopien zum richtigen Zeitpunkt gestartet werden..
sudo systemctl daemon-reload
sudo systemctl enable --now rsync-backup.timer
systemctl list-timers
journalctl -u rsync-backup.service
Organisieren Sie regelmäßige Backups: täglich, wöchentlich und monatlich.
Wenn Sie etwas Komplexeres als eine einzelne statische Kopie wünschen, können Sie eine Struktur einrichten, Rotierende Backups: täglich, wöchentlich und monatlichDurch die Verwendung von Hardlinks lässt sich Speicherplatz sparen, und mit Find kann man alte Dateien aufräumen.
Ein klassisches Vorgehen besteht darin, ein aktuelles Verzeichnis zu haben, das jedes Mal mit rsync aktualisiert wird, und dann diesen Verzeichnisbaum mit Hardlinks in tägliche, wöchentliche und monatliche Ordner zu klonen, je nach Tag.
#!/bin/bash
SOURCE_DIR="/var/www"
BACKUP_ROOT="/backup/www"
CURRENT="$BACKUP_ROOT/current"
DAILY="$BACKUP_ROOT/daily"
WEEKLY="$BACKUP_ROOT/weekly"
MONTHLY="$BACKUP_ROOT/monthly"
DATE=$(date +%Y%m%d)
DOW=$(date +%u)
DOM=$(date +%d)
mkdir -p «$CURRENT» «$DAILY» «$WEEKLY» «$MONTHLY»
rsync -av –delete –link-dest=»$CURRENT» \
«$SOURCE_DIR/» «$CURRENT/»
&& cp -al «$CURRENT» «$DAILY/$DATE»
&& cp -al «$CURRENT» «$WEEKLY/$DATE»
&& cp -al «$CURRENT» «$MONTHLY/$DATE»
find «$DAILY» -maxdepth 1 -type d -mtime +7 -exec rm -rf {} \;
find «$WEEKLY» -maxdepth 1 -type d -mtime +28 -exec rm -rf {} \;
find «$MONTHLY» -maxdepth 1 -type d -mtime +365 -exec rm -rf {} \;
Mit diesem System haben Sie ein recht vernünftiges historisches Fenster ohne die Festplatte mit vollständigen Kopien zu füllen, und jeder Snapshot bleibt wie ein normaler Ordner navigierbar.
Wenn sich Ihre Daten schnell ändern oder sehr umfangreich sind, können Sie Aufbewahrungsfristen und -häufigkeiten anpassen oder dies sogar mit LVM- oder ZFS-Snapshots kombinieren, um die Konsistenz von Datenbanken oder virtuellen Maschinen zu gewährleisten.
Überwachen, überprüfen und feststellen, ob Ihre Backups nützlich sind.
Es ist toll, wenn Backup-Aufgaben täglich ausgeführt werden, aber wenn niemand das Ergebnis überprüft Das wird Ihnen nicht viel helfen. Es ist wichtig, eine grundlegende Überwachung einzurichten, um zu wissen, ob und wann die letzte Datensicherung erstellt wurde.
Eine einfache Methode ist, nach jedem erfolgreichen Backup eine kleine Markierung im Zielordner zu hinterlassen, beispielsweise eine Datei namens „.last-backup-success“ mit dem Datum. Ein externes Skript oder auch eine Nagios/Icinga-Prüfung kann Sie dann benachrichtigen, falls diese Datei zu alt ist.
MARKER="/backup/www/.last-backup-success"
if ; then
echo "Marcador de backup no encontrado"
exit 1
fi
Eine weitere gesunde Gewohnheit ist es, zu überprüfen, ob Überprüfen Sie die rsync-Protokolle auf Fehler oder ungewöhnliche Übertragungsraten.Ein Skript, das Statistiken wie „Anzahl der Dateien“, „Gesamtgröße“, „Beschleunigung“ und dergleichen extrahiert, gibt Ihnen einen schnellen Überblick über den aktuellen Stand.
Und natürlich macht es letztendlich den Unterschied, sich hin und wieder daran zu gewöhnen. um eine echte Restaurierung durchzuführenNehmen Sie eine bestimmte Datei, stellen Sie eine Version von gestern oder letzter Woche wieder her und prüfen Sie, ob sie sich korrekt öffnen lässt. Nur so können Sie sicher sein, dass Ihre Backups im Notfall greifen.
Wenn Sie all diese Komponenten – ein gut konfiguriertes rsync, Automatisierung mit cron oder systemd, sinnvolle Datenrotation, Überwachung und Wiederherstellungstests – zusammenführen, erhalten Sie am Ende Folgendes: ein robustes, flexibles und kostengünstiges Linux-Backup-System, das die Vorteile kostenloser Software voll ausschöpft, ohne dass Sie auf Komfort oder Zuverlässigkeit verzichten müssen.
