Zum Inhalt

Speichertopologien

Das Verhältnis zwischen Pi, Docker-Host und Synology-NAS ist die folgenreichste Architekturentscheidung dieses Projekts. Unterstützt werden drei Topologien, und ihre Abwägungen stehen ausdrücklich hier statt hinter einer stillen Vorgabe.

Auf einen Blick

A — Lokales FS + restic B — NFS direkt C — iSCSI-LUN
Abholmechanismus inotify Polling inotify
Latenz am Scanner unter einer Sekunde ca. 10 s unter einer Sekunde
Sicherung restic aufs NAS Synology-Snapshots LUN-Snapshots
Speicherebenen zwei (live + Backup) eine eine
Mehrere Hosts möglich ja ja nein
Einrichtungsaufwand mittel gering hoch

Topologie A — Lokales Dateisystem auf dem Docker-Host mit restic-Sicherung

Pi → NFS-Schreibzugriff → /mnt/synology/staging/   (Synology)
                          |
                       Abgleich über einen inotify-Watch-Container
                          v
                Docker-Host: /var/lib/paperless/consume   (lokales FS)
                          |
                       Abholung per inotify
                          v
                Paperless-ngx
                          |
                          +-- nächtliches restic auf Synology /backup/restic/
                          +-- wöchentliches restic check --read-data-subset=10%

Vorteile. inotify funktioniert, die Abholung liegt also unter einer Sekunde, und Paperless liest so schnell wie die Platte des Hosts. Die Sicherung ist ein eigener, klar umrissener Vorgang mit einem dafür gebauten Werkzeug.

Nachteile. Zwei Speicherebenen, über die man nachdenken muss. Ein Restore braucht restic, nicht bloß eine Dateikopie.

Wählen Sie das, wenn Sie die beste Balance aus Geschwindigkeit, Sicherungsintegrität und betrieblicher Klarheit wollen. Das ist die empfohlene Voreinstellung.

Topologie B — NFS direkt vom Synology

Pi → NFS-Schreibzugriff → /mnt/synology/consume/   (Synology)
                          |
                          v
                Docker-Host: NFS-Mount → Paperless-Container
                          |
                       Polling (inotify funktioniert über NFS nicht)
                          v
                Paperless-ngx
                          |
                          +-- verlässt sich auf Btrfs-Snapshots des Synology
                          +-- Hyper Backup an einen anderen Standort

Vorteile. Eine einzige Speicherebene. Die Sicherung ergibt sich implizit aus Snapshots und der Synology-Infrastruktur, die Sie ohnehin betreiben. Das einfachste Denkmodell.

Nachteile. inotify funktioniert über NFS nicht, Paperless muss also pollen (PAPERLESS_CONSUMER_POLLING=10) — das sind grob zehn Sekunden Latenz am Scanner. Unter Last sind NFS-Sperrkonflikte möglich. Und Btrfs-Snapshots, die gegen ein laufendes Consume-Verzeichnis gezogen werden, können mit Schreibzugriffen kollidieren und sind nicht immer absturzkonsistent.

Wählen Sie das, wenn Einfachheit vor Latenz geht: Einzelperson im Haushalt, wenig Scanvolumen, und eine erste Einrichtung, die heute laufen soll.

Topologie C — iSCSI-LUN vom Synology

Pi → NFS-Schreibzugriff → /mnt/synology/staging/   (Synology)
                          |
                          v
                Docker-Host: iSCSI-LUN als ext4 eingehängt → Paperless
                          |
                       Abholung per inotify
                          v
                Paperless-ngx
                          |
                          +-- LUN-Snapshots auf dem Synology
                          +-- Hyper Backup der LUN-Snapshots

Vorteile. inotify funktioniert, weil das aus Sicht des Hosts ein lokales Blockgerät ist. LUN-Snapshots sind auf Blockebene absturzkonsistent. Für die Sicherung gibt es genau einen Ort.

Nachteile. Ein LUN gehört genau einem Host — kein Aktiv-Aktiv über zwei Docker-Knoten. Bei 1 GbE wird iSCSI bei sehr großen Scans zum Engpass. Mehr Einrichtungsaufwand als NFS.

Wählen Sie das, wenn Sie inotify und Synology-eigene Sicherung wollen und mit der Beschränkung auf einen Host leben können.

Eine davon auswählen

deploy/compose/ wird je Topologie eine Compose-Datei enthalten; Sie kopieren die gewünschte nach docker-compose.yml.

Die Compose-Dateien gibt es noch nicht

deploy/compose/ ist zum Zeitpunkt dieses Textes leer. Der Referenz-Stack für Topologie B ist als erster geplant, weil er der einfachste Einstieg ist.