RSnapshot: Die clevere Backup-Lösung für Linux-Systeme

RSnapshot ist ein leistungsstarkes und platzsparendes Backup-Tool für Linux-Systeme, das auf bewährten Unix-Tools basiert und dabei eine elegante Lösung für inkrementelle Backups bietet.

Was ist RSnapshot und wie funktioniert es?

RSnapshot kombiniert die Stärken mehrerer Unix-Tools zu einer effizienten Backup-Strategie:

  • RSYNC für den eigentlichen Datentransfer und Synchronisation
  • Hardlinks (cp -al) für platzsparende inkrementelle Backups – mehrere Dateinamen zeigen auf dieselbe physische Datei im Dateisystem
  • Inkrementelle Backups die nur geänderte Dateien übertragen, aber vollständige Snapshot-Verzeichnisse erstellen

Das Geniale an RSnapshot: Obwohl jeder Snapshot wie ein vollständiges Backup aussieht, werden unveränderte Dateien durch Hardlinks referenziert. Ein Hardlink ist dabei ein zusätzlicher Dateiname der auf dieselben Datenblöcke im Dateisystem zeigt – die Datei existiert physisch nur einmal, kann aber unter verschiedenen Namen und Pfaden erreicht werden. Erst wenn eine Datei tatsächlich geändert wird, erstellt RSnapshot eine echte Kopie, während alle anderen „Kopien“ weiterhin als Hardlinks auf die ursprünglichen Daten zeigen. Dadurch benötigt ein neuer Snapshot nur den Speicherplatz der tatsächlich geänderten Dateien.

Installation

Die Installation unter Debian/Ubuntu ist denkbar einfach:

bash

sudo apt-get update
sudo apt-get install rsnapshot

Das Hauptkonfigurationsfile befindet sich unter /etc/rsnapshot.conf. Für mehrere Backup-Jobs können separate Konfigurationsdateien erstellt werden (z.B. /etc/rsnapshot-nextcloud.conf).

Konfiguration

Grundkonfiguration

Hier die wichtigsten Konfigurationsparameter:

bash

# Basis-Verzeichnis für alle Snapshots
snapshot_root   /mnt/backup/snapshots/

# WICHTIG: Verhindert Backup-Erstellung wenn Ziel nicht gemountet
no_create_root  1

# Aufbewahrungsrichtlinien - wie lange werden Snapshots aufbewahrt?
retain  daily   365    # 365 tägliche Backups (ca. 1 Jahr)
#retain weekly  52     # 52 wöchentliche Backups (1 Jahr)
#retain monthly 12     # 12 monatliche Backups (1 Jahr)

# Logging und Verbosity
verbose         2
loglevel        5
logfile         /var/log/rsnapshot.log

# Wiederholung bei SSH-Verbindungsproblemen
rsync_numtries  100

Wichtiger Hinweis zu no_create_root: Diese Option ist essentiell! Ohne sie würde RSnapshot bei nicht-gemounteten Backup-Zielen im lokalen Verzeichnis Backups erstellen – ein häufiger und gefährlicher Fallstrick.

Passwortlose SSH-Authentifizierung für Remote-Backups einrichten

Bevor wir ein automatisiertes Remote-Backup aufsetzen, müssen wir dafür sorgen, dass sich der Backup-Server ohne Passwortabfrage mit dem Zielserver verbinden kann. Dafür richten wir eine passwortlose SSH-Authentifizierung ein.

1. SSH-Konfigurationsdatei anlegen

In der Datei ~/.ssh/config können wir eigene Verbindungsprofile definieren. Das macht den Umgang mit SSH deutlich einfacher, da wir uns nicht jedes Mal IP-Adresse, Port oder Benutzer merken müssen.

Ein Beispiel:

Host phils-pve
    HostName 192.168.1.100
    User backup-user
    Port 22
    IdentityFile ~/.ssh/backup_rsa

🔍 Was bedeutet das?

  • Host phils-pve
    Das ist ein Alias, den wir uns frei aussuchen. Statt jedes Mal die IP-Adresse einzugeben, reicht später ssh phils-pve.
  • HostName 192.168.1.100
    Die tatsächliche IP-Adresse oder Domain des Zielservers.
  • User backup-user
    Der Benutzer, mit dem wir uns am Zielserver anmelden.
  • Port 22
    Standardport für SSH (kann angepasst werden, falls der Server auf einem anderen Port lauscht).
  • IdentityFile ~/.ssh/backup_rsa
    Hier geben wir an, welcher SSH-Schlüssel für die Anmeldung genutzt wird.

2. SSH-Key auf den Zielserver kopieren

Damit wir uns ohne Passwort anmelden können, müssen wir unseren öffentlichen Schlüssel auf den Zielserver übertragen. Das geht mit einem einzigen Befehl:

ssh-copy-id -i ~/.ssh/backup_rsa backup-user@192.168.1.100

Dieser Befehl macht Folgendes:

  1. Nimmt den öffentlichen Schlüssel (~/.ssh/backup_rsa.pub).
  2. Meldet sich beim Zielserver (hier: phils-pve (backup-user@192.168.1.100) an.
  3. Wir können hier noch nicht einfach phils-pve nehmen weil der Key für die Authentifizierung noch nicht am Remote-System vorhanden ist -> daher backup-user@192.168.1.100
  4. Fügt den Schlüssel in die Datei ~/.ssh/authorized_keys des Benutzers backup-user ein.

Ab jetzt reicht ein einfaches:

ssh phils-pve

– und die Verbindung wird ohne Passwort aufgebaut, da die Authentifizierung über den privaten Schlüssel auf der Quellmaschine funktioniert.

3. Warum ist das wichtig für Backups?

Automatisierte Backups laufen meist über Cronjobs oder Backup-Skripte. Würde jedes Mal ein Passwort verlangt werden, wäre das unpraktisch oder gar nicht umsetzbar. Mit der Schlüssel-basierten Authentifizierung sorgen wir dafür, dass die Verbindung sicher und ohne Benutzereingriff aufgebaut wird.

Aufbewahrungsrichtlinien verstehen

Die retain-Direktiven definieren, wie viele Snapshots jeder Kategorie aufbewahrt werden:

bash

retain  daily   365    # Hält 365 tägliche Snapshots (daily.0 bis daily.364)
retain  weekly  52     # Hält 52 wöchentliche Snapshots (weekly.0 bis weekly.51)  
retain  monthly 12     # Hält 12 monatliche Snapshots (monthly.0 bis monthly.11)

Wichtiges Verhalten:

  • Jede Ebene „rotiert“ automatisch – das älteste Backup wird gelöscht wenn die maximale Anzahl erreicht wird
  • Higher-Level Snapshots (weekly, monthly) werden aus lower-level Snapshots (daily) erstellt
  • Du musst für jede Ebene einen separaten Crontab-Eintrag erstellen

Beispiel einer mehrstufigen Strategie:

  • Täglich: Letzte 30 Tage für schnelle Wiederherstellung
  • Wöchentlich: Letzte 12 Wochen für mittelfristige Historie
  • Monatlich: Letzte 12 Monate für Langzeitarchivierung

bash

# Remote-Backup (SSH-Host aus ~/.ssh/config)
backup  phils-pve:/etc/                    ./pve/

# Lokales Backup
backup  /mnt/nextcloud-backup/next-config/  ./nextcloud/

Wichtig: Die Zielpfade (z.B. ./pve/, ./nextcloud/) sind relativ zum snapshot_root. Das bedeutet, die Backups landen in /mnt/backup/snapshots/pve/ bzw. /mnt/backup/snapshots/nextcloud/.

Crontab-Automation

Automatische Backups werden über Crontab eingerichtet:

bash

# Täglich um 2:00 Uhr
0 2 * * * /usr/bin/rsnapshot -c /etc/rsnapshot-nextcloud.conf daily

# Wöchentlich sonntags um 1:00 Uhr
0 1 * * 0 /usr/bin/rsnapshot -c /etc/rsnapshot-nextcloud.conf weekly

Tipp: Falls die Crontab-Syntax verwirrend ist, hilft crontab.guru beim Verstehen der Zeitangaben.

Backup-Struktur verstehen

RSnapshot erstellt eine klare, chronologische Verzeichnisstruktur:

bash

root@nextbkp:/mnt/rsnapshot-test# ls -la
total 24
drwxr-xr-x 15 root root 15 Jan 25  2025 .
drwxr-xr-x  9 root root  9 Aug  4 22:08 ..
drwxr-xr-x  3 root root  3 Jan 25  2025 daily.0
drwxr-xr-x  3 root root  3 Jan 24  2025 daily.1
drwxr-xr-x  3 root root  3 Jan 15  2025 daily.10
drwxr-xr-x  3 root root  3 Jan 14  2025 daily.11
drwxr-xr-x  3 root root  3 Jan 23  2025 daily.2
drwxr-xr-x  3 root root  3 Jan 22  2025 daily.3
drwxr-xr-x  3 root root  3 Jan 21  2025 daily.4
drwxr-xr-x  3 root root  3 Jan 20  2025 daily.5
drwxr-xr-x  3 root root  3 Jan 19  2025 daily.6
drwxr-xr-x  3 root root  3 Jan 18  2025 daily.7
drwxr-xr-x  3 root root  3 Jan 17  2025 daily.8
drwxr-xr-x  3 root root  3 Jan 16  2025 daily.9
drwxr-xr-x  3 root root  3 Jan 12  2025 weekly.0

Wichtige Regel: daily.0 ist immer das neueste Backup. Bei jedem neuen Backup wird die Nummerierung rotiert (daily.0 → daily.1 → daily.2, usw.).

Konfiguration testen

Vor dem produktiven Einsatz sollte die Konfiguration getestet werden:

bash

# Konfiguration auf Syntax-Fehler prüfen
rsnapshot configtest

# Testlauf ohne tatsächliches Backup (Dry-run)
rsnapshot -t daily

# Mit spezifischer Konfigurationsdatei
rsnapshot -t daily -c /etc/rsnapshot-nextcloud.conf

Der -t Parameter zeigt genau an, welche Befehle ausgeführt würden, ohne sie tatsächlich auszuführen – ideal zum Debuggen und Verifizieren.

Fazit

RSnapshot bietet eine elegante Lösung für das Backup-Problem: Es kombiniert die Einfachheit und Zuverlässigkeit bewährter Unix-Tools mit moderner Effizienz. Durch die Nutzung von Hardlinks entstehen scheinbar vollständige Backups, die aber nur minimal zusätzlichen Speicherplatz benötigen. Die klare Verzeichnisstruktur und die flexible Konfiguration machen RSnapshot zu einem idealen Tool sowohl für kleine Heimserver als auch für größere Infrastrukturen.

Mit der richtigen Konfiguration und regelmäßigen Tests ist RSnapshot ein zuverlässiger Partner für eine solide Backup-Strategie.