Creating Your First Proxmox VM: A Complete Walkthrough

Create a full virtual machine on Proxmox VE from scratch — upload an ISO, configure the VM wizard the right way, install the OS, and add the QEMU guest agent for clean shutdowns and live stats.

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.

Creating Your First Proxmox VM — ISO to Guest Agent, the Right Way — video walkthrough
Creating Your First Proxmox VM — ISO to Guest Agent, the Right Way — video walkthrough

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.

Proxmox VE host — KVM / QEMUpvelab04 · Ryzen 5 2400G · 16 GBVirtual Machine (guest OS + own kernel)vCPUtype: hostRAMballoonedVirtIO diskscsi0 · local-lvmVirtIO NICnet0 · vmbr0OVMF (UEFI)+ EFI diskq35 machinemodern chipsetQEMU agentclean shutdownnoVNC consoleinstall screen

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.

1Download the OS ISO2 min

Grab the ISO you want to install. For a first VM, Ubuntu Server or Debian is a friendly choice:

On your workstation — download Ubuntu Server

curl -LO https://releases.ubuntu.com/24.04/ubuntu-24.04-live-server-amd64.iso
2Upload it to Proxmox3 min

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:

Copy an ISO onto the node via scp

scp ubuntu-24.04-live-server-amd64.iso \
root@10.0.0.73:/var/lib/vz/template/iso/
Which storage holds ISOs

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.

1General tab1 min
  • 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
2OS tab1 min
  • 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.
3System tab — the one that matters most2 min

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)
OVMF needs an EFI disk

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.

4Disks tab1 min
  • Bus/Device: SCSI (pairs with the VirtIO SCSI controller from the last tab)
  • Storage: local-lvm for 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
5CPU tab1 min
  • Cores: 2 to start
  • Type: host — passes your physical CPU’s full instruction set through for the best performance
Why CPU type: host

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.

6Memory tab1 min
  • Memory: 4096 MiB to start
  • Leave Ballooning enabled — it lets the host reclaim RAM the guest isn’t using, which matters on a memory-tight homelab node.
7Network tab1 min
  • 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

1Start the VM and open the console1 min

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.

2Run through the installer10–20 min

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.

Remove the ISO after install

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.

1Install the agent in the guest2 min

From the VM’s console (or SSH into it):

Inside the guest — install and enable the agent

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.

2Confirm Proxmox sees it1 min

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.

What the agent actually buys you

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:

Create the same VM with qm

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:


Recommended hardware for running VMs:

This post contains Amazon affiliate links (tag: buildahomelab-20). I earn a small commission on qualifying purchases at no extra cost to you.