Borgbackup einrichten unter Ubuntu

Borgbackup einrichten unter Ubuntu
Sicherungskopie inkrementell erstellen Mit Borgbackup

Nach ein paar Tagen Verzweiflung und Kopf zerbrechen, habe ich endlich Borg Backup auf meinem Server zum Laufen gebracht. Damit werde ich zukünftig und einmal täglich meine Daten auf externen Speicher sichern.
Wie ich das gemacht habe, schreibe ich nun auf, damit auch ich Zukunft wieder darauf zurückgreifen kann, wenn ich es benötige.

Update: Habe dem gesamten Setup ein Update gegeben. Mit dieser verbesserten Anleitung sollte es besser funktionieren.

Installation:

Zuerst müssen wir Borgbackup und die Abhängigkeiten installieren.

sudo apt update
sudo apt install borgbackup openssh-client mailutils cron -y
sudo systemctl enable cron
sudo systemctl start cron

Anschließend brauchen wir die Zugangsdaten zu dem externen Speicher. Bei mir ist es die Storagebox von Hetzner. Nun verbinden wir uns per FTP Programm (hier kann ich FileZilla empfehlen) mit der Storagebox und per SSH mit dem Server.

Um sicherzustellen, dass das Backup-Skript nahtlos funktioniert und ohne manuelle Eingabe eines Passworts auf den FTP-Server der Storagebox zugreifen kann, müssen wir einen SSH-Schlüssel erzeugen und auf dem Server hinterlegen. Hier ist die vollständige Anleitung:

Schritt 1: SSH-Schlüssel erzeugen

  1. SSH-Schlüssel erzeugen:
    Öffne ein Terminal und führe den folgenden Befehl aus, um ein neues SSH-Schlüsselpaar zu erzeugen:
   ssh-keygen -t rsa -b 4096 -C "deine_email@domain.com"

Du wirst aufgefordert, einen Speicherort für den Schlüssel anzugeben (Standard ist ~/.ssh/id_rsa). Drücke Enter, um den Standardpfad zu verwenden. Du kannst auch ein Passwort für den Schlüssel festlegen oder es leer lassen für einen passwortlosen Schlüssel (empfohlen für automatisierte Prozesse).

  1. Öffentlicher Schlüssel wird erstellt:
    Dein öffentlicher Schlüssel wird in ~/.ssh/id_rsa.pub gespeichert. Diesen musst du auf den FTP-Server deiner Storagebox hochladen.

Schritt 2: Öffentlichen Schlüssel auf dem FTP-Server hinterlegen

  1. SSH-Verbindung testen:
    Teste zunächst die Verbindung zum Server, um sicherzustellen, dass sie funktioniert:
   ssh u123456@u123456.your-storagebox.de -p 23
  1. Öffentlichen Schlüssel hochladen:
    Kopiere den öffentlichen Schlüssel auf den Server:
   ssh-copy-id -i ~/.ssh/id_rsa.pub u123456@u123456.your-storagebox.de -p 23

Falls ssh-copy-id nicht verfügbar ist, kannst du den Schlüssel manuell kopieren:

   cat ~/.ssh/id_rsa.pub | ssh -p 23 u123456@u123456.your-storagebox.de "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"

Schritt 3: SSH-Verbindung testen

Stelle sicher, dass die passwortlose Authentifizierung funktioniert, indem du dich erneut mit dem Server verbindest:

ssh u123456@u123456.your-storagebox.de -p 23

Du solltest nun ohne Aufforderung zur Passworteingabe angemeldet werden.

Schritt 4: Backup-Skript erstellen

Erstelle die Datei borg_backup.sh und füge folgendes Skript ein:

#!/bin/bash

# Konfigurationsvariablen
REPOSITORY="ssh://u123456@u123456.your-storagebox.de:23/./backups/server"
BACKUP_DIR="/pfad/zu/den/zu/sichernden/daten"
LOG_FILE="/pfad/zum/backup_verzeichnis/borg_backup.log"
EXCLUDES="/pfad/zur/exclude_liste"
EMAIL="deine_email@domain.com"
DATE=$(date +"%Y-%m-%d %H:%M:%S")

# Sicherstellen, dass das Backup-Verzeichnis existiert
mkdir -p "$(dirname "$LOG_FILE")"

# Backup erstellen
echo "Starte Backup am $DATE" >> "$LOG_FILE"
if borg create --verbose --filter AME --list --stats --show-rc \
    --compression lz4 \
    --exclude-from "$EXCLUDES" \
    "$REPOSITORY::'{hostname}-{now:%Y-%m-%d_%H-%M-%S}'" \
    "$BACKUP_DIR" >> "$LOG_FILE" 2>&1; then
    echo "Backup erfolgreich: $DATE" >> "$LOG_FILE"
else
    echo "Backup fehlgeschlagen: $DATE" >> "$LOG_FILE"
    echo "Backup fehlgeschlagen: $DATE" | mail -s "BorgBackup Fehler" $EMAIL
    exit 1
fi

# Alte Backups entfernen
echo "Entfernen alter Backups am $DATE" >> "$LOG_FILE"
if borg prune -v --list "$REPOSITORY" --keep-daily=7 --keep-weekly=4 --keep-monthly=6 >> "$LOG_FILE" 2>&1; then
    echo "Alte Backups erfolgreich entfernt" >> "$LOG_FILE"
else
    echo "Entfernen alter Backups fehlgeschlagen" >> "$LOG_FILE"
    echo "Entfernen alter Backups fehlgeschlagen" | mail -s "BorgBackup Prune Fehler" $EMAIL
    exit 1
fi

# Erfolgsbenachrichtigung senden
echo "Backup und Bereinigung erfolgreich abgeschlossen am $DATE" | mail -s "BorgBackup Erfolgreich" $EMAIL

Schritt 5: Skript ausführbar machen

Mache das Skript ausführbar mit folgendem Befehl:

chmod +x borg_backup.sh

Schritt 6: Exclude-Liste erstellen

Erstelle eine Datei namens exclude_list.txt und füge alle Verzeichnisse und Dateien hinzu, die vom Backup ausgeschlossen werden sollen. Beispiel:

/pfad/zu/den/zu/sichernden/daten/tmp
/pfad/zu/den/zu/sichernden/daten/cache

Schritt 7: Cron-Job einrichten

Um das Skript regelmäßig auszuführen, erstelle einen Cron-Job. Öffne die Crontab-Datei:

crontab -e

Füge die folgende Zeile hinzu, um das Skript täglich um 3 Uhr morgens auszuführen:

0 3 * * * /pfad/zum/borg_backup.sh

Fazit

Mit diesen Schritten hast du ein vollständiges, automatisiertes Backup-Skript mit BorgBackup eingerichtet, das Daten auf einen entfernten Server sichert. Durch die Einrichtung der passwortlosen SSH-Authentifizierung wird der Prozess nahtlos und sicher durchgeführt. Passe die Konfigurationsvariablen an deine spezifischen Bedürfnisse an, um sicherzustellen, dass deine Daten regelmäßig und zuverlässig gesichert werden.



Quellen: Thomas Leister, Hetzner Borgbackup Wiki , Readthedocs