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
| 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.