docs: the media restore is drilled — 309 files byte-identical

The point named when #0030 was closed is done. A job in the cluster
extracted the newest archive into an emptyDir and compared it against the
production PVC mounted read-only: every one of the 309 files present in
both is byte-identical by sha256.

That is a stronger statement than the database drill makes. There it was
shown that rows arrive; here that the restored files are the running ones.

Three flaws in the test, all mine, and all written down. busybox find has
no -printf, so the byte counts came out as a silent zero beside real
numbers. The first run compared totals and counted every cache prune as a
mismatch, when the backup is a snapshot and production keeps running - the
intersection is what proves anything. And my exception knew url_cache but
not url_cache_thumbnails, so it reported a finding outside the cache that
was not one; the filter worked, its list did not.

Still unproven: the emergency path itself, copying back into the PVC. What
is proven is that the data come out of the archive complete and unaltered.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01F2Q4Ri8NGwyTZzScvKnWFM
This commit is contained in:
Thore Cimbal
2026-08-21 12:00:00 +00:00
co-authored by Claude Opus 5
parent eb55bc4e4b
commit 1d69ef8ac6
@@ -345,3 +345,49 @@ wurde. Dieselbe Fehlerklasse wie bei #0083 und #0088, am selben Tag zum dritten
- ⚠️ Die **Homelab-Seite** (GitLab/Overmind → MinIO/DSM) entfällt ersatzlos: Das Homelab
ist **nicht Teil dieses Projekts** (Entscheidung sorb, 2026-08-21). Der Punkt stand hier
irrtümlich und wird nicht anderswohin übertragen.
## Nachtrag 2026-08-21 — Medien-Restore erprobt (Auftrag sorb)
Der beim Schließen benannte offene Punkt „Medien gesichert, Rückweg ungeprobt" ist
abgearbeitet. Ein Job im Cluster (`axion-backup:v2`, `emptyDir`, Produktions-PVC **lesend**
gemountet) hat das jüngste Archiv extrahiert und verglichen:
| | |
|---|---|
| Archiv | `…-2026-08-21T01:00:07` |
| zurückgespielt | 318 Dateien, 208.256 KB |
| Produktion zum Vergleichszeitpunkt | 309 Dateien, 208.036 KB |
| gemeinsame Dateien | **309, alle byte-gleich (sha256)** |
| nur im Archiv | 9 — 4 `url_cache`, 5 `url_cache_thumbnails` |
| nur in Produktion | 0 |
**Damit ist die Aussage stärker als bei den Datenbanken:** Dort wurde gezeigt, dass Zeilen
ankommen; hier, dass die zurückgespielten Dateien **byte-identisch** mit den laufenden sind.
⚠️ **Der Vergleich wurde gegengeprüft.** Nach dem bestandenen Lauf wurde eine extrahierte
Datei um ein Byte verändert; der Vergleich meldete sie. Ohne diese Kontrolle wäre „alle
gleich" nur eine Behauptung — dieselbe Lehre, die schon das Bestehenskriterium der
Datenbank-Probe geformt hat.
### Drei Fehler im Test, alle meine
1. **Erster Lauf: `find -printf` gibt es in busybox nicht** — die Bytezahlen kamen als `0`
heraus, während das Skript ansonsten durchlief. Ein stiller Nullwert neben echten
Zahlen ist genau die Sorte Ergebnis, die man überliest.
2. **Erster Lauf verglich die Gesamtmengen** und wertete jede Cache-Bereinigung als
Abweichung. Die Sicherung ist eine Momentaufnahme von 01:00, die Produktion läuft
weiter — beweiskräftig ist die **Schnittmenge**.
3. **Meine Ausnahme war zu eng:** Sie kannte `url_cache`, nicht `url_cache_thumbnails`,
und meldete deshalb einen „Befund außerhalb des Caches". `ls` im Medienverzeichnis
zeigt beide als Vorschau-Caches. Der Filter hat damit richtig gearbeitet — er hat mich
hinsehen lassen —, aber seine Liste war unvollständig.
### Was weiterhin nicht bewiesen ist
Der **Ernstfall-Rückweg** — die Kopie zurück ins PVC — bleibt manuell und ungetestet.
Geprobt ist, dass die Daten vollständig und unverfälscht **aus dem Archiv kommen**, nicht
dass das Zurückschreiben unter Last funktioniert. Das steht so auch in `restore-matrix.md`.
**Vorschlag, nicht umgesetzt:** Diese Probe ließe sich wie `restore-drill` monatlich
fahren. Sie ist gefahrlos (lesend, `emptyDir`), dauert wenige Minuten und wäre die einzige
Prüfung, die den Medienpfad überhaupt beobachtet. Entscheidung sorb.