Storage Layout
Physical Disks
| Device |
Size |
Mount |
Role |
/dev/sdc |
120GB |
LVM (/) |
Proxmox OS + local-lvm thin pool |
/dev/sdb |
2TB |
$DATA_ROOT |
App configs, media, persistent data |
/dev/sda |
1TB |
$DATA_ROOT/minecraft |
Game server worlds |
Proxmox Storage Pools
| Pool |
Type |
Total |
Path / Config |
local |
dir |
36.8GB |
/var/lib/vz - templates, ISOs, backups |
local-lvm |
lvmthin |
63.1GB |
VG pve, thin pool data on /dev/sdc3 - VG fully allocated (0 free extents) |
data |
dir |
1.83TB |
$DATA_ROOT on /dev/sdb1 - bind-mount data for all LXCs |
minecraft |
dir |
916GB |
$DATA_ROOT/minecraft on /dev/sda1 - game server data |
local-lvm Volume Inventory
| Volume |
Size |
Used by |
vm-100-disk-0 |
8GB |
CT 100 (management) - Komodo + Traefik + Glance + FileBrowser |
vm-101-disk-0 |
4GB |
CT 101 (pihole) - Pi-hole + Unbound |
vm-200-disk-0 |
8GB |
CT 200 (ultrafeeder) - ADS-B feeder stack |
vm-201-disk-0 |
8GB |
CT 201 (iot) - homebridge, zigbee2mqtt, mosquitto |
vm-202-disk-0 |
8GB |
CT 202 (monitoring) - Grafana + Prometheus + pve-exporter |
vm-300-disk-0 |
16GB |
CT 300 (media-arr) - Sonarr, Radarr, Prowlarr, Bazarr, Seerr, Recyclarr, Dispatcharr |
vm-301-disk-0 |
8GB |
CT 301 (media-server) - Jellyfin + Jellystat |
vm-302-disk-0 |
8GB |
CT 302 (media-dl) - qBittorrent + SABnzbd |
vm-400-disk-0 |
8GB |
CT 400 (game-panel) - Pterodactyl panel |
vm-401-disk-0 |
16GB |
CT 401 (minecraft-wings) - Wings + Docker |
vm-600-disk-0 |
4GB |
CT 600 (personal-apps) - Actual Budget |
Thin-allocated: 96GB on a 63.1GB thin pool. LVM thin pools allow overcommit - 63.1GB is the hard limit on actual writes, not on allocated size. Run lvs -a --units g -o lv_name,vg_name,lv_size,data_percent,metadata_percent on the host to check current pool fill.
data Pool Contents
| Path |
Size |
Used by |
$DATA_ROOT/config/management/ |
~2GB |
CT 100 - Komodo, Traefik, Glance, FileBrowser, cloudflared configs |
$DATA_ROOT/config/ultrafeeder/ |
~1GB |
CT 200 - globe_history, graphs1090 |
$DATA_ROOT/config/iot/ |
small |
CT 201 - homebridge, zigbee2mqtt, mosquitto |
$DATA_ROOT/config/monitoring/ |
small |
CT 202 - Grafana + Prometheus data |
$DATA_ROOT/config/media-arr/ |
~1GB |
CT 300 - Sonarr, Radarr, Prowlarr, Bazarr, Seerr, Recyclarr configs |
$DATA_ROOT/config/media-server/ |
~1GB |
CT 301 - Jellyfin metadata and config |
$DATA_ROOT/config/media-dl/ |
small |
CT 302 - qBittorrent + SABnzbd config |
$DATA_ROOT/config/panel/ |
~1GB |
CT 400 - Pterodactyl panel, MariaDB |
$DATA_ROOT/config/minecraft-wings/ |
small |
CT 401 - Wings config |
$DATA_ROOT/config/personal-apps/ |
small |
CT 600 - Actual Budget data |
$DATA_ROOT/media-stack/media/ |
growing |
Shared media library (movies, TV, anime) - written by CT 300, read-only for CT 301 |
$DATA_ROOT/media-stack/torrents/ |
growing |
Active download area - CT 302 writes, CT 300 hardlinks from here |
$DATA_ROOT/media-stack/usenet/ |
growing |
Usenet download area - SABnzbd writes, CT 300 hardlinks from here |
minecraft Pool Contents
| Path |
Used by |
$DATA_ROOT/minecraft/volumes/ |
CT 401 bind-mount - game server world data |
$DATA_ROOT/minecraft/backups/ |
CT 401 bind-mount - Pterodactyl server backups |
Key Takeaways
- local-lvm: 96GB thin-allocated on a 63.1GB pool - overcommit is expected; the pool limit is on actual writes, not allocated size. Run
lvs to check real fill before resizing any rootfs
- Weekly
pct fstrim cron (/etc/cron.d/fstrim-containers, Sundays 03:00) reclaims deleted-but-untrimmed Docker blocks automatically - see cheatsheet
- VG
pve has 0 free extents - local-lvm cannot grow further without adding a new physical disk to the VG
data pool: 1.83TB on $DATA_ROOT - will grow as the media library fills
minecraft pool: 916GB on $DATA_ROOT/minecraft - game server worlds and backups
- Storage rule for new containers: rootfs on local-lvm, persistent data as bind mounts from
data pool
- All container data is under
config/<name>/ - see data layout
- Rootfs resize gotcha: always run
pct fstrim on all containers before resizing a rootfs - if the thin pool is near full, the resize can succeed at the LV-metadata level while the filesystem resize fails on boot. After growing the LV, the offline sequence is: pct stop → e2fsck -f /dev/pve/<vol> → resize2fs /dev/pve/<vol> → pct start