Files
rclone/konsolidieren.md
2026-09-28 14:07:07 +00:00

4.6 KiB
Raw Permalink Blame History

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:

  1. Monatsordner: Alle Tages-Ordner (JJJJ-MM-TT-HH) eines abgelaufenen Monats
    werden zu einem Ordner JJJJ-MM zusammengefasst.
  2. Jahresordner: Monatsordner, die älter als RETAIN_MONTHS (Standard: 3) Monate
    sind, werden zu einem Ordner JJJJ zusammengefasst.

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-HH bzw. JJJJ-MM entsprechen,
    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.