Proxmox

Is a Mini PC Enough for a Homelab? How Many VMs Each Tier Runs

Short answer: yes. A mini PC runs a real homelab. The question that actually matters is how many VMs and LXCs each tier holds, and that is set by RAM first, disk IO second, the NIC third, and CPU almost never. The figures below come off live Proxmox VE nodes in June 2026.

Original content from computingforgeeks.com - post 169157

This mini PC homelab guide maps three tiers to realistic guest counts, names the wall you hit first, and tells you the few cases where a mini PC genuinely is not enough. If you have already decided to buy, jump to the best mini PC picks for a homelab; this page is the math behind that choice.

The short answer

For the vast majority of homelabs, a mini PC is enough. People assume the limit is CPU. It almost never is. At homelab scale a 4-core to 8-core box sits near idle most of the day. The order you actually run out of resources is:

  1. RAM. The hard wall. You cannot safely overcommit it for real workloads.
  2. Disk IO. A single consumer NVMe gets random-IO starved once a dozen VMs all want fsync at once.
  3. NIC. 1GbE caps storage and backup traffic well before CPU breaks a sweat.
  4. CPU. Last, and rarely, at homelab scale.

Here is what idle actually looks like on a real node. This is a production Proxmox host, an 8-core box with 64GB of RAM:

nproc; cat /proc/loadavg; free -h

Eight cores, load barely above zero, and just over 10GB of 62GB in use while several guests run:

8
0.07 0.14 0.09 1/402 1115073
               total        used        free      shared  buff/cache   available
Mem:            62Gi        10Gi        49Gi        69Mi       2.8Gi        52Gi
Swap:          8.0Gi          0B       8.0Gi

CPU is asleep. RAM is the number to watch. That is the whole story in one screen.

By tier

Three tiers cover almost every mini PC people put Proxmox on. The counts below assume a typical mix: lightweight services (a reverse proxy, Pi-hole, an Uptime Kuma, a Gitea), plus a couple of heavier guests. LXC containers are far cheaper than full VMs, so the two columns differ a lot.

TierTypical specIdle LXCsLight VMs (1-2GB)What it comfortably holds
Entry4-core N100/N150, 16GB, 1x NVMe, 1GbE15 to 254 to 6A self-hosting stack: Pi-hole, reverse proxy, a wiki, a small DB, one Docker host VM
Mid6-8 core Ryzen, 32GB, NVMe, 2.5GbE30 to 508 to 12The above plus a 3-node k3s in LXC, a media stack, a monitoring stack, room to experiment
High8+ core (MS-01 class), 64GB, dual NVMe, 2.5/10GbE60 to 100+15 to 25Nested labs, a full Kubernetes cluster, a TrueNAS VM, several heavy services at once

Above the high tier sit the 96GB and 128GB unified-memory boxes (Ryzen AI Max+ class). Those stop being “homelab nodes” and start being single-box clusters or local-AI machines. For a pure homelab they are overkill on RAM and still single-NVMe on IO, so the guest ceiling rises with RAM but the IO wall does not move.

These ranges come off a real node, not a spreadsheet. Listing the VMs on the node shows 29 defined with 5 running right now; the output below is trimmed to a few rows:

qm list

Each line is one VM, its assigned RAM, and its boot disk. Note the assigned memory column, that is the number you budget against:

      VMID NAME                 STATUS     MEM(MB)    BOOTDISK(GB)
       117 leap16-lab           running    6144              50.00
       141 ubuntu-2604-lab      running    8192              20.00
       165 rocky-10-lab         stopped    8192              40.00
       801 ubuntu-template      stopped    2048              20.00
      8822 mint-template        stopped    4096              40.00

Stopped guests cost zero RAM. Only running ones draw against the 64GB budget. That is why the LXC counts run so high: a stopped or idle container is nearly free, while a running VM with 8GB assigned eats 8GB whether it uses it or not (unless you balloon it, see below).

LXC vs VM density

The single biggest density lever is choosing LXC over a full VM where you can. A container shares the host kernel, so an idle Pi-hole or Nginx LXC sits at 30 to 80MB of real RAM. A full VM for the same job reserves its entire assigned memory up front.

Run the lightweight, single-purpose services as LXC. Reserve full VMs for the things that genuinely need their own kernel: a Kubernetes node, a TrueNAS instance, anything doing PCI passthrough, or any OS that is not Linux. Done right, a 32GB box runs dozens of LXCs and still has headroom for three or four real VMs. If you are new to the split, the guide on running Debian and Ubuntu in an LXC container walks the practical difference.

Where it breaks

RAM is the wall, and it is a hard one. You can thin-provision disk and overcommit CPU, but you cannot hand out 80GB of guest RAM on a 64GB box and expect real workloads to survive. The kernel will swap, then OOM-kill, then take a guest down with it. Ballooning and KSM buy headroom, not magic.

KSM merges identical memory pages across VMs (great when you run ten copies of the same OS). On a lightly loaded node with varied guests, it merges almost nothing. Reading the counter on a real host shows zero pages shared right now:

cat /sys/kernel/mm/ksm/pages_sharing

Zero, because nothing is under enough pressure to bother merging:

0

So treat KSM and ballooning as a 10 to 20% cushion on memory-similar guests, not as a way to double your VM count. Budget RAM as if neither existed and you will not get burned.

Disk IO is the second wall. One consumer NVMe is fast in a straight line but collapses on random writes when a dozen VMs all fsync at once. That is exactly what kills snapshot-heavy or database-heavy labs on a single drive. The fix is a second NVMe (or a PLP enterprise drive for the sync-write path), which is why the high tier always has two slots. The deep dive on NVMe vs SATA for a Proxmox datastore has the real fsync numbers, and the SSD and NVMe picks for a homelab cover which drives survive it.

A 1GbE NIC is the third wall, and it only bites on storage and backup traffic. Moving a VM, restoring a backup, or running anything over NFS/iSCSI saturates 1GbE long before the CPU notices. 2.5GbE is the homelab baseline now for a reason. CPU comes dead last; at homelab scale you will hit all three of the above before cores become the problem.

When a mini PC is NOT enough

A short list. If your build hits one of these, a mini PC is the wrong tool:

  • Large ZFS or NAS arrays. Mini PCs have no drive bays. Four or more spinning disks in a pool means a NAS or a tower. See the best NAS picks for self-hosting and Plex.
  • GPU passthrough for local AI. No room for a discrete card. A unified-memory box or a GPU server is the path.
  • Sustained 10GbE storage. Most mini PCs top out at 2.5GbE; only the MS-01 class has SFP+.
  • More than 128GB of RAM. That is the hard ceiling on current mini PC platforms.
  • True high availability across 3 nodes. Doable with three mini PCs, but shared storage and quorum push you toward a NAS plus real switching.
  • Heavy Plex transcoding. Plex hardware transcoding is far smoother on Intel QuickSync than on AMD, so for several simultaneous 4K transcodes an Intel iGPU is the safe bet (Jellyfin copes better with AMD via VA-API).

Everything else, which is most of what people actually self-host, fits a mini PC fine.

How to size your build

Size from the workload, not from a spec sheet. The drivers that set the tier:

  • RAM is the sum of every running guest’s assigned memory plus 2 to 4GB for the host. Stopped guests are free. Add 20% headroom and round up to the next tier.
  • Disk IO: one NVMe is fine until you run more than a handful of write-active VMs. Plan a second slot if you will run databases or snapshot heavily.
  • NIC: 2.5GbE if you move VMs or back up over the network. 1GbE only if everything stays local.
  • CPU: 4 cores runs a real stack; 6 to 8 gives breathing room for nested labs. Cores are the cheapest part of the decision.

Real example: the production node above is an 8-core box with 64GB. With five guests running it sits at just over 10GB used and a load of 0.1. That same box would comfortably host a couple dozen LXCs and a dozen light VMs before RAM, not CPU, told it to stop.

Quick reference

Match your guest count to a tier, then pick the box.

You want to runBuy this tierFirst wall you will hit
A handful of self-hosted servicesEntry: 4-core, 16GB, 1x NVMeRAM
A full stack plus a k3s lab and monitoringMid: 6-8 core, 32GB, NVMe, 2.5GbERAM, then disk IO
Nested labs, a real K8s cluster, a TrueNAS VMHigh: 8+ core, 64GB, dual NVMe, 2.5/10GbEDisk IO, then NIC
Local AI with a big model in memory96-128GB unified boxSingle-NVMe IO (RAM is no longer the wall)
4+ spinning disks, heavy Plex, real HANot a mini PC. Get a NAS or tower.Drive bays

Picked your tier? The tested rundown of mini PCs for a homelab and Proxmox has the actual boxes, with real IOMMU and NIC notes for each.

Keep reading

Install KVM and Virt-Manager on Arch Linux Virtualization Install KVM and Virt-Manager on Arch Linux Virsh Commands Cheatsheet for KVM Virtual Machine Management KVM Virsh Commands Cheatsheet for KVM Virtual Machine Management Install VirtIO Drivers on Windows Server 2025 / Windows 11 KVM Install VirtIO Drivers on Windows Server 2025 / Windows 11 How Much RAM Do You Need for Proxmox and a Homelab Proxmox How Much RAM Do You Need for Proxmox and a Homelab Best UPS for a Homelab and NAS Storage Best UPS for a Homelab and NAS How to Migrate Virtual Machines Between Proxmox Servers Proxmox How to Migrate Virtual Machines Between Proxmox Servers

Leave a Comment

Press ESC to close