Infrastructure
← Home
Proxmox host running Debian 12 Bookworm with six LXC containers and two ZFS pools.
Storage Pools
| Name | Type | Total | Used | Notes |
|---|---|---|---|---|
tank |
ZFS | 3.77 TB | ~23% | Primary data — host path /tank/, mounted as /mnt/tank/ inside containers |
local-ssd |
dir | 239 GB | ~64% | SSD (PCT 102 rootfs) |
local-lvm |
lvmthin | 354 GB | ~17% | LVM thin (PCT 108 rootfs) |
local |
dir | 98 GB | ~34% | Proxmox local storage |
ZFS ACLs: tank/appdata has acltype=posixacl. Use setfacl when a non-owner user needs access.
LXC Mount Points
PCT 101 (downloads — 192.168.2.190)
| Mount | Host | Container |
|---|---|---|
| mp2 | /tank/appdata |
/mnt/tank/appdata |
PCT 102 (media-core — 192.168.2.191)
Privileged container. Full ZFS tank pool mounted.
| Mount | Host | Container |
|---|---|---|
| mp0 | /tank/ |
/mnt/tank/ |
Media library root: /mnt/tank/media/content/ — movies, tv, music, books, audiobooks, podcasts, comics, roms
PCT 104 (documents — 192.168.2.105)
Privileged container. Only /tank/media and /tank/appdata/nextcloud are mounted — not the full tank.
| Mount | Host | Container | Notes |
|---|---|---|---|
| mp0 | /tank/media |
/mnt/tank/media |
Media library |
| mp1 | /mnt/media-storage |
/mnt/media-storage |
Separate media storage |
| mp2 | /tank/appdata/nextcloud |
/mnt/tank/appdata/nextcloud |
Nextcloud data (migrated 2026-05-25) |
| lxc.mount.entry | /tank/docker |
tank/docker |
Docker storage on ZFS, not rootfs |
PCT 107 (debian — 192.168.2.81)
| Mount | Host | Container |
|---|---|---|
| mp1 | /tank/appdata/nextcloud/data/data/nextcloud/files/obsidian |
/mnt/obsidian |
PCT 108 (network — 192.168.2.82)
Swarm manager. Appdata on rootfs (local-lvm), NOT ZFS. Portainer compose files are on ZFS.
| Mount | Host | Container |
|---|---|---|
| mp0 | /tank/ |
/mnt/tank/ |
PCT 109 (ai — 192.168.2.83)
Privileged container. lxc.apparmor.profile: unconfined (required for docker build). Not a Swarm node.
| Mount | Host | Container | Notes |
|---|---|---|---|
| mp0 | /tank/appdata/nextcloud/data/data/nextcloud/files/obsidian |
/mnt/obsidian |
Obsidian vault (read-write) |
GPU Passthrough
NVIDIA GPU passthrough is configured for PCT 102, 104, and 109 via lxc.cgroup2.devices.allow and lxc.mount.entry in /etc/pve/lxc/<vmid>.conf.
PCT 102: GTX card, full media stack (Jellyfin transcoding, Immich ML) PCT 104: GTX 1050 — Immich machine-learning (CUDA) PCT 109: NVIDIA GPU — Whisper transcription
nvidia-container-toolkit is installed in each. Docker default runtime set to nvidia in /etc/docker/daemon.json.
To enable GPU in a container, set:
environment: NVIDIA_VISIBLE_DEVICES: all NVIDIA_DRIVER_CAPABILITIES: all
After a Proxmox host driver upgrade: update versioned lib filenames in /etc/pve/lxc/<vmid>.conf and reboot the affected container.
Management Scripts (Proxmox host /root/)
| Script | Purpose |
|---|---|
create-app-folders.sh |
Create /tank/appdata/<app> dirs with 1000:1000 |
setup-lxc-bind-mounts.sh |
Add ZFS bind mounts to LXC containers (DRY_RUN=false to apply) |
create_lxc.sh <CTID> <HOST> <IP> |
Provision new Ubuntu 22.04 LXC |
migrate-appdata-to-zfs.sh |
Migrate appdata from rootfs to ZFS dataset |
