konsolidieren.md hinzugefügt
This commit is contained in:
121
konsolidieren.md
Normal file
121
konsolidieren.md
Normal 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.
|
||||||
Reference in New Issue
Block a user