Inkrementelle Backups auf einem VPS mit rsync und cron
Einführung
Backups sind für jeden VPS unerlässlich. Sie schützen Sie vor versehentlichen Löschungen, Konfigurationsfehlern, Datenbeschädigungen oder Serverkompromittierungen.
Dieses Handbuch erklärt, wie man inkrementelle Backups einrichtet mit:
- rsync — effizientes Datei-Kopierwerkzeug
- Hardlinks — um doppelte Daten in jedem Backup zu vermeiden
- cron — um automatische Backups zu planen
Ergebnis: Jeder Schnappschuss sieht aus wie ein vollständiges Backup, aber nur geänderte Dateien beanspruchen zusätzlichen Speicherplatz. Dieser Ansatz ist einfach, zuverlässig und für die meisten gängigen VPS-Setups geeignet.
Wie inkrementelle Backups mit rsync funktionieren
rsync bietet zwei Hauptfunktionen:
- Synchronisation nur geänderter Dateien
--link-destOption: erstellt Hardlinks für unveränderte Dateien, sodass mehrere "vollständige" Backup-Verzeichnisse ohne zusätzlichen Speicherplatzverbrauch möglich sind.
Beispiel für die Verzeichnisstruktur:
/backups/ daily.0/ - heutiges Backup daily.1/ - gestriges Backup daily.2/ - Backup von vor 2 Tagen
Jeder Ordner erscheint als vollständiges Backup, aber nur Unterschiede beanspruchen Speicherplatz.
Voraussetzungen
Auf dem VPS:
- Linux-Installation
- Zugriff als Root oder Benutzer mit sudo
- Genügend Speicherplatz für Backup-Schnappschüsse
- Optional: Remote-Speicher, wenn auf einen anderen Server gesichert wird
Installieren Sie rsync, falls erforderlich:
sudo apt update
sudo apt install rsync
Warnung: Stoppen Sie Ihre Datenbankserver oder schließen Sie deren Datenverzeichnisse vom Backup aus. Online-Datenbank-Backup über rsync kann zu einem beschädigten Datenbank-Backup führen.
Erstellen der Backup-Verzeichnisse
Wählen Sie einen Speicherort für Backups. Üblicherweise:
- 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
Grundlegender rsync-Befehl für inkrementelle Backups
Unten ist der Schlüssel-rsync-Befehl:
rsync -a --delete \ --link-dest=/backups/daily.1 \ /source/data/ \ /backups/daily.0/
Erklärung:
-a— Archivmodus (bewahrt Berechtigungen, Besitzer, Zeitstempel, Symlinks)--delete— entfernt Dateien, die auf der Quelle gelöscht wurden--link-dest— erstellt Hardlinks zu unveränderten Dateien im vorherigen Schnappschuss/source/data/— Verzeichnis, das Sie sichern möchten/backups/daily.0/— heutiger Schnappschuss
Drehskript für tägliche Schnappschüsse
Erstellen Sie ein Skript, um:
- Bestehende Backups zu drehen
- Ein neues inkrementelles Backup zu erstellen
- N Tage zu behalten (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/" # Drehen 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 # Backup-Verzeichnisse vorbereiten mkdir -p "$BACKUP_DIR/daily.0" if [ ! -d "$BACKUP_DIR/daily.1" ]; then mkdir -p "$BACKUP_DIR/daily.1" fi # Inkrementelles Backup durchführen 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. Machen Sie es ausführbar:
sudo chmod +x /usr/local/bin/backup_daily.sh
Sie können die Variablen oben im Skript ändern, um es an Ihre Bedürfnisse anzupassen. Ändern Sie SOURCE in ein bestimmtes Verzeichnis, wenn Sie kein vollständiges Root-Dateisystem-Backup benötigen, zum Beispiel.
Unnötige 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 (Backup täglich um 03:00 Uhr):
0 3 * * * /usr/local/bin/backup_daily.sh >/var/log/backup.log 2>&1
Dies stellt regelmäßige automatische Schnappschüsse sicher.
Backup auf einen Remote-Server (optional)
Wenn Sie ein Offsite-Backup wünschen, folgen Sie den nächsten Schritten. Erstellen Sie einen Zielordner auf dem Zielserver:
mkdir -p /backups
Stellen Sie sicher, dass SSH-Schlüssel konfiguriert sind. Führen Sie den nächsten Befehl aus, um Ihren SSH-Schlüssel zu generieren:
ssh-keygen
Ersetzen Sie <YOUR_REMOTE_USER> durch Ihren Benutzernamen auf dem Remote-Server, <YOUR_REMOTE_SERVER> durch Ihren Remote-Server-Domainnamen 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>
Kommentieren Sie die Variablen REMOTE_USER, REMOTE_SERVER oben in Ihrem backup_daily.sh aus, ersetzen Sie <YOUR_REMOTE_USER> durch Ihren Benutzernamen auf dem Remote-Server, <YOUR_REMOTE_SERVER> durch Ihren Remote-Server-Domainnamen und speichern Sie backup_daily.sh, um das Remote-Backup zu aktivieren.
Backups in die INTROSERV CloudBox hochladen
INTROSERV bietet Online-Speicher, mit dem Sie automatisch oder manuell sichere Kopien Ihrer wichtigen Dateien und Daten auf Remote-Servern speichern können. Um es als Ihren Remote-Backup-Speicher zu verwenden, melden Sie sich bei der CloudBox-Weboberfläche an und fügen Sie Ihren öffentlichen SSH-Schlüssel zum Profil hinzu. Die Profileinstellungen befinden sich 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.

Kommentieren Sie die Variablen REMOTE_USER, REMOTE_SERVER oben in Ihrem backup_daily.sh aus, ersetzen Sie <YOUR_REMOTE_USER> durch Ihren Benutzernamen auf dem CloudBox-Server, <YOUR_REMOTE_SERVER> durch Ihren CloudBox-Server-Domainnamen und speichern Sie backup_daily.sh, um das Remote-Backup zu aktivieren.
Backups testen
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 sollte nur ein großes Backup geben. - Ü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 alles wiederherstellen:
sudo rsync -a /backups/daily.0/ /
Warnung: Das Wiederherstellen von Systemverzeichnissen überschreibt aktuelle Dateien.
Sicherheitsüberlegungen
- Verwenden Sie strenge Berechtigungen für Backup-Verzeichnisse (
chmod 700). - Wenn Sie SSH verwenden, deaktivieren Sie die Passwortanmeldung, verwenden Sie nur Schlüssel.
- Speichern Sie Backups nach Möglichkeit nicht auf derselben Festplatte wie der Server.
- Verschlüsseln Sie Remote-Backups mit LUKS oder verschlüsseltem Speicher, falls erforderlich.
Überwachung & Protokollierung
Protokollierung ist bereits in cron hinzugefügt: /var/log/backup.log
Regelmäßig überprüfen:
tail -f /var/log/backup.log
Fazit
Die Verwendung von rsync mit cron bietet:
- Schnelle inkrementelle Backups
- Effiziente Speichernutzung durch Hardlinks
- Einfache Wiederherstellungsprozesse
- Vollständig automatisierte Planung
Diese Methode ist zuverlässig und einfach für unerfahrene Administratoren und funktioniert perfekt auf Linux-VPS-Setups.