CONTAINER-Backup

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 Abbruch

  • Automatisch: 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

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

  2. Ziel-Verzeichnis (Dest)

    • Nach erfolgreicher Erstellung werden Archive und metadata.json mit rsync 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.

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

  4. 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 statt mv: 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 Backups

  • Transfer ins Ziel mit rsync (statt mv), 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 auf rsync für den Transfer

  • Robuster 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)

Leave a reply

Your email address will not be published. Required fields are marked *