Inkrementelle Backups auf einem VPS mit rsync und cron
Einleitung
Backups sind für jeden VPS unverzichtbar. Sie schützen Sie vor versehentlichem Löschen, Konfigurationsfehlern, Datenbeschädigungen oder einer Kompromittierung des Servers.
In dieser Anleitung wird erläutert, wie Sie inkrementelle Backups mit folgenden Tools einrichten:
- rsync – ein effizientes Tool zum Kopieren von Dateien
- Hardlinks – um doppelte Daten in jedem Backup zu vermeiden
- cron – zur Planung automatischer Backups
Ergebnis: Jeder Snapshot entspricht einem vollständigen Backup, doch nur geänderte Dateien beanspruchen zusätzlichen Speicherplatz. Dieser Ansatz ist einfach, zuverlässig und für die meisten gängigen VPS-Konfigurationen geeignet.
So funktionieren inkrementelle Backups mit rsync
rsync bietet zwei wesentliche Funktionen:
- Synchronisierung nur geänderter Dateien
- Option
--link-dest: Erstellt Hardlinks für unveränderte Dateien, wodurch mehrere „vollständige“ Sicherungsverzeichnisse möglich sind, ohne zusätzlichen Speicherplatz zu beanspruchen.
Beispiel für eine Verzeichnisstruktur:
/backups/ daily.0/ - today's backup daily.1/ - yesterday's backup daily.2/ - backup from 2 days ago
Jeder Ordner erscheint als vollständiges Backup, doch nur die Unterschiede beanspruchen Speicherplatz.
Voraussetzungen
Auf dem VPS:
- Linux-Installation
- Zugriff als Root oder als Benutzer mit sudo
- Ausreichend Speicherplatz für Sicherungs-Snapshots
- Optional: Remote-Speicher, falls die Sicherung auf einem anderen Server erfolgt
Installieren Sie bei Bedarf rsync:
sudo apt update sudo apt install rsync
Stoppen Sie Ihre Datenbankserver oder schließen Sie deren Datenverzeichnisse von der Sicherung aus. Eine Online-Datenbanksicherung über rsync kann zu einer beschädigten Datenbanksicherung führen.
Erstellen der Sicherungsverzeichnisse
Wählen Sie einen Speicherort für die Sicherungen. In der Regel:
- Lokales Dateisystem:
/backups/ - Externe Festplatte:
/mnt/storage/backups/ - Remote-Server über SSH:
user@backup-server:/data/backups/
Beispiel (lokal):
sudo mkdir -p /backups sudo chmod 700 /backups
Einfacher rsync-Befehl für inkrementelle Backups
Nachfolgend finden Sie den wichtigsten rsync-Befehl:
rsync -a --delete \ --link-dest=/backups/daily.1 \ /source/data/ \ /backups/daily.0/
Erläuterung:
-a— Archivmodus (behält Berechtigungen, Eigentümer, Zeitstempel und Symlinks bei)--delete— auf der Quelle gelöschte Dateien entfernen--link-dest— erstellt Hardlinks zu unveränderten Dateien aus dem vorherigen Snapshot/source/data/— Verzeichnis, das gesichert werden soll/backups/daily.0/— der heutige Snapshot
Rotationsskript für tägliche Snapshots
Erstellen Sie ein Skript, um:
- vorhandene Backups zu rotieren
- Erstellen Sie eine neue inkrementelle Sicherung
- N Tage aufbewahren (Beispiel: 7)
Datei erstellen:
sudo nano /usr/local/bin/backup_daily.sh
Einfügen:
#!/bin/bash BACKUP_DIR="/backups/" SOURCE="/" EXCLUDE="/etc/backup-exclude.txt" DAYS="7" #REMOTE_USER="<YOUR_REMOTE_USER>" #REMOTE_SERVER="<YOUR_REMOTE_SERVER>" REMOTE_DIR="/backups/" # Rotate for ((i=DAYS-1; i>=0; i--)); do if [ -d "$BACKUP_DIR/daily.$i" ]; then rm -rf "$BACKUP_DIR/daily.$((i+1))" mv "$BACKUP_DIR/daily.$i" "$BACKUP_DIR/daily.$((i+1))" fi done # Prepare backup directories mkdir -p "$BACKUP_DIR/daily.0" if [ ! -d "$BACKUP_DIR/daily.1" ]; then mkdir -p "$BACKUP_DIR/daily.1" fi # Perform incremental backup rsync -a --delete \ --link-dest="$BACKUP_DIR/daily.1" \ --exclude-from="$EXCLUDE" \ "$SOURCE" "$BACKUP_DIR/daily.0" if [ -n "$REMOTE_USER" ] && [ -n "$REMOTE_SERVER" ] && [ -n "$REMOTE_DIR" ]; then rsync -azv --delete "$BACKUP_DIR" "$REMOTE_USER@$REMOTE_SERVER:$REMOTE_DIR" fi
Speichern und beenden. Als ausführbar markieren:
sudo chmod +x /usr/local/bin/backup_daily.sh
Sie können die Variablen am Anfang des Skripts ändern, um es an Ihre Bedürfnisse anzupassen. Ändern Sie beispielsweise „SOURCE“ in ein bestimmtes Verzeichnis, wenn Sie keine vollständige Sicherung des Root-Dateisystems benötigen.
Nicht benötigte Verzeichnisse ausschließen
Erstellen Sie eine Ausschlussdatei:
sudo nano /etc/backup-exclude.txt
Typische Ausschlüsse:
/proc/sys/tmp/run/dev/mnt/media/var/cache/backups
Backups mit cron planen
crontab bearbeiten:
sudo crontab -e
Hinzufügen (Sicherung täglich um 03:00 Uhr):
0 3 * * * /usr/local/bin/backup_daily.sh >/var/log/backup.log 2>&1
Dadurch werden regelmäßige automatische Snapshots sichergestellt.
Sicherung auf einem Remote-Server (optional)
Wenn Sie ein Offsite-Backup wünschen, befolgen Sie die folgenden Schritte. Erstellen Sie einen Zielordner auf dem Zielserver:
mkdir -p /backups
Stellen Sie sicher, dass die SSH-Schlüssel konfiguriert sind. Führen Sie den folgenden Befehl aus, um Ihren SSH-Schlüssel zu generieren:
ssh-keygen
Ersetzen Sie <YOUR_REMOTE_USER> durch Ihren Benutzernamen auf dem Remote-Server und <YOUR_REMOTE_SERVER> durch den Domainnamen Ihres Remote-Servers und führen Sie den folgenden Befehl aus, um Ihren SSH-Schlüssel auf den Remote-Server zu kopieren:
ssh-copy-id <YOUR_REMOTE_USER>@<YOUR_REMOTE_SERVER>
Entfernen Sie die Auskommentierung der Variablen REMOTE_USER und REMOTE_SERVER am Anfang Ihrer Datei „backup_daily.sh“, ersetzen Sie <YOUR_REMOTE_USER> durch Ihren Benutzernamen auf dem Remote-Server und <YOUR_REMOTE_SERVER> durch den Domänennamen Ihres Remote-Servers und speichern Sie „backup_daily.sh“, um die Remote-Sicherung zu aktivieren.
Sicherungen in die INTROSERV CloudBox hochladen
INTROSERV bietet Online-Speicherplatz, mit dem Sie automatisch oder manuell sichere Kopien Ihrer wichtigen Dateien und Daten auf Remote-Servern speichern können. Um diesen als Speicherort für Ihre Remote-Backups zu nutzen, melden Sie sich bei der CloudBox-Weboberfläche an und fügen Sie Ihren öffentlichen SSH-Schlüssel zu Ihrem Profil hinzu. Die Profileinstellungen finden Sie in der oberen rechten Ecke.

Fügen Sie Ihren öffentlichen SSH-Schlüssel im Abschnitt „Öffentliche Schlüssel“ ein, um Ihren Schlüssel auf den Server hochzuladen.

Entfernen Sie die Auskommentierung der Variablen REMOTE_USER und REMOTE_SERVER am Anfang Ihrer Datei „backup_daily.sh“, ersetzen Sie <YOUR_REMOTE_USER> durch Ihren Benutzernamen auf dem CloudBox-Server, <YOUR_REMOTE_SERVER> durch den Domainnamen Ihres CloudBox-Servers und speichern Sie die Datei „backup_daily.sh“, um die Fernsicherung zu aktivieren.
Testen der Backups
Bevor Sie sich auf Ihr System verlassen, testen Sie die Backups.
- Führen Sie das Skript manuell aus:
sudo /usr/local/bin/backup_daily.sh - Überprüfen Sie die Größen:
du -sh /backups/*.Es darf nur ein großes Backup vorhanden sein. - Überprüfen Sie die Dateiintegrität:
ls -l /backups/daily.0/etc/
Daten wiederherstellen
Sie können jede einzelne Datei wiederherstellen:
cp /backups/daily.2/etc/nginx/nginx.conf /etc/nginx/
Oder stellen Sie alles wieder her:
sudo rsync -a /backups/daily.0/ /
Beim Wiederherstellen von Systemverzeichnissen werden die aktuellen Dateien überschrieben.
Sicherheitshinweise
- Verwenden Sie strenge Berechtigungen für Sicherungsverzeichnisse (
chmod 700). - Wenn Sie SSH verwenden, deaktivieren Sie die Anmeldung per Passwort und verwenden Sie ausschließlich Schlüssel.
- Speichern Sie Backups nach Möglichkeit nicht auf derselben Festplatte wie den Server.
- Verschlüsseln Sie Remote-Sicherungen bei Bedarf mit LUKS oder verschlüsseltem Speicher.
Überwachung und Protokollierung
Die Protokollierung ist bereits in cron integriert: /var/log/backup.log
Überprüfen Sie regelmäßig:
tail -f /var/log/backup.log
Fazit
Die Verwendung von rsync mit cron bietet:
- Schnelle inkrementelle Backups
- Effiziente Festplattennutzung durch Hardlinks
- Einfacher Wiederherstellungsprozess
- Vollautomatische Zeitplanung
Diese Methode ist zuverlässig und auch für unerfahrene Administratoren einfach anzuwenden und funktioniert perfekt auf Linux-VPS-Umgebungen.