Windows Server VM on Proxmox with VirtIO Drivers (Complete Guide)

windows server vm proxmox virtio drivers - custom-winvm-featured.png

Installing Windows Server on Proxmox with default settings works, but leaves real performance on the
table: the default emulated IDE disk controller and Intel e1000 network adapter are compatibility fallbacks,
not the fast path. VirtIO is the paravirtualized driver set that lets a Windows guest talk
to Proxmox’s virtual hardware far more efficiently — noticeably faster disk I/O and network throughput,
lower CPU overhead on the host.

The catch: Windows doesn’t ship with VirtIO SCSI drivers built in, so you have to load them manually
during setup, or the installer won’t even see your virtual disk. This guide walks through the complete
process — VM creation, driver injection at install time, remaining guest tools, and QEMU Guest Agent for
clean shutdowns and IP reporting.

Step 1: Why VirtIO Matters

Without VirtIO, Proxmox emulates real hardware — an IDE controller and an Intel e1000 NIC — that Windows recognizes out of the box, but which route every I/O operation through a slower, more CPU-intensive emulation layer. VirtIO devices are paravirtualized: the guest OS knows it’s virtual and talks to Proxmox’s virtio backend directly, cutting overhead substantially for both disk throughput and network packets-per-second. For any production Windows Server VM, VirtIO is worth the extra setup step.

Why VirtIO paravirtualized drivers improve Windows VM performance
Why VirtIO matters

Step 2: Download the VirtIO Driver ISO

Download the official virtio-win.iso (maintained by the Fedora/RHEL virtualization team, the standard source Proxmox itself points to) into Proxmox’s ISO storage: /var/lib/vz/template/iso/, alongside your Windows Server installer ISO. You’ll attach both to the VM as separate virtual CD/DVD drives.

Downloading VirtIO driver ISO to Proxmox ISO storage
Downloading the VirtIO driver ISO

Step 3: Create the VM With VirtIO Hardware

In the Create VM wizard: on the Hard Disk tab, set Bus/Device to SCSI and SCSI Controller (under System tab) to VirtIO SCSI single. On the Network tab, set Model to VirtIO (paravirtualized). On the CD/DVD tabs, attach the Windows Server ISO as the primary drive and add a second CD/DVD drive for virtio-win.iso — you need both mounted simultaneously.

Creating Proxmox VM with VirtIO SCSI and network hardware
Creating the VM with VirtIO hardware

Step 4: Load the VirtIO SCSI Driver at Install Time

Boot the VM and start the Windows Server install. At the “Where do you want to install Windows?” screen, no disk will appear — this is expected, since Windows has no built-in VirtIO SCSI driver. Click Load driver, browse to the mounted VirtIO ISO’s vioscsi\2k22\amd64 folder (match the folder to your Windows Server version), and select Red Hat VirtIO SCSI controller. Your virtual disk now appears and installation can proceed normally.

Loading VirtIO SCSI driver during Windows Server installation
Loading the VirtIO SCSI driver at install time

Step 5: Install Remaining VirtIO Drivers Inside Windows

After Windows finishes installing and boots, the VirtIO ISO is still mounted as a drive letter (usually D:). Run virtio-win-guest-tools.exe from it — this installs the remaining drivers as a bundle: NetKVM (network adapter), Balloon (dynamic memory management), and vioserial. Reboot when prompted.

Installing remaining VirtIO guest tools drivers inside Windows
Installing remaining VirtIO drivers

Step 6: Enable QEMU Guest Agent

The guest tools bundle also installs the QEMU Guest Agent service, but Proxmox needs to be told to expect it: VM → Options → QEMU Guest Agent → set to Yes. Once running, Proxmox can trigger a clean in-guest shutdown instead of a hard power-off, and the VM’s Summary tab will start showing the actual guest IP address — invaluable when DHCP hands out an address you otherwise couldn’t see from the hypervisor side.

Enabling QEMU Guest Agent for Windows VM on Proxmox
Enabling QEMU Guest Agent

Step 7: Verify Every Device Is Using VirtIO

Open Windows Device Manager and confirm: Red Hat VirtIO SCSI Controller under Storage controllers, Red Hat VirtIO Ethernet Adapter under Network adapters, and VirtIO Balloon Driver under System devices — with no yellow warning triangles anywhere. If you see “Standard SATA AHCI Controller” or an Intel network adapter instead, the VM’s hardware wasn’t actually configured for VirtIO back in Step 3, and you’ll need to correct it (changing the disk bus type after install requires re-attaching the disk, so it’s worth getting Step 3 right the first time).

Verifying VirtIO devices in Windows Device Manager
Verifying VirtIO devices

Quick reference

# Download VirtIO ISO on the Proxmox host
cd /var/lib/vz/template/iso
wget https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/stable-virtio/virtio-win.iso

# Key VM config for VirtIO (via qm CLI, equivalent to the GUI settings)
qm set 105 --scsihw virtio-scsi-single
qm set 105 --net0 virtio,bridge=vmbr0
qm set 105 --agent enabled=1

Post-install tips

  • Memory ballooning: with the Balloon driver installed, you can safely set a VM’s memory ”
    “with a min/max range in Proxmox instead of a fixed allocation, letting Windows release unused RAM back to ”
    “the host under pressure
  • Windows Server 2022 Secure Boot: if you enable UEFI + Secure Boot on the VM, add a TPM ”
    “state device (VM → Hardware → Add → TPM State) before install — some Windows Server roles and features ”
    “check for it
  • Backups: with QEMU Guest Agent enabled, PBS/vzdump backups can freeze the filesystem ”
    f’consistently before snapshotting — see our PBS setup guide


Related tutorials


Image credits: All illustrations use original Proxmox VE branded artwork created
for Gnome IT Solutions — not copied from vendor marketing assets or third-party screenshots.
Tutorial text © Gnome IT Solutions.

Image credits: Screenshots are from the official
Proxmox VE documentation
(Proxmox GmbH), used under open documentation terms for educational purposes.
Tutorial text and layout © Gnome IT Solutions.