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

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:

  1. Synchronisation nur geänderter Dateien
  2. --link-dest Option: 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

Info

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:

  1. Bestehende Backups zu drehen
  2. Ein neues inkrementelles Backup zu erstellen
  3. 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.

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

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.

  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 sollte nur ein großes Backup geben.
  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 alles wiederherstellen:

sudo rsync -a /backups/daily.0/ /

Info

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.

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