Restic ist ein modernes Backup-Programm in Go geschrieben. Es bietet schnelle, verschlüsselte und deduplizierte Backups auf verschiedene Backends.
Warum Restic?
Vorteile
- Schnell (Go-basiert)
- Verschlüsselung standardmäßig
- Deduplizierung
- Viele Backends
- Einfache Bedienung
- Plattformübergreifend
- Aktive Entwicklung
Vergleich
| Feature | Restic | BorgBackup |
|---|
| Sprache | Go | Python/C |
| Geschwindigkeit | Schneller | Schnell |
| Backends | Viele | SSH primär |
| Verschlüsselung | Immer | Optional |
| Kompression | Seit 0.14 | Ja |
Installation
Debian/Ubuntu
apt install restic
Aktuellste Version
# Via GitHub
wget https://github.com/restic/restic/releases/download/v0.16.4/restic_0.16.4_linux_amd64.bz2
bunzip2 restic_0.16.4_linux_amd64.bz2
mv restic_0.16.4_linux_amd64 /usr/local/bin/restic
chmod +x /usr/local/bin/restic
Self-Update
restic self-update
Repository initialisieren
Lokal
restic init --repo /backup/restic-repo
SFTP
restic init --repo sftp:user@backup-server:/backup/restic
Amazon S3
export AWS_ACCESS_KEY_ID="AKIAIOSFODNN7EXAMPLE"
export AWS_SECRET_ACCESS_KEY="wJalrXUtnFEMI/K7MDENG..."
restic init --repo s3:s3.amazonaws.com/bucket-name
Backblaze B2
export B2_ACCOUNT_ID="xxxxxxxxxxxx"
export B2_ACCOUNT_KEY="K000xxxxxxxxxxxxxxx"
restic init --repo b2:bucket-name:/restic
MinIO/S3-kompatibel
restic init --repo s3:https://minio.example.de/bucket
REST Server
restic init --repo rest:https://user:pass@backup.example.de/
Backup erstellen
Einfaches Backup
restic -r /backup/restic-repo backup /home /etc
Mit Optionen
restic -r /backup/restic-repo backup \
--verbose \
--tag server1 \
--exclude-caches \
--exclude='*.tmp' \
--exclude='.cache' \
/home /etc /var/www
Exclude-Datei
# /etc/restic/excludes.txt
*.tmp
*.log
.cache
node_modules
.git
__pycache__
restic backup --exclude-file=/etc/restic/excludes.txt /home
Stdin-Backup
# Datenbank-Dump
mysqldump --all-databases | restic -r /backup/restic backup --stdin --stdin-filename mysql-dump.sql
Snapshots verwalten
Snapshots auflisten
restic -r /backup/restic snapshots
restic snapshots --tag server1
Snapshot-Details
restic -r /backup/restic stats
restic -r /backup/restic stats --mode files-by-contents
Dateien in Snapshot
restic -r /backup/restic ls latest
restic -r /backup/restic ls abc123de # Snapshot-ID
Wiederherstellen
Kompletter Snapshot
restic -r /backup/restic restore latest --target /restore
Bestimmter Snapshot
restic -r /backup/restic restore abc123de --target /restore
Einzelne Dateien
restic restore latest --target /restore --include /home/user/wichtig.txt
Mit Pattern
restic restore latest --target /restore --include '*.conf'
Snapshot mounten
mkdir /mnt/restic
restic -r /backup/restic mount /mnt/restic
# Durchsuchen
ls /mnt/restic/snapshots/latest/
# Beenden mit Ctrl+C oder
fusermount -u /mnt/restic
Snapshots löschen
Einzelner Snapshot
restic -r /backup/restic forget abc123de
Mit Retention-Policy
restic -r /backup/restic forget \
--keep-last 10 \
--keep-daily 7 \
--keep-weekly 4 \
--keep-monthly 12 \
--keep-yearly 2
Mit Prune (Daten löschen)
restic forget --keep-daily 7 --prune
Dry-Run
restic forget --keep-daily 7 --dry-run
Automatisierung
Backup-Skript
#!/bin/bash
# /usr/local/bin/restic-backup.sh
# Repository
export RESTIC_REPOSITORY="s3:s3.eu-central-1.amazonaws.com/backup-bucket"
export RESTIC_PASSWORD="verschluesselungs_passwort"
export AWS_ACCESS_KEY_ID="AKIAIOSFODNN7EXAMPLE"
export AWS_SECRET_ACCESS_KEY="wJalrXUtnFEMI/K7MDENG..."
# Logging
LOG=/var/log/restic-backup.log
exec >> $LOG 2>&1
echo "=== Backup gestartet: $(date) ==="
# Backup
restic backup \
--verbose \
--tag $(hostname) \
--exclude-caches \
--exclude-file=/etc/restic/excludes.txt \
/home \
/etc \
/var/www \
/var/lib/mysql
backup_exit=$?
# Alte Snapshots löschen
restic forget \
--keep-daily 7 \
--keep-weekly 4 \
--keep-monthly 6 \
--prune
forget_exit=$?
# Integrität prüfen (wöchentlich)
if [ $(date +%u) -eq 7 ]; then
restic check
fi
echo "=== Backup beendet: $(date), Exit: $backup_exit ==="
Systemd-Timer
# /etc/systemd/system/restic-backup.service
[Unit]
Description=Restic Backup
[Service]
Type=oneshot
ExecStart=/usr/local/bin/restic-backup.sh
# /etc/systemd/system/restic-backup.timer
[Unit]
Description=Restic Backup Timer
[Timer]
OnCalendar=*-*-* 03:00:00
RandomizedDelaySec=1800
Persistent=true
[Install]
WantedBy=timers.target
systemctl enable restic-backup.timer
systemctl start restic-backup.timer
Passwort-Datei
# /etc/restic/password
mein_geheimes_passwort
chmod 600 /etc/restic/password
export RESTIC_PASSWORD_FILE=/etc/restic/password
REST-Server
Installation
# REST-Server für Restic
wget https://github.com/restic/rest-server/releases/download/v0.12.1/rest-server_0.12.1_linux_amd64.gz
gunzip rest-server_0.12.1_linux_amd64.gz
mv rest-server_0.12.1_linux_amd64 /usr/local/bin/rest-server
chmod +x /usr/local/bin/rest-server
Starten
# Ohne Authentifizierung
rest-server --path /backup/restic-data
# Mit Authentifizierung
rest-server --path /backup/restic-data --private-repos
# Mit TLS
rest-server --path /backup/restic-data --tls --tls-cert cert.pem --tls-key key.pem
Systemd-Service
# /etc/systemd/system/restic-rest-server.service
[Unit]
Description=Restic REST Server
After=network.target
[Service]
Type=simple
User=restic
ExecStart=/usr/local/bin/rest-server --path /backup/restic-data --private-repos
Restart=always
[Install]
WantedBy=multi-user.target
Client-Konfiguration
restic -r rest:https://user:pass@backup.example.de/repo init
Kompression (ab 0.14)
Kompression aktivieren
restic backup --compression auto /home
Kompressionsoptionen
| Option | Beschreibung |
|---|
| off | Keine Kompression |
| auto | Automatisch (Standard) |
| max | Maximale Kompression |
Existierende Daten komprimieren
# Bei nächstem prune
restic prune --repack-uncompressed
Integrität prüfen
Schnelle Prüfung
restic -r /backup/restic check
Vollständige Prüfung
restic check --read-data
Teil der Daten prüfen
restic check --read-data-subset=10%
Mehrere Repositories
Kopieren zwischen Repos
restic -r /backup/source copy --repo2 /backup/target
Mit Passwörtern
restic -r /backup/source \
--password-file /etc/restic/source-pass \
copy \
--repo2 /backup/target \
--password-file2 /etc/restic/target-pass
Monitoring
Prometheus-Metriken
#!/bin/bash
# Nach Backup
PROM_FILE=/var/lib/prometheus/restic.prom
restic stats --json | jq -r '
"restic_total_size " + (.total_size|tostring),
"restic_total_file_count " + (.total_file_count|tostring)
' > $PROM_FILE
echo "restic_last_backup_timestamp $(date +%s)" >> $PROM_FILE
Healthcheck
# Am Ende des Backup-Skripts
if [ $backup_exit -eq 0 ]; then
curl -fsS -m 10 https://hc-ping.com/your-uuid
fi
Troubleshooting
Lock entfernen
restic -r /backup/restic unlock
Cache löschen
restic cache --cleanup
Repository reparieren
restic -r /backup/restic recover
restic -r /backup/restic prune
Debug-Modus
restic -v backup /home
restic -vv backup /home # Noch detaillierter
Zusammenfassung
| Backend | URL-Format |
|---|
| Local | /pfad/zum/repo |
| SFTP | sftp:user@host:/pfad |
| S3 | s3:s3.region.amazonaws.com/bucket |
| B2 | b2:bucket-name:/pfad |
| REST | rest:https://host/ |
| Befehl | Funktion |
|---|
| init | Repository erstellen |
| backup | Backup erstellen |
| snapshots | Snapshots auflisten |
| restore | Wiederherstellen |
| mount | Snapshot mounten |
| forget | Snapshots löschen |
| prune | Daten aufräumen |
| check | Integrität prüfen |
| Umgebungsvariable | Bedeutung |
|---|
| RESTIC_REPOSITORY | Repository-Pfad |
| RESTIC_PASSWORD | Passwort |
| RESTIC_PASSWORD_FILE | Passwort-Datei |
| AWS_ACCESS_KEY_ID | S3 Access Key |
| AWS_SECRET_ACCESS_KEY | S3 Secret Key |
Fazit
Restic ist ein ausgezeichnetes Backup-Tool für moderne Infrastrukturen. Die Geschwindigkeit und einfache Bedienung machen es ideal für automatisierte Backups. Die Verschlüsselung ist standardmäßig aktiv und schützt sensible Daten. Mit der breiten Backend-Unterstützung lassen sich flexible Backup-Strategien umsetzen. Der REST-Server ermöglicht zentrale Backup-Infrastrukturen.