# RUNBOOK — provisioning the OS / Docker-data storage split How the controller guest's **OS rootfs** and **Docker data** are carved onto separate `local-lvm` volumes, and how to size them per node/customer. Grounded by the storage-split spike (`REPORT-storage-split-spike.md`). Defaults target a ~512 GB SSD: **32 GB OS rootfs + 256 GB Docker-data**, rest of the thin pool free for other guests. ## The design (locked) - **Split for resilience, not backup size.** An isolated OS rootfs stays bootable + agent-recoverable if the Docker volume fills. Both volumes ride into PBS regardless (so the backup size is unchanged) — the win is independent sizing/growth and a smaller, faster-to-restore OS rootfs. - **One Docker daemon, one data-root, one volume** at `/var/lib/docker` for ALL images + overlay (controller, traefik, cloudflared, filebrowser, and customer apps). Infra is NOT relocated to the OS partition — infra/user separation under one daemon isn't cleanly possible and isn't needed. Infra is protected by the controller's **prevention layer** (reserved buffer + deploy gate + disk alerts + baked log rotation), not by placement. - **`backup=1` on the Docker-data volume is non-negotiable.** Extra LXC mountpoints default to `backup=0` = EXCLUDED from vzdump/PBS (spike B3). Without it, named-volume DBs fall out of the snapshot AND the volume (with baked images) is excluded from the golden archive. ## Golden build (per controller-image baseline) `configs/build-golden.sh` builds the template guest with the split baked in: ``` # defaults shown; override via env OS_SIZE_GB=32 GOLDEN_DOCKER_GB=16 \ ./build-golden.sh