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

121 lines
4.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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