Container Backup – Dokumentation
Überblick
Das Skript container-backup.sh
dient zur Datensicherung von Verzeichnissen und Docker-Volumes.
Es erstellt vollständige (Full) oder inkrementelle (Incr) Backups und verwaltet automatisch Backup-Ketten.
Die wichtigsten Vorteile:
Robust: ignoriert Änderungen während des Backups (z. B. Datenbanken, Logfiles)
Sicher: Übertragung mit
rsync
, keine kaputten Dateien bei AbbruchAutomatisch: Cleanup nach Tagen oder Anzahl Full-Backups
Flexibel: Wiederherstellung kompletter Ketten oder bis zu einem bestimmten Zeitpunkt
Transparent: Alle Schritte mit Timestamp im Log
Funktionsweise
Stage-Verzeichnis
Backups werden zuerst lokal im Stage (
--stage-dir
, Standard:/var/backups/.backup-stage
) erstellt.Hier liegt auch die Datei
backup.snar
, die für inkrementelle Backups benötigt wird.Diese Datei bleibt nur lokal im Stage und wird nicht ins Ziel übertragen.
Ziel-Verzeichnis (Dest)
Nach erfolgreicher Erstellung werden Archive und
metadata.json
mitrsync
ins Ziel (--dest
) übertragen.Danach wird das Stage-Verzeichnis gelöscht.
Option
--dest-prio
: bevorzugtes Ziel, falls vorhanden (z. B. lokaler Speicher), sonst Fallback auf--dest
.
Ketten-Verwaltung
Jede Full-Sicherung startet eine neue Backup-Kette.
Inkrementelle Sicherungen hängen sich an die aktuelle Kette an.
metadata.json
dokumentiert jedes Backup (Timestamp, Modus, Chain-ID)..chain_current
markiert den Einstiegspunkt (Full) der aktuellen Kette.
Restore
Wiederherstellung über
--restore
, gesteuert durch--chain
(latest, oldest oder spezifisch) und--until
(Zeitpunkt).Die Archive einer Kette werden automatisch der Reihe nach entpackt.
Parameterübersicht
Backup
--mode full|incr
Backup-Modus: vollständiges oder inkrementelles Backup.--src DIR
Quellverzeichnis sichern.--volume VOL
Docker-Volume sichern.--stage-dir DIR
Stage-Verzeichnis (Default:/var/backups/.backup-stage
).--dest DIR
Zielverzeichnis für Backups.--dest-prio DIR
Bevorzugtes Ziel, falls verfügbar (Fallback:--dest
).--name NAME
Archivname oder Präfix.--compress TYPE
Kompression:none
,gzip
,bzip2
,xz
.--exclude PATTERN
Dateien vom Backup ausschließen (mehrfach möglich).--retention-days D
/--keep-days D
Aufbewahrungszeit in Tagen (ältere Ketten werden gelöscht).--keep-full N
Anzahl vollständiger Backup-Ketten, die behalten werden (Default: 3).--prune
Nur Cleanup ausführen, kein Backup erstellen.
Restore
--restore
Restore-Modus aktivieren.--set NAME
Name des Backup-Sets (meist Verzeichnisname).--dest DIR
Pfad, wo die Backups liegen.--target DIR
Zielverzeichnis für die Wiederherstellung.--chain latest|oldest|<TS>
Welche Kette soll wiederhergestellt werden.--until TS
Restore nur bis zu einem bestimmten Zeitpunkt.
Beispiele
Backup
Full-Backup eines Docker-Verzeichnisses
./container-backup.sh --mode full --src /private-backup/docker
--dest /mnt/backup/ContainerBackups --name docker-neptun-container.tar
Inkrementelles Backup mit Aufbewahrung von 7 Tagen
./container-backup.sh --mode incr --src /private-backup/docker
--dest /mnt/backup/ContainerBackups --retention-days 7
--name docker-neptun-container.tar
Restore
Letzte Kette wiederherstellen
./container-backup.sh --restore --set docker --dest /mnt/backup/ContainerBackups
--target /restore/docker --chain latest
Restore nur bis zu einem bestimmten Zeitpunkt
./container-backup.sh --restore --set docker --dest /mnt/backup/ContainerBackups
--target /restore/docker --chain latest --until 20250822-120000
Best Practices
Datenbanken sichern: Für MySQL/MariaDB besser
mysqldump
oder Container-Export verwenden, nicht rohe.ibd
-Dateien.rsync
stattmv
: robust bei Netzwerkzielen (SMB/NFS/SSH), keine kaputten Dateien bei Abbruch.Retention: Sinnvoll wählen (z. B. 7 Tage oder 3 Fulls), sonst wachsen Backups unbegrenzt.
Monitoring: Log-Ausgabe regelmäßig prüfen oder ins Monitoring einbinden.
📜 Changelog
V1.15.15 (aktuell)
Kombination aller Verbesserungen
Robustes
tar
ignoriert Dateiänderungen während des BackupsTransfer ins Ziel mit
rsync
(stattmv
), danach automatisches Löschen der Stage
V1.15.14
tar
robuster:--ignore-failed-read
,--warning=no-file-changed
,--warning=no-file-removed
Verhindert Abbruch und verwaiste TARs ohne
metadata.json
V1.15.13
Neues Feature:
--dest-prio
für bevorzugte Ziele (z. B. lokales Storage vor SMB)Automatisches Fallback auf
--dest
V1.15.11 – V1.15.12
Verbesserte Logs (Start mit Version, konsistente Timestamps)
„Nachholen“-Mechanismus: nicht übertragene Stage-Backups werden beim nächsten Lauf nachträglich via
rsync
ins Ziel kopiert
V1.15.10
Wechsel von
mv
aufrsync
für den TransferRobuster bei Netzwerk-/SMB-Zielen, keine kaputten Dateien mehr bei Abbruch
V1.14 (Basisversion)
Initiale stabile Version mit allen Kernfunktionen:
Full- und Incremental-Backups (
--mode full|incr
)Stage → Dest mit
mv
Verwaltung über
metadata.json
und.chain_current
Automatisches Cleanup (
--retention-days
,--keep-full
)Restore nach Chain (latest, oldest, spezifischer Timestamp, until)