Proxmox Windows Server Setup — QEMU/KVM & VirtIO Full Guide

proxmox ve dashboard showing windows server vm running on qemu kvm with virtio drivers

Running Windows Server on Proxmox VE without VirtIO drivers is one of the most common performance killers in self-hosted datacenters today.

Most guides skip the driver stack entirely, leaving engineers with a functional-looking VM that quietly destroys disk I/O throughput and saturates the network adapter with emulated overhead.

If you are deploying Windows Server 2019, 2022, or 2025 on a Proxmox virtual environment, getting the QEMU/KVM paravirtualization layer right from the very first boot is not optional.

Sponsored

This guide covers everything — from ISO staging and VM hardware configuration, to VirtIO driver injection mid-install, post-boot network driver setup, and guest agent activation.

By the end of this article you will have a fully functional, production-hardened Windows Server VM running on Proxmox VE, backed by paravirtualized storage and networking, with zero emulation overhead on critical I/O paths.

The Architecture Behind Proxmox VE and QEMU/KVM You Need to Understand First

Before touching the Proxmox web UI, understanding what is actually happening under the hood saves you from misconfigurations that are painful to reverse in production.

Proxmox VE is a Debian-based hypervisor platform that wraps KVM (Kernel-based Virtual Machine) and QEMU (Quick Emulator) into a unified management layer.

KVM runs directly in the Linux kernel as a loadable module. It converts the Linux host into a Type-1-adjacent hypervisor by giving each VM direct access to CPU virtualization extensions (Intel VT-x or AMD-V).

QEMU handles device emulation. When a VM needs to talk to storage, network, or display hardware, QEMU either emulates legacy hardware (slow, high-overhead) or exposes VirtIO paravirtualized devices (fast, near-native performance).

The critical architectural distinction is this:

  • Emulated devices (IDE, E1000 NIC) → QEMU software translation → High CPU overhead, low throughput
  • VirtIO devices (virtio-scsi, virtio-net) → Direct guest-to-host I/O channel → Near-native performance

Windows Server does not include VirtIO drivers out of the box. This is why you need the VirtIO-Win ISO published by Red Hat alongside your Windows Server ISO — to inject the correct paravirtualized drivers during and after installation.

Proxmox itself adds a management API, web UI, storage abstraction (LVM, ZFS, Ceph, NFS, iSCSI), clustering support, and live migration on top of QEMU/KVM.

The result is an enterprise-grade, open-source hypervisor stack that competes directly with VMware ESXi and Hyper-V for most production workloads.

proxmox ve full architecture stack at solideinfo

Everything You Need Before Starting — The Production Prerequisites Checklist

Rushing into a Proxmox Windows Server deployment without staging the right resources first results in interrupted installations, missing drivers mid-setup, and VMs that boot with no network access.

Here is the exact checklist before you open the Proxmox web UI:

Hardware requirements (minimum for production use):

  • CPU with hardware virtualization extensions enabled in BIOS/UEFI (Intel VT-x or AMD-V)
  • 16 GB RAM minimum (32 GB+ recommended for Windows Server with active roles)
  • 100 GB+ fast storage for the VM disk (SSD-backed LVM or ZFS preferred)
  • IOMMU enabled in BIOS if you plan PCIe passthrough

Software and ISO files you need staged in Proxmox storage before starting:

  • Windows Server 2019, 2022, or 2025 ISO (from MSDN, Volume Licensing, or Evaluation Center)
  • VirtIO-Win ISO from the Fedora Project (latest stable from https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/stable-virtio/)

Proxmox VE version: 8.x recommended (PVE 7.x works but lacks some minor UI improvements)

Network planning:

  • Decide if this VM gets a bridged interface (vmbr0) for direct LAN access or uses NAT via a second bridge
  • Have a static IP or DHCP reservation ready for the Windows Server post-boot

Storage pool: Confirm you have a storage pool configured in Proxmox that accepts ISO images (typically “local” for ISOs and “local-lvm” or ZFS pool for VM disks)

Sponsored

Uploading ISOs to Proxmox Storage — Do This Before Creating Any VM

The Proxmox web interface handles ISO uploads cleanly, but many engineers waste time uploading to the wrong storage location.

ISOs must land in a storage pool that has the Content Type: ISO Image enabled. In default Proxmox installations, this is the local storage (backed by /var/lib/vz/template/iso/).

Navigate to Datacenter → Storage → local → ISO Images → Upload.

Upload both files in sequence:

uploading the windows server iso to the proxmox local storage iso image section
Uploading the Windows Server ISO to the Proxmox local storage ISO image section
uploading the virtio-win iso to proxmox storage — this iso contains all paravirtualized drivers for windows guests
Uploading the VirtIO-Win ISO to Proxmox storage — this ISO contains all paravirtualized drivers for Windows guests

If you prefer CLI upload over a slow browser session, use this on the Proxmox host directly:

After the uploads complete, verify both ISOs appear in the storage listing before proceeding to VM creation. This is a step many engineers skip, only to find mid-installation that the VirtIO ISO is missing from the drive selection dropdown.

Creating the Windows Server VM in Proxmox VE — Every Setting Matters

Sponsored

This is where most tutorials go wrong. The default Proxmox VM creation wizard uses emulated devices unless you explicitly override them. Leaving defaults in place means installing Windows Server on an IDE-emulated disk controller with an E1000 NIC.

That works. But it performs like 2004.

Here is the correct hardware configuration for a production Windows Server VM on Proxmox:

General Tab:

  • VM Name: Use a descriptive hostname (e.g., winserver2022-prod-01)
  • VM ID: Any available ID (e.g., 100)

OS Tab:

  • Guest OS Type: Microsoft Windows
  • Version: 11/2022/2025 (or 10/2019/2016 depending on your target)

System Tab:

  • Machine Type: q35 (modern PCIe bus, required for TPM 2.0 and NVMe)
  • BIOS: OVMF (UEFI) for Windows 11/2025, SeaBIOS acceptable for 2019
  • TPM State: Add if deploying Windows Server 2025 or for compliance requirements
  • SCSI Controller: VirtIO SCSI (this is the critical setting — do NOT leave it as LSI Logic)

Disk Tab:

  • Bus/Device: VirtIO Block or SCSI via VirtIO SCSI controller
  • Cache: Write Back for best performance on trusted storage, None for ZFS (ZFS handles its own caching)
  • Discard: Enable if using SSD-backed storage (enables TRIM pass-through)
  • Size: 80 GB minimum for a base Windows Server install, 120+ GB for production roles

CPU Tab:

  • Sockets: 1 (scale cores first before adding sockets to avoid NUMA misconfiguration)
  • Cores: 4 minimum, 8 for active workloads
  • CPU Type: host (passes through all host CPU features for maximum performance — only use a generic type if live migration across heterogeneous CPU hosts is required)

Memory Tab:

  • RAM: 8192 MB minimum, enable Ballooning (requires guest agent to be installed later)

Network Tab:

  • Bridge: vmbr0 (or your configured bridge)
  • Model: VirtIO (paravirtualized) — critical, do NOT use E1000 for production

CD/DVD Drives:

  • Drive 0 (ide2 or sata): Windows Server ISO
  • Drive 1 (ide3 or sata1): VirtIO-Win ISO — this second CD drive is mandatory
adding the second cd drive to the vm hardware configuration in proxmox ve — this will hold the virtio-win iso
Adding the second CD drive to the VM hardware configuration in Proxmox VE — this will hold the VirtIO-Win ISO
selecting the virtio-win iso for the second cd drive — assign it a unique drive id in proxmox hardware config
Selecting the VirtIO-Win ISO for the second CD drive — assign it a unique drive ID in Proxmox hardware config
both cd drives visible in the proxmox vm hardware tab — windows server iso on ide0, virtio-win iso on ide1
Both CD drives visible in the Proxmox VM hardware tab — Windows Server ISO on IDE0, VirtIO-Win ISO on IDE1

Set the Boot Order correctly — the VM must boot from the Windows Server ISO on first boot:

setting start at boot to yes in proxmox vm options and confirming boot order with cd drive first
Setting Start at Boot to Yes in Proxmox VM options and confirming boot order with CD drive first
Sponsored

Starting the VM and Getting Into the Windows Server Installer

With both ISOs attached and the boot order set, it is time to start the VM.

Right-click the VM in the Proxmox left sidebar, then select Start. Alternatively, use the Start button in the VM detail view.

starting the windows server vm from the proxmox right-click context menu
Starting the Windows Server VM from the Proxmox right-click context menu

Once the VM starts, click the Console button in the top right of the Proxmox VM view to open the noVNC graphical console.

opening the proxmox novnc console — this gives graphical access to the vm for the setup process
Opening the Proxmox noVNC console — this gives graphical access to the VM for the setup process

You will see the UEFI/BIOS POST screen. Watch for the boot device prompt:

press any key to boot from the cd/dvd drive — you have about 5 seconds before the vm attempts to boot from disk
Press any key to boot from the CD/DVD drive — you have about 5 seconds before the VM attempts to boot from disk

The UEFI boot menu may appear first. Select the option to boot from your Windows Server ISO:

selecting boot from rom / dvd drive option in the uefi boot menu
Selecting Boot from ROM / DVD drive option in the UEFI boot menu

After the UEFI handoff, the Windows Setup splash screen appears:

windows server installation wizard loading — the setup process is now running from the iso
Windows Server installation wizard loading — the setup process is now running from the ISO

The Critical Step — Installing Windows Server with VirtIO Storage Driver Injection

This is the step where most deployments fail silently or fall back to emulated hardware.

When the Windows Setup wizard asks “Which type of installation do you want?”, always select Custom: Install Windows only (advanced). Never choose Upgrade for a fresh deployment.

selecting the "windows server with desktop experience" option — the second gui option gives you the full graphical shell
Selecting the “Windows Server with Desktop Experience” option — the second GUI option gives you the full graphical shell

Accept the license terms:

accepting the windows server license agreement to proceed with installation
Accepting the Windows Server license agreement to proceed with installation

Select Custom: Install Windows only (advanced):

choosing the custom/advanced installation option — required to load virtio drivers and partition the disk manually
Choosing the custom/advanced installation option — required to load VirtIO drivers and partition the disk manually

At the “Where do you want to install Windows?” screen, you will see zero drives listed. This is expected and correct behavior.

Windows does not have a VirtIO SCSI driver built into the installer. It cannot see the virtual disk until you inject the driver manually.

This is the most important step in this entire guide.

Click Load driver:

the "where do you want to install?" screen shows no drives — click load driver to inject the virtio scsi controller driver
The “Where do you want to install?” screen shows no drives — click Load Driver to inject the VirtIO SCSI controller driver

Click Browse in the Load Driver dialog, then navigate to the VirtIO-Win CD drive (typically Drive E: or F:):

browsing to the virtio-win iso drive — open the partition to navigate to the correct driver folder
Browsing to the VirtIO-Win ISO drive — open the partition to navigate to the correct driver folder

Navigate to this path inside the VirtIO-Win ISO:

For different Windows versions, the folder changes:

  • Windows Server 2022 → vioscsi\2k22\amd64\
  • Windows Server 2016 → vioscsi\2k16\amd64\
  • Windows 11 → vioscsi\w11\amd64\
navigating to vioscsi → 2k19 → amd64 inside the virtio-win iso — adjust the folder name based on your windows server version
Navigating to vioscsi → 2k19 → amd64 inside the VirtIO-Win ISO — adjust the folder name based on your Windows Server version

Select the detected driver from the list:

selecting the red hat virtio scsi pass-through controller driver from the driver list
Selecting the Red Hat VirtIO SCSI pass-through controller driver from the driver list

Click Next to install it. The wizard will immediately load the SCSI driver into memory:

confirming driver selection — windows setup loads the virtio scsi driver into the installer environment
Confirming driver selection — Windows Setup loads the VirtIO SCSI driver into the installer environment

After driver injection, the VirtIO virtual disk appears in the drive list:

success — the virtio virtual disk is now visible and available for windows server installation
Success — the VirtIO virtual disk is now visible and available for Windows Server installation

Select the disk and click Next. The Windows Server installation begins:

windows server installation is now copying files to the virtio virtual disk — the install will complete and reboot automatically
Windows Server installation is now copying files to the VirtIO virtual disk — the install will complete and reboot automatically

The installation process takes 10–25 minutes depending on host storage speed. The VM will reboot several times automatically during this phase. Remove the boot priority from the CD drive after first reboot if Windows Setup loops back to the installer — or simply wait, as the installer manages boot sequencing automatically.

Sponsored

Post-Installation — Unlocking the Console and Installing Remaining VirtIO Drivers

When Windows Server finishes installing and boots to the login screen, you will hit an immediate problem in the Proxmox console.

Sending Ctrl+Alt+Del from your keyboard inside the noVNC console will trigger the key combination on your host machine, not the VM. This locks your workstation instead of unlocking the Windows VM.

Proxmox has a built-in workaround for this:

use the proxmox console's built-in ctrl+alt+del button (top toolbar) instead of the keyboard shortcut — avoids locking your host
Use the Proxmox console’s built-in Ctrl+Alt+Del button (top toolbar) instead of the keyboard shortcut — avoids locking your host

After logging in, open Device Manager (right-click Start → Device Manager). You will see multiple devices listed under Other Devices with yellow warning triangles. These are the remaining VirtIO devices that need drivers.

device manager showing unknown devices after fresh windows server install — these are the virtio network adapter, balloon driver, and other paravirtualized components needing drivers
Device Manager showing unknown devices after fresh Windows Server install — these are the VirtIO network adapter, balloon driver, and other paravirtualized components needing drivers

Right-click the first unknown device and select Update Driver → Browse my computer for drivers.

Point the search path to the root of the VirtIO-Win CD drive (Drive E: or F:), and check Include subfolders:

pointing the windows driver search to the root of the virtio-win iso drive with "include subfolders" checked www.solideinfo.com
Pointing the Windows driver search to the root of the VirtIO-Win ISO drive with “Include subfolders” checked

Windows will automatically find and install the correct driver from the VirtIO-Win ISO. The most critical driver to confirm installed correctly is the Red Hat VirtIO Ethernet Adapter — this is your VM’s network interface:

red hat virtio ethernet adapter driver installed successfully — the vm now has network connectivity via the paravirtualized nic at solideinfo
Red Hat VirtIO Ethernet Adapter driver installed successfully — the VM now has network connectivity via the paravirtualized NIC

Repeat the same process for all remaining yellow-triangle devices. The full list of VirtIO components to install includes:

DeviceVirtIO DriverPurpose
VirtIO SCSI ControllervioscsiDisk controller (already installed during setup)
VirtIO Ethernet AdapternetkvmParavirtualized NIC
VirtIO Balloon DriverballoonDynamic memory management
VirtIO Serial DrivervioserialHost-guest communication channel
VirtIO RNGviorngHardware entropy source
QXL / Virtio-GPUqxldodDisplay adapter

Finally, install the QEMU Guest Agent. Navigate to the VirtIO-Win CD drive root and double-click the guest agent installer:

installing the qemu guest agent from the virtio-win iso root — double-click the installer and follow the wizard at solideinfo
Installing the QEMU Guest Agent from the VirtIO-Win ISO root — double-click the installer and follow the wizard

The QEMU Guest Agent (qemu-ga) enables critical Proxmox-to-VM communication including:

  • File-system-aware snapshots (quiesced snapshots via VSS)
  • IP address reporting in the Proxmox web UI
  • Graceful shutdown and reboot from Proxmox interface
  • Memory balloon statistics

After installation, enable the Guest Agent in Proxmox VM Options:

Sponsored

Performance Tuning — Squeezing Maximum Throughput from Your Windows Server VM

A correctly installed Windows Server VM on Proxmox VE with VirtIO drivers should achieve near-native I/O performance. But several additional tuning parameters push throughput further.

CPU Pinning for Latency-Sensitive Workloads:

If this Windows Server VM runs a database, real-time analytics engine, or latency-sensitive application, pin the VM’s vCPUs to dedicated physical cores.

Storage Performance Verification:

After installation, verify you are getting VirtIO performance and not emulated disk performance from inside the Windows VM using PowerShell:

Network Offload Settings:

VirtIO-net supports hardware-level offloading. Verify it is active from within the Windows Server guest:

Huge Pages (hugepages) for Memory-Intensive Windows VMs:

virtio driver stack and i/o path at solideinfo

Automating Windows Server VM Provisioning on Proxmox with API and Terraform

Manually creating VMs through the Proxmox web UI works for initial deployments. In production environments with multiple Windows Server VMs, automation is mandatory.

Proxmox exposes a full REST API on port 8006. Everything you can do through the UI can be scripted.

Provisioning a Windows Server VM via the Proxmox API with Python:

Terraform provider for Proxmox (bpg/proxmox) is the recommended IaC approach for teams already using Terraform:

After Windows Server installation is complete via automation, you can sysprep the VM, convert it to a Proxmox template, and use qm clone to rapidly spin up new Windows Server instances from that golden image in under 60 seconds.

Sponsored

Proxmox Windows Server in Production — Security Hardening You Cannot Skip

Deploying Windows Server on Proxmox without addressing the security layer between the hypervisor and the guest is an incomplete deployment.

Proxmox Firewall for VM Network Isolation:

Snapshot before any major change — a Proxmox snapshot with Guest Agent active creates a VSS-consistent point-in-time recovery for Windows Server:

Audit logging — enable Proxmox task logging and correlate with Windows Security Event Log for a unified audit trail. Windows Server on Proxmox should be configured to ship Security Event Log (specifically Event IDs 4624, 4625, 4648, 4672, 7045) to your SIEM via Windows Event Forwarding (WEF) or a Sysmon-enhanced endpoint agent.

For teams integrating with a Threat Intelligence Platform (TIP) such as MISP or OpenCTI, Proxmox VM network traffic should be mirrored to a monitoring port and IoCs (IP addresses, domain names hitting the Windows Server VM) should be ingested automatically via the MISP API for correlation against active threat actor infrastructure.

Troubleshooting the Most Common Proxmox Windows Server Installation Failures

Problem: Windows Setup shows “No drives found” even after loading the VirtIO driver

This almost always means the wrong driver subfolder was selected. Verify:

  • You are pointing to vioscsi\ not viostor\ (viostor is the older, slower IDE-mode VirtIO driver — avoid it)
  • The architecture folder matches your Windows version (amd64 for 64-bit, not x86)
  • The VirtIO-Win ISO version supports your Windows Server version (use the latest ISO)

Problem: VM boots to black screen after Windows Server installation

Check the boot order in Proxmox VM Options. After installation, the VM must boot from the disk (scsi0), not the CD drive. Disable or remove the CD boot priority after installation completes.

Problem: Network adapter shows “Unknown Device” in Device Manager

The VirtIO Net driver (netkvm) was not installed. Browse the VirtIO-Win CD from Device Manager → Update Driver for the unknown Ethernet device, pointing to the NetKVM\2k19\amd64\ folder.

Problem: Proxmox reports “guest agent not running” after installation

Either the guest agent installer was not run, or the Windows Firewall is blocking the virtio-serial communication channel. Verify the QEMU Guest Agent Windows service is running:

Problem: Poor disk performance despite VirtIO setup

Confirm the cache=writeback parameter is set on the disk. On ZFS storage, use cache=none instead (ZFS has its own write caching via ARC). Also verify the Windows Server disk was not partitioned as MBR inside a q35/UEFI machine — this causes silent performance degradation.

Problem: VM freezes during live migration

If the Windows Server VM was configured with CPU type host, live migration to a node with a different CPU generation will fail. Use a specific CPU type like x86-64-v3 or Cascadelake-Server for cross-node migrations.

Frequently Asked Questions — Proxmox Windows Server Deployments

Sponsored

Can I run Windows Server 2025 on Proxmox VE?

Yes. Use machine type q35, BIOS OVMF, OS type win11 (Proxmox uses this for all recent Windows Server versions), and add a TPM 2.0 device. VirtIO-Win drivers from 2023+ support Windows Server 2025.

Is Proxmox VE free for production use?

Proxmox VE is open-source and free to download and use. The subscription is optional and provides access to the stable enterprise repository and commercial support. The no-subscription repository is fully functional but may include slightly less stable package updates.

How does Proxmox compare to VMware vSphere for Windows Server workloads?

For most Windows Server workloads, Proxmox VE with VirtIO drivers delivers comparable I/O performance to vSphere. vSphere leads in enterprise ecosystem integration (vSAN, NSX-T, vCenter orchestration) and OEM hardware certification. Proxmox leads in cost (no licensing fees), flexibility (ZFS integration, Ceph-native clustering), and API-driven automation.

What is the maximum number of vCPUs I can assign to a Windows Server VM on Proxmox?

Proxmox supports up to 768 vCPUs per VM (QEMU limit). Windows Server 2022 Datacenter Edition supports up to 2048 logical processors. Practically, vCPU count should not exceed 2x the physical core count of the host to avoid vCPU scheduling contention.

How do I back up Windows Server VMs on Proxmox?

Use Proxmox Backup Server (PBS) for deduplicated, encrypted, incremental backups. With the QEMU Guest Agent active, backups are VSS-consistent (no data corruption in SQL Server or AD database files). Schedule via vzdump or the PBS web interface.

Can I do live migration of a Windows Server VM between Proxmox nodes?

Yes, provided both nodes share the same storage (Ceph, NFS, or iSCSI), same network bridges, and compatible CPU types. Live migration with RAM included (vmstate) results in zero-downtime transfer.

Should I use VirtIO Block or VirtIO SCSI for Windows Server?

Use VirtIO SCSI via the virtio-scsi-pci controller for multi-disk deployments and production workloads. VirtIO Block is simpler (one device per controller) but lacks SCSI command support needed for proper disk management. VirtIO SCSI also supports TRIM/UNMAP passthrough natively.

Sponsored

Why Getting Proxmox Right the First Time Saves Weeks of Rework

Every hour spent deploying Windows Server on emulated devices instead of VirtIO is an hour of accumulated I/O debt your production workloads will eventually collect.

The Proxmox VE + QEMU/KVM stack is not a compromise hypervisor. With the VirtIO driver stack correctly installed, the QEMU Guest Agent running, and the VM hardware configured for q35/UEFI, you have a production-grade virtualization platform that handles Windows Server workloads at near-native performance — without a VMware licensing invoice.

The steps in this guide — from VirtIO ISO staging through driver injection, network adapter activation, guest agent configuration, and post-install performance tuning — represent the exact workflow used in production datacenters running Windows Server 2019 and 2022 on Proxmox at scale.

The Proxmox virtual environment is a platform worth the initial learning investment. Nail the VirtIO driver stack on day one, and every subsequent Windows Server VM deployment on Proxmox becomes a repeatable, automatable, sub-60-minute operation from ISO to production-ready workload.