diff --git a/documentation/controller/network-storage-nas.md b/documentation/controller/network-storage-nas.md index 1570700..1e4fe6c 100644 --- a/documentation/controller/network-storage-nas.md +++ b/documentation/controller/network-storage-nas.md @@ -117,10 +117,33 @@ worst case is systemd's 90 s (black-holed server) — verify traffic therefore r job + status poll, never a single long HTTP call (the agentapi client keeps its global 15 s timeout). +## Synology (DSM) — validated recipe (SPIKE-nas-dsm-2026-07-11, real DSM 7.2) + +The consumer recipes were validated end-to-end against a real DSM 7.2 (virtual-dsm) through the live +add pipeline. Exact steps for the customer/operator: +- **Enable NFS first (off by default, and defaults to NFSv3 which our mount rejects):** Control + Panel → File Services → NFS → "Enable NFS service" → **Maximum NFS protocol: NFSv4.1** → Apply. +- **NFS rule:** Control Panel → Shared Folder → → Edit → NFS Permissions → Create → the + Felhom host IP, Read/Write, **Squash: "Map all users to admin"** → Save. The export path shown on + that tab (`/volume1/`) is what goes in the add form. +- **SMB:** Control Panel → User & Group → create a user with Read/Write on the share — nothing else + (no force-user). **Hardlinks work on DSM's SMB stack** (the Q5 caveat is closed for Synology). +- Route A on DSM behaves exactly as on Debian: guest sees `nobody`, chown clean-EPERM, chmod + persists. The SMB error taxonomy (`smb_auth`/`smb_share`) classifies identically to Debian. + +**QNAP remains a stated caveat** — no emulator exists; not validated. + ## Open items -- Q1c: whether an automount trigger installed BEFORE guest boot propagates at guest start — - needs a restart-window test (the add flow installs while the guest runs, which is proven). -- Synology/QNAP appliance fidelity pass (virtual-dsm) before GA. -- The demo's pre-existing `nas-media` unit (if any) predates `retry=0` and is not rewritten — - re-adding the share re-creates it with the current option string. +- **Q1c CLOSED — FAIL (SPIKE-nas-dsm-2026-07-11 §Q1c, supervised):** a configured NAS automount + trigger does **not** survive a guest reboot. `mp8` is `shared`→`shared,slave`; slave propagation + only carries mounts established AFTER the guest's post-reboot bind, so the pre-existing host autofs + trigger is absent from the guest's fresh namespace, and an in-guest access sees an **empty + directory** (not the share) without triggering the host mount. The controller's per-share health + still reads `idle`/`ok` (it inspects the HOST automount), masking the gap. **Fix = agent-side + `ReassertNetworkMounts` on guest reboot** (mirror `ReassertGuestBinds`), spec'd at + `documentation/backlog/FOLLOWUP-nas-automount-guest-reboot-reassert.md`; interim workaround = re-add + the share. Until fixed, a customer guest reboot requires re-touching NAS shares. +- QNAP appliance fidelity pass (no emulator) before GA — Synology is now validated. +- The demo's `nas-media` share predates `retry=0`; re-adding re-creates the unit with the current + option string.