konsolidieren.md hinzugefügt

This commit is contained in:
alf
2026-09-28 14:07:07 +00:00
parent d52807f19b
commit f2bbc94949

121
konsolidieren.md Normal file
View File

@ -0,0 +1,121 @@
# Archiv-Konsolidierung ([konsolidierung.sh](http://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
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
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):
```bash
LOG_FILE="/var/log/konsolidierung.log"
```
## Logging
Jede verarbeitete Aktion wird mit Zeitstempel protokolliert:
```text
[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:
```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.