Files
docs/infra/volumes.md
T
fkrebs 40a02f33ef docs: reconcile storage.md + volumes.md with live 2026-07-15 audit
Fixes contradictions found during the CT 104 disk-full incident:
- Arcane: was DECOMMISSIONED 2026-05-26 + local, not "migrated to UNAS"
  (volumes.md and storage.md disagreed).
- arr-stack: fully on UNAS incl. SQLite configs on services/arr-stack/;
  media/downloads on media/ share. Radarr/Sonarr not deployed. Removed
  stale "plan to migrate" rows pointing at local /opt/stacks/arr-stack.
- n8n: local (DB on CT 113), not UNAS.
- Garage: metadata is SQLite (not LMDB); keep off NFS; refreshed bucket
  table with real sizes (82 GB, mostly WAL-G PG backups).
- Marked sunsets: karakeep, memos, litellm, daytona.
- crawl4ai: correct name mcp-crawl4ai, no mounts, cache-growth TODO.
- Added ZFS snapshot note: refquota hides snapshot bloat from container df;
  pre-tier1-backups snapshot held 97.9 GB.
2026-07-15 11:15:53 +02:00

12 KiB

Volume Mounts — NUC 14 Docker Stacks

Every bind mount and named volume across all running containers. Last updated: 2026-07-15 (live audit during CT 104 disk-full incident; reconciled with storage.md).

Legend

Column Meaning
Type bind = host directory, volume = docker named volume, tmpfs = memory
Source Host path (bind) or volume name (volume)
Container Mount point inside container
UNAS /mnt/pve/unas/services/ target (migrated or planned)

Infrastructure

Arcane — DECOMMISSIONED 2026-05-26

Replaced by Portainer. Compose renamed /opt/stacks/arcane/docker-compose.yml.DECOMMISSIONED-2026-05-26; container not running. Its data was local (/opt/stacks/arcane/data), never UNAS — the earlier " Migrated to services/arcane" row was wrong.

Dozzle — dozzle

Type Source Container UNAS
bind /opt/stacks/dozzle/dozzle_data /data (optional, ephemeral)
bind /var/run/docker.sock /var/run/docker.sock

Homepage — homepage

Type Source Container UNAS
bind /opt/stacks/homepage/config /app/config (keep in stack dir)
bind /opt/stacks/homepage/icons /app/public/icons (keep in stack dir)
bind /var/run/docker.sock /var/run/docker.sock

Security

Pocket ID — pocketid

CT 110, not CT 104. Pocket-ID migrated off CT 104 to its own LXC on 2026-05-20.

Type Source Container Notes
bind /opt/stacks/pocketid/data /app/data Local zfs on CT 110 — no UNAS mount

Vaultwarden — vaultwarden

Type Source Container UNAS
bind /mnt/pve/unas/services/vaultwarden /data Already on UNAS
bind /etc/localtime /etc/localtime
bind /etc/timezone /etc/timezone

Media — Immich

Immich Server — immich_server

Type Source Container UNAS
bind /mnt/pve/unas/services/immich/encoded-video /usr/src/app/upload/encoded-video Already on UNAS
bind /mnt/pve/unas/services/immich/profile /usr/src/app/upload/profile Already on UNAS
bind /mnt/pve/unas/services/immich/thumbs /usr/src/app/upload/thumbs Already on UNAS
bind /mnt/pve/unas/media/images /usr/src/app/upload Already on UNAS
bind /mnt/pve/unas/backup/immich /usr/src/app/upload/backups Already on UNAS
volume 7d25f4ac... (anonymous) /data (unknown, check)

Immich ML — immich_machine_learning

Type Source Container UNAS
volume immich_model-cache /cache (cache, regenerable)
bind /dev/bus/usb /dev/bus/usb

Immich Postgres — immich_postgres

Type Source Container UNAS
bind /opt/stacks/immich/postgres /var/lib/postgresql/data Plan: immich/db

Media — Downloads / Arr Stack

Fully on UNAS — verified running 2026-07-15. SQLite configs live on services/arr-stack/ and work fine over NFSv3 (low write rate). Library + downloads on the media/ share so imports hardlink within one export. Radarr/Sonarr are not deployed. All behind gluetun VPN. The old local /opt/stacks/arr-stack/media (27 GB) was a pre-migration copy — deleted 2026-07-15.

RDTClient — rdtclient

Type Source Container UNAS
bind /mnt/pve/unas/services/arr-stack/rdtclient/config /data/db On UNAS (SQLite)
bind /mnt/pve/unas/media/Torrents /data/downloads On UNAS

Prowlarr — prowlarr

Type Source Container UNAS
bind /mnt/pve/unas/services/arr-stack/prowlarr /config On UNAS (SQLite config)

Audiobookshelf — audiobookshelf

In compose; config on services/arr-stack/audiobookshelf, media on the media/ share.

Type Source Container UNAS
bind /mnt/pve/unas/services/arr-stack/audiobookshelf /config On UNAS
bind /mnt/pve/unas/media/audiobooks /audiobooks On UNAS
bind /mnt/pve/unas/media/ebooks /ebooks On UNAS
bind /mnt/pve/unas/media/podcasts /podcasts On UNAS

ShelfArr — shelfarr

Type Source Container UNAS
bind /mnt/pve/unas/services/arr-stack/shelfarr/storage /rails/storage On UNAS (SQLite)
bind /mnt/pve/unas/media/audiobooks /audiobooks (shared)
bind /mnt/pve/unas/media/ebooks /ebooks (shared)
bind /mnt/pve/unas/media/Torrents /downloads (shared)

Flaresolverr — flaresolverr

Type Source Container UNAS
bind /var/lib/flaresolver /config (cache, regenerable)

AI Stack

LiteLLM — SUNSET 2026-05-26

Replaced by Bifrost (ai.nuclide.systems). Service block commented out in /opt/stacks/ai/docker-compose.yml; litellm-config retained as history only. LiteLLM DB container removed.

LobeHub — DECOMMISSIONED 2026-05-26

LobeChat compose renamed .DECOMMISSIONED-lobehub-2026-05-26.yml. Volumes below are orphaned — clean up after confirming no data needed.

Type Source Container UNAS
bind /opt/stacks/ai/lobehub/data /var/lib/postgresql/data 🗑️ orphaned — decommissioned

LobeHub Redis — DECOMMISSIONED 2026-05-26

Type Source Container UNAS
volume nuc-ai-core_redis_data /data 🗑️ orphaned — decommissioned

LobeHub RustFS — DECOMMISSIONED 2026-05-26

Type Source Container UNAS
volume nuc-ai-core_rustfs-data /data 🗑️ orphaned — decommissioned

SearXNG — searxng

Type Source Container UNAS
bind /opt/stacks/ai/searxng /etc/searxng (keep in stack dir)
volume bb5bb182... (anonymous) /var/cache/searxng (cache, regenerable)

SearXNG Redis — redis-searxng

Type Source Container UNAS
volume f9c3c386... (anonymous) /data (ephemeral, stay)

SAIA Image Proxy — nuc-ai-core-saia-image-proxy-1

Type Source Container UNAS
bind /opt/stacks/ai/saia-image-proxy /app (keep in stack dir)

Crawl4AI — mcp-crawl4ai

docker run MCP client (Bifrost) on ai-internal, no persistent mounts. Cache lives in the container writable layer (/home/appuser/.crawl4ai, SQLite) and grew to ~40 GB before the 2026-07-15 reset. Recreated with --shm-size 1g. TODO: bind-mount .crawl4ai to a capped local dir or purge periodically — it refills the disk otherwise.


Documents

Paperless-ngx Webserver — paperless-ngx-webserver-1

Type Source Container UNAS
bind /mnt/pve/unas/media/documents/public/paperless-ngx/consume /usr/src/paperless/consume Already on UNAS
bind /mnt/pve/unas/media/documents/public/paperless-ngx/export /usr/src/paperless/export Already on UNAS
bind /mnt/pve/unas/media/documents/public/paperless-ngx/library /usr/src/paperless/media Already on UNAS
volume paperless-ngx_data /usr/src/paperless/data Plan: paperless-ngx/data

Paperless-ngx DB — paperless-ngx-db-1

Type Source Container UNAS
volume paperless-ngx_pgdata /var/lib/postgresql/data Plan: paperless-ngx/pgdata

Paperless-ngx Broker — paperless-ngx-broker-1

Type Source Container UNAS
volume paperless-ngx_redisdata /data (ephemeral, stay)

Paperless AI — paperless-ai

Type Source Container UNAS
bind /mnt/pve/unas/services/paperless-ai /app/data Already on UNAS

Productivity & Bookmarks

Memos + Karakeep — SUNSET 2026-07-10

Both fully wiped (service, containers, local + UNAS data, Postgres DB, Traefik routes, OIDC clients). See CHANGELOG and sunset-karakeep-memos. Do not restart. One residual: orphan Garage memos bucket needs a repair pass.


Automation

n8n — n8n

Data is local, not UNAS — reverted after a failed PG-migration attempt. The actual DB is shared-postgres (CT 113); .n8n holds config/creds only. A stale UNAS copy at services/n8n may linger.

Type Source Container Notes
bind /opt/stacks/n8n/data /home/node/.n8n 🗄️ Local NVMe
bind /opt/stacks/n8n/hooks.js /home/node/hooks.js (keep in stack dir)

DevOps

Daytona — DECOMMISSIONED 2026-05-23

Never fully deployed; compose renamed .DECOMMISSIONED-2026-05-23. Orphaned daytona-minimal_db_data volume was cleaned up (verified 2026-05-22).


Tracking

Traccar — traccar

Type Source Container UNAS
bind /mnt/pve/unas/services/traccar/data /opt/traccar/data Already on UNAS
bind /mnt/pve/unas/services/traccar/logs /opt/traccar/logs Already on UNAS
bind /mnt/pve/unas/services/traccar/traccar.xml /opt/traccar/conf/traccar.xml Already on UNAS

VPN

Gluetun — vpn_gluetun

Type Source Container UNAS
bind /mnt/pve/unas/services/gluetun/data /gluetun Already on UNAS

Shared Infrastructure

Shared PostgreSQL — shared-postgres

Type Source Container Notes
volume shared-db_shared-pgdata /var/lib/postgresql/data 🗄️ Local NVMe (not NFS)

Garage S3 — garage

Moved off NFS to local zfs on 2026-05-19 after a WAL-G outage. Keep local — metadata is SQLite (corrupts over NFS) and it now stores WAL-G backups for the whole PG fleet. See storage.md for bucket breakdown.

Type Source Container Notes
bind /opt/stacks/shared-db/garage/data /var/lib/garage/data S3 object data — local NVMe (82 GB, mostly WAL-G)
bind /opt/stacks/shared-db/garage/meta /var/lib/garage/meta S3 metadata (SQLite, db_engine = sqlite) — local NVMe

Stacks Not Running (Compose Config Only)

Streamio — streamio

Type Source Container UNAS
bind /mnt/pve/unas/services/stremio /root/.stremio-server Already on UNAS

Qdrant — qdrant_scientific

Type Source Container UNAS
bind /opt/stacks/qdrant/qdrant_storage /qdrant/storage Plan: qdrant/

Summary: Migration Status (reconciled 2026-07-15)

Status Count Services
On UNAS 8 gluetun, immich*(4 media dirs), paperless-ai, stremio, traccar*(3), vaultwarden, paperless-docs*(3), coder
On UNAS incl. SQLite configs 1 arr-stack (prowlarr, rdtclient, shelfarr, audiobookshelf + media/downloads)
🔷 Shared infrastructure (local) 2 shared-postgres (local volume), garage (local NVMe, SQLite meta — keep local)
🗄️ Reverted to local 2 n8n (DB on CT 113), traccar data-dir
📋 Own CT, local only 1 pocketid (CT 110, no UNAS)
Phase 2 planned (PG consolidation) 2 immich → shared-postgres, paperless → shared-postgres
🗑️ Sunset / decommissioned many karakeep + memos (2026-07-10); litellm, mcp-gateway, arcane, lobehub*(3), homepage (2026-05-2x); daytona (2026-05-23)
📋 Keep local ~4 dozzle, searxng-config, saia-image-proxy, flaresolverr
🧠 Cache (stay) ~4 immich_model-cache, paperless-ngx redis, searxng-redis, mcp-crawl4ai writable layer