BorgBackup (Borg) ist ein deduplizierendes Backup-Programm mit Kompression und Verschlüsselung. Es speichert nur geänderte Datenblöcke und spart so erheblich Speicherplatz.

Warum BorgBackup?

Vorteile

- Deduplizierung auf Block-Ebene
- Starke AES-256 Verschlüsselung
- Kompression (LZ4, ZSTD, LZMA)
- Schnelle inkrementelle Backups
- Mountbare Archive
- Aktive Entwicklung

Vergleich mit anderen Tools

| Feature | BorgBackup | rsync | tar | |---------|------------|-------|-----| | Deduplizierung | Ja | Nein | Nein | | Verschlüsselung | Integriert | Extern | Extern | | Inkrementell | Ja | Ja | Nein | | Kompression | Ja | Nein | Optional | | Mountbar | Ja | Nein | Nein |

Installation

Debian/Ubuntu

apt install borgbackup

CentOS/RHEL

dnf install epel-release
dnf install borgbackup

Via pip (aktuellste Version)

pip install borgbackup

Version prüfen

borg --version

Repository erstellen

Lokales Repository

# Ohne Verschlüsselung
borg init --encryption=none /backup/borg-repo

# Mit Verschlüsselung (empfohlen)
borg init --encryption=repokey /backup/borg-repo

# Mit Keyfile (Schlüssel lokal)
borg init --encryption=keyfile /backup/borg-repo

Remote Repository (SSH)

# Auf Backup-Server
borg init --encryption=repokey user@backup-server:/path/to/repo

# Mit spezifischem SSH-Key
BORG_RSH='ssh -i /root/.ssh/backup_key' borg init --encryption=repokey user@backup:/repo

Verschlüsselungsmodi

| Modus | Beschreibung | |-------|--------------| | none | Keine Verschlüsselung | | repokey | Schlüssel im Repository | | keyfile | Schlüssel lokal | | repokey-blake2 | Schneller (BLAKE2) | | authenticated | Nur Authentifizierung |

Backup erstellen

Einfaches Backup

borg create /backup/borg-repo::backup-{now} /home /etc

Mit Optionen

borg create \
    --verbose \
    --stats \
    --progress \
    --compression zstd \
    --exclude-caches \
    --exclude '/home/*/.cache' \
    --exclude '*.tmp' \
    /backup/borg-repo::server-{now:%Y-%m-%d} \
    /home \
    /etc \
    /var/www

Archiv-Namen

# Mit Datum
::backup-{now:%Y-%m-%d_%H:%M}

# Mit Hostname
::{hostname}-{now}

# Beispiel
::webserver-2026-01-26

Archive verwalten

Archive auflisten

borg list /backup/borg-repo

Archiv-Inhalt anzeigen

borg list /backup/borg-repo::backup-2026-01-26

Archiv-Statistiken

borg info /backup/borg-repo::backup-2026-01-26

Repository-Statistiken

borg info /backup/borg-repo

Daten wiederherstellen

Komplettes Archiv

cd /restore
borg extract /backup/borg-repo::backup-2026-01-26

Einzelne Dateien

borg extract /backup/borg-repo::backup-2026-01-26 home/user/wichtig.txt

Mit Pattern

borg extract /backup/borg-repo::backup-2026-01-26 --pattern '+ home/user/documents/*' --pattern '- *'

Archiv mounten

mkdir /mnt/backup
borg mount /backup/borg-repo::backup-2026-01-26 /mnt/backup

# Durchsuchen
ls /mnt/backup

# Unmount
borg umount /mnt/backup

Pruning (alte Backups löschen)

Retention-Policy

borg prune \
    --keep-daily=7 \
    --keep-weekly=4 \
    --keep-monthly=6 \
    --keep-yearly=1 \
    /backup/borg-repo

Mit Prefix

borg prune \
    --prefix 'webserver-' \
    --keep-daily=7 \
    --keep-weekly=4 \
    /backup/borg-repo

Dry-Run

borg prune --dry-run --list --keep-daily=7 /backup/borg-repo

Kompression

Kompressionsalgorithmen

| Algorithmus | Geschwindigkeit | Kompression | |-------------|-----------------|-------------| | none | Schnellste | Keine | | lz4 | Sehr schnell | Niedrig | | zstd | Schnell | Gut | | zlib | Mittel | Gut | | lzma | Langsam | Beste |

Kompression wählen

# Schnell (Standard für schnelle Backups)
borg create --compression lz4 ...

# Ausgewogen
borg create --compression zstd ...

# Beste Kompression
borg create --compression lzma,9 ...

# Auto (basierend auf Dateityp)
borg create --compression auto,zstd ...

Automatisierung

Backup-Skript

#!/bin/bash
# /usr/local/bin/borg-backup.sh

# Konfiguration
export BORG_REPO='user@backup-server:/backup/borg-repo'
export BORG_PASSPHRASE='geheimes_passwort'
# Oder: export BORG_PASSCOMMAND='cat /root/.borg-pass'

# Logging
LOG=/var/log/borg-backup.log
exec > >(tee -a $LOG) 2>&1

echo "=== Backup gestartet: $(date) ==="

# Backup erstellen
borg create \
    --verbose \
    --stats \
    --compression zstd \
    --exclude-caches \
    --exclude '/home/*/.cache/*' \
    --exclude '/var/tmp/*' \
    --exclude '/tmp/*' \
    ::'{hostname}-{now:%Y-%m-%d_%H:%M}' \
    /home \
    /etc \
    /var/www \
    /var/lib/mysql

backup_exit=$?

# Alte Backups löschen
borg prune \
    --keep-daily=7 \
    --keep-weekly=4 \
    --keep-monthly=6 \
    --keep-yearly=1

prune_exit=$?

# Repository komprimieren
borg compact

# Status
global_exit=$(( backup_exit > prune_exit ? backup_exit : prune_exit ))

if [ ${global_exit} -eq 0 ]; then
    echo "Backup erfolgreich abgeschlossen"
elif [ ${global_exit} -eq 1 ]; then
    echo "Backup mit Warnungen abgeschlossen"
else
    echo "Backup fehlgeschlagen"
fi

echo "=== Backup beendet: $(date) ==="
exit ${global_exit}

Cron-Job

# /etc/cron.d/borg-backup

# Täglich um 2:00 Uhr
0 2 * * * root /usr/local/bin/borg-backup.sh

Systemd-Timer

# /etc/systemd/system/borg-backup.service

[Unit]
Description=BorgBackup

[Service]
Type=oneshot
ExecStart=/usr/local/bin/borg-backup.sh
# /etc/systemd/system/borg-backup.timer

[Unit]
Description=BorgBackup Timer

[Timer]
OnCalendar=*-*-* 02:00:00
Persistent=true

[Install]
WantedBy=timers.target
systemctl enable borg-backup.timer
systemctl start borg-backup.timer

Remote-Backup über SSH

SSH-Key erstellen

ssh-keygen -t ed25519 -f /root/.ssh/borg_backup -N ''

Auf Backup-Server

# .ssh/authorized_keys auf Backup-Server
command="borg serve --restrict-to-path /backup/client1",restrict ssh-ed25519 AAAA... root@client

Umgebungsvariablen

export BORG_REPO='backup@server:/backup/repo'
export BORG_RSH='ssh -i /root/.ssh/borg_backup'
export BORG_PASSPHRASE='passwort'

Sicherheit

Schlüssel exportieren

# Schlüssel sichern (wichtig!)
borg key export /backup/borg-repo /root/borg-key-backup.txt

# Verschlüsselt exportieren
borg key export --paper /backup/borg-repo

Schlüssel importieren

borg key import /backup/borg-repo /root/borg-key-backup.txt

Passwort ändern

borg key change-passphrase /backup/borg-repo

Integrität prüfen

Repository prüfen

# Schnelle Prüfung
borg check /backup/borg-repo

# Vollständige Prüfung
borg check --verify-data /backup/borg-repo

# Nur Archive
borg check --archives-only /backup/borg-repo

Reparieren

borg check --repair /backup/borg-repo

MySQL-Backup mit Borg

Skript mit Datenbank-Dump

#!/bin/bash
# MySQL-Dump vor Borg-Backup

DUMP_DIR=/var/backups/mysql
mkdir -p $DUMP_DIR

# Alle Datenbanken dumpen
mysqldump --all-databases --single-transaction > $DUMP_DIR/all-databases.sql

# Oder einzelne Datenbanken
for db in $(mysql -e 'SHOW DATABASES' -s --skip-column-names | grep -v -E '^(information_schema|performance_schema|sys)$'); do
    mysqldump --single-transaction $db > $DUMP_DIR/$db.sql
done

# Dann Borg-Backup
borg create ... /var/backups/mysql

Monitoring

Healthcheck

#!/bin/bash
# Am Ende des Backup-Skripts

if [ ${global_exit} -eq 0 ]; then
    curl -fsS -m 10 --retry 5 -o /dev/null https://hc-ping.com/your-uuid
fi

Prometheus-Metriken

# Nach Backup
echo "borg_backup_last_run $(date +%s)" > /var/lib/prometheus/borg.prom
echo "borg_backup_exit_code $global_exit" >> /var/lib/prometheus/borg.prom

Troubleshooting

Lock entfernen

# Bei abgebrochenem Backup
borg break-lock /backup/borg-repo

Cache löschen

borg delete --cache-only /backup/borg-repo

Verbose-Modus

borg create -v --list --stats ...

Debug

borg --debug create ...

Zusammenfassung

| Befehl | Funktion | |--------|----------| | borg init | Repository erstellen | | borg create | Backup erstellen | | borg list | Archive auflisten | | borg extract | Wiederherstellen | | borg mount | Archiv mounten | | borg prune | Alte Backups löschen | | borg check | Integrität prüfen |

| Option | Wirkung | |--------|---------| | --compression | Kompression wählen | | --exclude | Dateien ausschließen | | --stats | Statistiken anzeigen | | --progress | Fortschritt anzeigen |

| Retention | Bedeutung | |-----------|-----------| | --keep-daily | Tägliche behalten | | --keep-weekly | Wöchentliche behalten | | --keep-monthly | Monatliche behalten | | --keep-yearly | Jährliche behalten |

Fazit

BorgBackup ist eine ausgezeichnete Lösung für Server-Backups. Die Deduplizierung spart erheblich Speicherplatz bei häufigen Backups. Die integrierte Verschlüsselung schützt sensible Daten. Mit automatischer Rotation und SSH-Support eignet sich Borg ideal für automatisierte Backup-Strategien. Die Möglichkeit, Archive zu mounten, erleichtert die Wiederherstellung einzelner Dateien erheblich.