Homelab Sizing and Capacity
Purpose: the current Proxmox host (itg) has roughly six months left before the new homelab is funded. This doc tracks what the fleet actually allocates versus what it actually uses, so the next box is specced from data instead of guesses. The allocation numbers are exact; the usage numbers are a single snapshot taken 2026-08-19 and will be replaced with peak and percentile data once monitoring (issue #2) lands. That distinction matters: these workloads are bursty (Plex transcodes, CI builds, game sessions), so a quiet snapshot understates real need. Treat the usage column as a floor, not a ceiling.
The current host (itg)
- CPU: 2x Intel Xeon E5-2690 v2, 20 cores / 40 threads total @ 3.0 GHz. Old, power-hungry, but plenty of threads.
- RAM: 135 GB.
- Proxmox OS disk (local): 74 GB.
Storage pools:
| Pool | Type | Total | Used | Free | Role |
|---|---|---|---|---|---|
| slow-media | zfspool | 35.8 TB | 33.2 TB (93%) | 2.6 TB | the media library (NFS export) |
| vg-fast | lvm | 4.26 TB | full | - | backs the fast-vmstore thin pool |
| fast-vmstore | lvmthin | 1.65 TB | 1.04 TB (63%) | 606 GB | VM and app disks |
| bootc | dir | 2.61 TB | 85 GB | 2.52 TB | bootc image store |
| local-lvm | lvmthin | 151 GB | 27 GB | 125 GB | misc |
| local | dir | 74 GB | 11 GB | 63 GB | Proxmox OS |
The one pool under real pressure is slow-media at 93% full. Media growth, not VM sprawl, is what forces the storage decision on the next box.
Per-VM allocation vs live usage (snapshot 2026-08-19)
| VMID | Host | vCPU | RAM alloc | RAM used (snap) | OS disk | Data disks | Notes |
|---|---|---|---|---|---|---|---|
| 199 | itg-net-opn | 2 | 6 GB | 5.9 GB (99%) | 32 G | - | OPNsense pet; genuinely uses its RAM |
| 201 | itg-prd-bast | 2 | 4 GB | 0.5 GB (12%) | 32 G | - | bastion |
| 202 | itg-prd-arr | 4 | 12 GB | 2.7 GB (23%) | 32 G | 100 G + 1000 G | 1 TB SAB scratch |
| 203 | itg-prd-mtrx | 4 | 8 GB | 2.0 GB (24%) | 32 G | 200 G | Synapse workers |
| 204 | itg-prd-game | 12 | 32 GB | 5.6 GB (18%) | 32 G | 100 G | bursts hard during sessions |
| 205 | itg-prd-plex | 8 | 16 GB | 1.1 GB (7%) | 32 G | 100 G | RTX 2070 passthrough; bursts on transcode |
| 206 | itg-prd-book | 4 | 8 GB | 3.5 GB (44%) | 34 G | 100 G | |
| 207 | itg-prd-web | 2 | 4 GB | 0.8 GB (19%) | 32 G | - | SWAG |
| 208 | itg-prd-forge | 2 | 4 GB | 1.3 GB (31%) | 34 G | 100 G | the fleet SPOF |
| 209 | itg-prd-run01 | 8 | 16 GB | 3.9 GB (25%) | 32 G | 100 G | CI runner; bursts on builds |
| 210 | itg-prd-run02 | 8 | 16 GB | 2.3 GB (15%) | 32 G | 100 G | CI runner |
| 211 | itg-prd-tail | 2 | 4 GB | 0.6 GB (15%) | 32 G | - | Tailscale subnet router |
| 301 | itg-dev-bootc | 2 | 4 GB | 0.5 GB (14%) | 34 G | - | dev box |
Stopped and not counted: template-fedora (100), template-stream09 (103), coulson (200, being decommissioned).
The totals, and the real constraint
- vCPU: 60 allocated across running VMs against 40 physical threads, so 1.5x overcommit on paper. Live CPU load is low and bursty; nothing is CPU-starved at rest, but runners and transcodes spike.
- RAM: roughly 134 GB allocated against 135 GB physical, essentially 100% committed on paper. But live usage totals only about 31 GB, around 23%. The per-VM allocations are far larger than the workloads actually touch (game reserves 32 GB and uses 5.6; plex reserves 16 and uses 1.1).
The honest read: this box is RAM over-allocated, not RAM-starved. The next homelab should be sized on measured peaks plus headroom, not on these inflated reservations. Measuring those peaks is exactly what issue #2 is for.
What's coming (new demand)
- itg-prd-mktg (in progress): M tier, roughly +4 vCPU / +8 GB / +100 G, for Postiz and Cal.com.
- From the board: Immich (#27, wants a GPU for ML and large storage for photos), self-hosted AI (#33, wants a GPU and real RAM for models), Paperless (#28), the monitoring stack itself (#2), RSS (#30), and more.
- GPU is the interesting axis. Plex already owns the RTX 2070 by passthrough. Immich ML and local LLMs both want GPU too, so the next box likely needs more GPU capacity or deliberate sharing, and if LLMs get serious the constraint becomes VRAM.
Sizing the next box (working notes, refine with monitoring data)
- RAM: real usage is ~31 GB idle today. With bursts plus the photo and AI workloads coming, 128 GB is a comfortable target and 256 GB if local LLMs become a real habit. Do not anchor on the current 134 GB allocation; anchor on measured peaks plus the new services.
- CPU: 40 threads is more than enough at current load. A modern single-socket 16 to 24 core part would match or beat the dual E5-2690 v2 at a fraction of the power and heat, which matters in a COLO.
- GPU: at least one modern card with generous VRAM to cover Plex transcode, Immich ML, and local inference. VRAM is the ceiling if AI matters.
- Storage: media is the driver. slow-media is 33 TB used and climbing toward its 35.8 TB pool; plan the next media pool well past 40 TB, plus fast NVMe for VM and app data (fast-vmstore is 63% used and will keep filling as services land).
- Power and noise: the dual E5-2690 v2 is a space heater. A modern platform cuts idle draw substantially, a real operating-cost win in a colo.
To fill in once monitoring lands (#2)
Replace the single-snapshot usage column above with peak and 95th-percentile CPU and RAM per VM from Prometheus / VictoriaMetrics over a representative window (at least a full week that includes a game session, a CI-heavy day, and a Plex transcode). That is the data that turns "sized on a guess" into "sized on evidence."
Runbooks
The build
- Image Mode & Base
- Storage
- Hostnames & DNS
- Registry
- Actions Runner
- The Pipeline
- Nightly Auto-Deploy
- First Workload
- VSCode Cockpit
- Hugo Auto-Deploy
- Cloudflare & Kobo
- Runner Provisioning
- Tailscale Router
- SWAG & Website
- Split-DNS
- Plex
- Media Library Support
- The Day After
- Self-Hosted Media
- Hypervisor Joins the Fleet
- The Matrix Homeserver
Reference