4.6 KiB
Archiv-Konsolidierung (konsolidierung.sh)
Zweck
Das Skript ergänzt ein rsync-/rclone-Backup mit Archiv-Ordner um eine automatische
Lösch- bzw. Verdichtungs-Strategie. Aus den pro Backup-Lauf entstandenen Archiv-Ordnern
Archiv/
├── 2026-07-01-06/
├── 2026-07-15-14/
├── 2026-08-03-14/
└── ...
werden automatisch verdichtete Strukturen:
- Monatsordner: Alle Tages-Ordner (
JJJJ-MM-TT-HH) eines abgelaufenen Monats
werden zu einem OrdnerJJJJ-MMzusammengefasst. - Jahresordner: Monatsordner, die älter als
RETAIN_MONTHS(Standard: 3) Monate
sind, werden zu einem OrdnerJJJJzusammengefasst.
Der aktuelle Monat und die jüngsten Monatsordner bleiben unverändert bestehen.
Konsolidierungsregel
Beim Zusammenführen mehrerer Ordner gilt: Die aktuellste Version einer Datei bleibt
erhalten, ältere Varianten werden überschrieben. Dateien, die nur in älteren Läufen
vorlagen (z. B. weil sie zwischenzeitlich im Produktiv-Bestand gelöscht und deshalb
archiviert wurden), bleiben unangetastet erhalten – das Skript löscht beim Merge
niemals etwas im Ziel, es überschreibt nur.
Das bedeutet für den Lebenszyklus einer Datei:
| Situation | Ergebnis nach Konsolidierung |
|---|---|
| Datei in mehreren Läufen unverändert | eine Kopie (neueste Version) |
| Datei zwischen Läufen verändert | letzte Version, ältere Varianten entfallen |
| Datei gelöscht und ins Archiv verschoben | bleibt dauerhaft erhalten |
| Datei nie archiviert | nicht betroffen |
Nutzung
bash konsolidierung.sh [-n] <archiv-verzeichnis>
| Option | Bedeutung |
|---|---|
-n |
Dry-Run: zeigt nur an, was passieren würde, verändert nichts |
<archiv-verzeichnis> |
Pfad zum Archiv (Pflichtangabe) |
Beispiele:
bash konsolidierung.sh -n Archiv/ # Vorschau
bash konsolidierung.sh Archiv/ # ausführen
Konfiguration
Die Variablen stehen am Anfang des Skripts:
RETAIN_MONTHS=3– Monatsordner jünger als dieser Wert (in Monaten, bezogen auf
heute) bleiben als Monatsordner bestehen. Ältere wandern in den Jahresordner.LOG_FILE=""– leer lassen für reine Terminal-Ausgabe, oder einen Pfad setzen,
um alle Meldungen zusätzlich in ein Logfile zu schreiben (Append-Modus):LOG_FILE="/var/log/konsolidierung.log"
Logging
Jede verarbeitete Aktion wird mit Zeitstempel protokolliert:
[2026-09-28 14:32:05] mv: /pfad/Archiv/2026-08-01-06 -> /pfad/Archiv/2026-08 (Grundordner fuer 2026-08)
[2026-09-28 14:32:07] merge: /pfad/Archiv/2026-08-03-14 -> /pfad/Archiv/2026-08
Bei gesetztem LOG_FILE landen dieselben Zeilen zusätzlich im Logfile. Da im
Append-Modus geschrieben wird, eignet sich das Log als lückenlose Historie der
Konsolidierungen.
Wann und wie oft laufen lassen?
Das Skript kann beliebig oft laufen, idealerweise täglich direkt im Anschluss an
den Backup-Sync. Es ist idempotent:
- Ordner des aktuellen Monats werden nie angefasst; erst nach Monatswechsel werden
die Ordner des Vormonats zusammengefasst. - Ein erneuter Lauf ohne neue abgelaufene Monate bewirkt schlicht nichts.
- Wird ein Lauf unterbrochen, setzt der nächste Lauf die Zusammenführung fort
(Restordner werden in den bereits bestehenden Monats-/Jahresordner weiter gemergt).
Einbindung in die tägliche Backup-Routine, z. B. per Cron:
30 2 * * * /pfad/backup-sync.sh && /pfad/konsolidierung.sh /pfad/Archiv
Sicherheitshinweise
- Erst testen: vor dem ersten echten Lauf
bash konsolidierung.sh -n Archiv/
ausführen und die Ausgabe prüfen. - Ordner, die nicht dem Namensmuster
JJJJ-MM-TT-HHbzw.JJJJ-MMentsprechen,
werden ignoriert und nie verändert. - Da beim Merge kopiert (
cp -a, erhält Rechte und Zeitstempel) und erst danach
gelöscht wird, ist ein Abbruch unkritisch; es können nur Restkopien entstehen,
die der nächste Lauf aufräumt. - Das Skript sollte nicht gleichzeitig mit dem Backup-Sync auf dasselbe Archiv
laufen (einfach sequenziell aufrufen).
Voraussetzungen
- Linux mit Bash (nutzt
date -d,mapfile, assoziative Arrays). - Das Archiv-Verzeichnis muss für den ausführenden Nutzer schreibbar sein.