Inkrementelle Backups auf einem VPS mit rsync und cron | INTROSERV
EUR
european

EUR

usa

USD

German De
Ex. VAT Ex. VAT 0%

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:

  1. Synchronisierung nur geänderter Dateien
  2. 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

Warning

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:

  1. vorhandene Backups zu rotieren
  2. Erstellen Sie eine neue inkrementelle Sicherung
  3. 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.

CloudBox profile settings

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

CloudBox public SSH key section

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.

  1. Führen Sie das Skript manuell aus: sudo /usr/local/bin/backup_daily.sh
  2. Überprüfen Sie die Größen: du -sh /backups/*. Es darf nur ein großes Backup vorhanden sein.
  3. Ü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/ /

Warning

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.

VAT

  • Other

    Ex. VAT

    0%
  • austria

    Austria

    20%
  • Belgium

    Belgium

    21%
  • Bulgaria

    Bulgaria

    20%
  • Croatia

    Croatia

    25%
  • Cyprus

    Cyprus

    19%
  • Czech Republic

    Czech Republic

    21%
  • Denmark

    Denmark

    25%
  • Estonia

    Estonia

    22%
  • France

    France

    20%
  • Finland

    Finland

    24%
  • Germany

    Germany

    19%
  • Greece

    Greece

    24%
  • Hungary

    Hungary

    27%
  • Ireland

    Ireland

    23%
  • Italy

    Italy

    22%
  • Latvia

    Latvia

    21%
  • Lithuania

    Lithuania

    21%
  • Luxembourg

    Luxembourg

    17%
  • Malta

    Malta

    18%
  • Netherlands

    Netherlands

    21%
  • Poland

    Poland

    23%
  • Portugal

    Portugal

    23%
  • Romania

    Romania

    19%
  • Slovakia

    Slovakia

    20%
  • Slovenia

    Slovenia

    22%
  • Spain

    Spain

    21%
  • Sweden

    Sweden

    25%
  • USA

    USA

    0%
european
states
  • germany
  • Español
  • Italiano
  • Poland
  • Русский
  • Slovenski
  • Türkçe
  • ukraine
  • kingdom
  • French
  • Hrvatska
  • Other
  • Austria
  • Belgium
  • Bulgaria
  • Croatia
  • Cyprus
  • Czech Republic
  • Denmark
  • Estonia
  • Finland
  • France
  • Germany
  • Greece
  • Hungary
  • Ireland
  • Italy
  • Latvia
  • Lithuania
  • Luxembourg
  • Malta
  • Netherlands
  • Poland
  • Portugal
  • Romania
  • Slovakia
  • Slovenia
  • Spain
  • Sweden
  • USA