Almost everything I run on my homelab lives in an LXC container — they’re light, fast, and cheap on RAM. But containers share the host kernel, which means the moment you need a different kernel, a non-Linux OS, custom kernel modules, or hard isolation, you reach for a full virtual machine instead.
This is the complete walkthrough for creating your first Proxmox VM: uploading an installation ISO, configuring the create-VM wizard with the settings that actually matter, installing the OS, and wiring up the QEMU guest agent so the VM shuts down cleanly and reports its stats back to Proxmox.
VM or container? The 20-second version
Proxmox gives you two kinds of guest. This post is about VMs; here’s the quick decision:
| Use a VM when you need | Use an LXC container when you want |
|---|---|
| A non-Linux OS (Windows, BSD, etc.) | Minimal RAM/disk overhead |
| A different kernel or kernel modules | Near-instant start/stop |
| PCIe / GPU passthrough | Dozens of lightweight services |
| Hard isolation between tenants | A pure-Linux workload |
If your workload is “a Linux service in its own box,” a container is usually the better fit — see the LXC networking guide. If you ticked anything in the left column, read on. For a deeper performance breakdown with benchmarks, IKUS Soft’s KVM vs LXC comparison shows LXC achieving 99–100% of bare-metal CPU throughput versus ~97–99% for KVM — the gap is real but small on modern hardware.
The virtual hardware you’re about to build
Before clicking through the wizard, it helps to picture what a VM actually is: a set of virtual devices the host presents to a guest OS that thinks it’s running on real hardware.
Every one of those boxes is a choice in the wizard. The rest of this guide walks them in order.
Task 1: Upload an installation ISO
A VM boots from an ISO the same way a physical machine boots from a USB stick. First, get the ISO onto a Proxmox storage that accepts disk images.
Grab the ISO you want to install. For a first VM, Ubuntu Server or Debian is a friendly choice:
curl -LO https://releases.ubuntu.com/24.04/ubuntu-24.04-live-server-amd64.iso
In the web UI: select a node, open a storage that supports ISO image content (the default local does), click ISO Images → Upload, and pick your file.
Prefer the command line? Copy it straight into the ISO directory:
scp ubuntu-24.04-live-server-amd64.iso \
root@10.0.0.73:/var/lib/vz/template/iso/
Only storages with the “ISO image” content type can hold installer ISOs — that’s the local (directory) storage by default, at /var/lib/vz/template/iso/. If your upload button is greyed out, the storage you selected doesn’t allow ISO content. See the storage guide for what each storage type holds.
Task 2: Create the VM
Click Create VM (top right of the Proxmox UI). The wizard has seven tabs — here’s what to set on each, and why.
- Node: the host to run on
- VM ID: the default (100, then 101…) is fine — this is the VM’s unique number across the cluster
- Name: a hostname-friendly label like
web01
- ISO image: select the ISO you just uploaded
- Type / Version: set Linux / 6.x - 2.6 Kernel for a modern Linux guest (or the matching Windows version). This only tunes sensible defaults — it doesn’t restrict what installs.
These defaults are worth changing:
- Machine:
q35— the modern chipset with a proper PCIe bus (needed for passthrough later) - BIOS:
OVMF (UEFI)— matches how real hardware boots today - Add EFI Disk: tick it (appears once you pick OVMF), storage
local-lvm— UEFI needs somewhere to store its variables - SCSI Controller:
VirtIO SCSI single— the fast paravirtualized controller - Qemu Agent: tick it (you’ll install the matching package in Task 4)
If you choose OVMF (UEFI) but forget to add the EFI disk, the VM has nowhere to persist boot variables and may fail to boot or forget its boot order. The checkbox is right there in the same tab — don’t skip it.
- Bus/Device:
SCSI(pairs with the VirtIO SCSI controller from the last tab) - Storage:
local-lvmfor fast local disk - Disk size: 32 GB is comfortable for a server; grow later if needed
- Discard: tick it, and tick SSD emulation if your backing store is an NVMe/SSD — this lets the guest TRIM unused blocks back to the host
- Cores:
2to start - Type:
host— passes your physical CPU’s full instruction set through for the best performance
The default kvm64 CPU type hides newer instruction sets for maximum live-migration compatibility. On a homelab where all nodes are the same chip (or you rarely migrate), host is noticeably faster because the guest can use AES-NI, AVX, and friends. If you run a mixed-CPU cluster and migrate often, pick a named model instead.
- Memory:
4096MiB to start - Leave Ballooning enabled — it lets the host reclaim RAM the guest isn’t using, which matters on a memory-tight homelab node.
- Bridge:
vmbr0(your main Linux bridge) - Model:
VirtIO (paravirtualized)— the fastest virtual NIC
Click Next → Finish. Leave “Start after created” unticked so you can review the config first.
Task 3: Install the operating system
Select the new VM in the sidebar, click Start, then Console. Proxmox opens a noVNC session right in the browser — this is your virtual monitor. The VM boots from the ISO into the OS installer.
Install the OS as you would on bare metal. For the disk step, the installer sees the single VirtIO disk you created — use the whole thing. When the installer finishes and asks to reboot, let it.
After the OS is installed, detach the installer ISO or the VM may boot back into the installer. In Hardware → CD/DVD Drive, set it to Do not use any media (or qm set <vmid> --ide2 none). Then check Options → Boot Order puts the disk first.
Task 4: Install the QEMU guest agent
You ticked the Qemu Agent box in the wizard — that tells Proxmox to try to talk to an agent. Now install the agent inside the guest so there’s something to talk to.
From the VM’s console (or SSH into it):
apt update && apt install -y qemu-guest-agent
systemctl enable --now qemu-guest-agent
On Debian/Ubuntu the service starts talking to the host immediately. On some distros you need one VM reboot for the virtio-serial channel to appear.
Back in the Proxmox UI, the VM Summary page now shows the guest’s real IP addresses, and Shutdown performs a clean ACPI shutdown instead of pulling the virtual power cord.
Three concrete things: (1) graceful shutdown/reboot from the UI and CLI, (2) the guest’s IP addresses shown in the Summary, and (3) filesystem freeze during snapshots and backups so the resulting image is crash-consistent. It’s a two-minute install that makes every future backup safer — never skip it.
The whole thing from the CLI
Once you’ve done the wizard a few times, the command line is faster. This creates the same VM in one shot:
qm create 100 \
--name web01 \
--machine q35 --bios ovmf --efidisk0 local-lvm:0 \
--ostype l26 \
--cpu host --cores 2 --memory 4096 --balloon 1 \
--scsihw virtio-scsi-single \
--scsi0 local-lvm:32,discard=on,ssd=1 \
--net0 virtio,bridge=vmbr0 \
--ide2 local:iso/ubuntu-24.04-live-server-amd64.iso,media=cdrom \
--boot order='ide2;scsi0' \
--agent enabled=1
qm start 100
Every flag maps directly to a wizard field you just filled in.
What’s next
You now have a working VM with fast VirtIO devices, UEFI boot, and a guest agent. This is the first post in a short series on Proxmox VMs — upcoming guides cover cloud-init templates (clone a ready-to-go Ubuntu VM in seconds), VirtIO drivers for Windows guests, and a deeper LXC vs VM decision guide.
In the meantime, protect your new VM: point Proxmox Backup Server at it so the guest-agent-frozen snapshots land somewhere safe.
Related posts:
- Running Ollama on a 3-Node Proxmox LXC Cluster — the container side of Proxmox, for comparison
- Proxmox LXC Networking: Bridges, VLANs, and Static IPs — the
vmbr0bridge your VM’s NIC attaches to - Proxmox Storage Guide: LVM, ZFS, NFS, and Ceph — where VM disks and ISOs live
- Proxmox Backup Server: Automated Container Backups — back up your VM with consistent snapshots
- Proxmox Security Hardening: SSH Keys, Firewall, and More — harden the host running your VMs
- Building a 4-Node Proxmox Cluster on HP EliteDesk Mini PCs — the hardware underneath it all
- Proxmox VM vs LXC: When to Use Each — the decision guide for whether a workload should be a VM at all
Recommended hardware for running VMs:
- DDR4 SO-DIMM 16GB kit — VMs are hungrier than containers; 16 GB per node gives real headroom
- Samsung 970 Evo Plus NVMe 500GB — fast local-lvm storage for VM disks
- HP EliteDesk 705 G4 mini — the node running these VMs (~$120 refurbished)
This post contains Amazon affiliate links (tag: buildahomelab-20). I earn a small commission on qualifying purchases at no extra cost to you.