Why I like LXC over VM for my homeserver
As I said the other day Proxmox is a godsend for casual home server. Its free, its robust, it has everything that a casual home server admin needs. Now Proxmox gives you two distinct ways to run your services: full-blown Virtual Machines (VMs) and Linux Containers (LXCs).
When I first set up my proxmox node off of an old mini PC with an Intel n5105 and 8GB RAM, I naturally defaulted to VMs for everything, mostly because that is what I knew from my times of administering VMware esxi and Windows Hyperv. It was straight forward, download a Ubuntu Server ISO, click through the installer, give it 2GB of RAM (my server had only 8gb ram, this is the most I could afford for each vm), and repeat. But after deploying up my 4th VM just to run basic stuff like Pi-hole, Bookstack, and Plex, my server started fighting for its life.
I thought, well this is what I have and this is what I have to manage with, so I deleted 2 VMs and installed my applications on just the other 2 VMs using docker containers, giving each VM 3GB of ram. It worked well for a long time, but then I started getting itch of installing more applications, There were unlimited cool things people were showing off at https://www.reddit.com/r/selfhosted/ and I have a lousy server with 2 VMs which was taking up all the resources my mini pc had.
That was the moment I finally thought I will try LXCs. I have heard about it but had never tried it, I was comfortable with VMs and that is all I knew in terms of virtualization tech. Since then I’ve barely touched standard VMs. For a typical home setup, LXCs aren’t just a viable alternative, they are almost always the better tool for the job.
1. The “Limited Ram” issue
The biggest issue with a modest home server is memory scarcity. And in 2026 you have to sell a kidney to be able to afford decent amount of ram.
When you spin up an Ubuntu VM, you typically have to dedicate at least 2GB to 4GB of RAM to it upfront. Even if your service is idling and only actively using 180MB of memory, the VM’s operating system alone holds onto that chunk of RAM.
LXCs don’t do that. Because an LXC shares the host’s Linux kernel, there is no multiple OS kernel sitting in memory eating resource. If your Pi-hole container needs 80MB of RAM, it consumes roughly 80MB of RAM (A Little more obviously for other important things). You can set memory limits so a random misconfigured container won’t take up all of your precious RAM, and the unused headroom stays available for the rest of the things. Suddenly, that 8GB of ram felt like 32GB
2. Start-up Speed: Instant, and I mean literally instant compared to full boot cycle of a VM.
Rebooting a traditional VM is exactly like booting a physical PC. It goes through whole bios thing, initializes hardware, loads services, and eventually greets you a minute later (that is if you are lucky to have a host server with good CPU).
An LXC starts in literally two to three seconds. You blink and you will lose its start.
For hobbyist, this completely changes how you experiment with new applications. If I want to test a new reverse proxy, spinning up a fresh Debian or Alpine container takes less time than writing a single sentence of this article. If you break something irreparably, nuke the container and create a new one from a template, it literally takes about 30 seconds.
3. Disk Space and Shared Storage Without
I have my home server with a M.2 SSD and more hard disks literally taped to the mini pc using double sided tape, not lying, May be I will add a photo.
With VMs, you typically assign large virtual disk images (like a 32GB or 64GB .qcow2 file). The VM treats this as raw unallocated space, it will format its own filesystem. Moving files between the Proxmox host and the VM would usually requires setting up Samba shares on the VMs, which is another pain on it self, you can mount an external NFS share but I hate NFS so thats a big NO.
LXCs makes managing storage painless:
- Tiny footprints, I mean actually really tiny footprints: A bare Alpine or Debian container template sits around 100MB to 500MB on disk.
- Direct bind mounts: If you have a media folder or a backup drive plugged directly into Proxmox, you can pass that exact directory straight into the container with a single configuration line. There is no network overhead and no fighting with network file permissions between local virtualized machines. Just add mount point like below and you are golden
mp1: /data/ihdd,mp=/data/ihdd
mp2: /data/ehdd/media/Movies,mp=/data/ehdd/media/Movies
mp3: /data/ehdd/media/TVShows,mp=/data/ehdd/media/TVShows
4. Backups and Snapshots Are Lightning Fast
Proxmox Backup Server (PBS) (I will talk about this thing in another article0 and native snapshots work well on both, but container backups are very small compared to VM images. Because you aren’t backing up the whole disk, daily snapshots finish in seconds and take up a fraction of the backup drive space.
Where do I still use VM
LXCs aren’t a magic bullet for every thing, and it has its own limitation:
- Non-Linux OS: I run a Windows 11 Vm for some testing and you need a full blown VM for this, there is no workaround
- Home Assistant: For some reason Home assistant just did not work well for me on LXC, I had to create a VM to run Home assistant, may be I am doing something wrong but it is what it is.
- Tailscale: Same as Home assistant, I could not run Tailscale on an LXC, so a small VM is dedicated to tailscale
For enterprise setups where multiple untrusted clients share the same hardware, the hard virtualization layer of a VM makes total sense.
For someone running a mini pc in a closet or under a desk to host Plex, Adguard, and a personal wiki, VMs are overkill. LXCs give you all the isolation you actually need, without throwing away half your hardware’s performance just to keep the lights on.