Skip to content

The following page describes how to create a Windows 11 VM using Proxmox.  While this is a general guide to setting up a Windows 11 VM, I've made callouts in areas where considerations can be made based on your setup and end goal.  Performed using Proxmox 8.4.

1. Download the windows 11 iso

  1. Go to the Windows 11 downloads page
  2. Scroll down to the "Downloads Windows 11 Disk Image (ISO) for x64 devices" section
  3. From the "Select Download" drop-down, select "Windows 11 (multi-edition ISO for x64 devices)
  4. Click "Confirm"
  5. Select the desired product language
  6. Click "Confirm"
  7. Click "64-Bit Download"

2. Download virtio drivers iso

  1. Go to the Proxmox wiki on Windows VirtIO Drivers
  2. Use the link under the "Using the ISO" section to download the latest stable drivers

3. Upload iso to proxmox

  1. Log in to the Proxmox Virtual Environment web-console
  2. Navigate to

4. Create a VM for windows

To begin creating the Windows VM, right-click on the PVE host, then select "Create VM".  The following sections will guide you through the Proxmox VM configuration options.

4.1 General

Image title

  1. Fill in "VM ID"
  2. Fill in "Name"

4.2 OS

Image title

  1. For ISO Image, select the Windows 11 ISO
  2. For Guest OS Type, select "Microsoft Windows"
  3. Check "Add additional drive for VirtIO drivers"
  4. For the ISO image, select the virtio drivers iso

4.3 System

Image title

  1. Set "SCSI Controller" to "VirtIO SCSI Single"

    VirtIO SCSI vs. VirtIO SCSI Single

    When using a single disk, VirtIO SCSI and VirtIO SCSI Single will perform identically.  The difference begins to matter when you attach multiple disks and enable IOThreads (in the next step).  Standard SCSI assigns one controller for up to 16 disks, while SCSI Single gives each disk its own controller.  Enabling IOThreads assigns one thread per SCSI controller. This means you get the best performance using SCSI Single with IOThreads. However, keep in mind to ensure your Proxmox host has enough compute resources to handle all the controllers and threads used across all VMs.

  2. Enable "Qemu Agent"

  3. Set "EFI Storage" to the appropriate storage device.  Typically set to the same storage device as your primary disk, as described in the next section.
  4. Set "TPM Storage" to the appropriate storage device.  Typically set to the same storage device as your primary disk, as described in the next section.

4.4 Disks

Image title

  1. Set "Bus/Device" to SCSI
  2. (Optional) Set the storage location for the disk.  You may want to do this if you've set up another storage location with Ceph or ZFS.  Note: Ensure the EFI and TPM storage locations in the previous step match this location.
  3. Set desired disk size.  Windows 11 requires at least 64GB.
  4. Set "Cache" to "Write back"

    Write back vs. No cache

    The best caching option depends on your specific setup and workload.  User-published benchmarks (see the grafts sections) show that VirtIO with Write Back often provides the best performance for random reads and writes, while sequential workloads can benefit from No Cache or Direct Sync.  

    Keep in mind that Write Back improves performance by caching disk writes in RAM, but this comes with a higher risk of data loss if the host loses power before the data is flushed to disk.  To mitigate this risk, ensure your host is connected to a UPS.  

  5. Enable "Discard".  This option allows the guest to mark formerly used disk space as unused.

4.5 CPU

Image title

  1. Set desired cores
  2. (Optionally) Set CPU "Type"

Does CPU type matter?

In short, yes.  Each generation of processor introduces new features (such as AVX/AVX2, MMX, and AES), and the QEMU agent can emulate many of these different features. Two of the most common CPU types are kvm64 (the default) and host. kvm64 exposes a limited set of features for maximum compatibility, while host passes through all of the host CPU's features directly to the VM.  

For most single-node setups, or if you don't plan to use live migration, setting the CPU type to host is a good starting point as it allows the VM to utilize the host CPU's capabilities fully and can improve performance depending on the workloads.  host also supports nested virtualization (if your CPU supports it) for use with Hypervisor or WSL.  Keep in mind, though, that VMs with nesting enabled cannot be live-migrated.  

However, suppose you're running a cluster with mixed CPU models and plan to use live migration. In that case, it's recommended to choose a CPU type compatible with the oldest processor in your cluster to ensure stability.  Ultimately, there is no universal best choice; instead, it is what suits your workload and environment.

4.6 Memory

Image title

  1. Set memory amount
  2. (Optional) Set Minimum memory amount (under advanced settings).

Memory Ballooning

Proxmox enables memory ballooning by default. To utilize this feature, enable "Ballooning Device" and set the minimum memory to the OS's or the intended application's baseline requirement.  For Windows 11, that's 4 GB.  Keep in mind that memory ballooning can introduce a slight performance impact, but it only activates when the host's total memory usage exceeds 80%.

4.7 Network

Image title

  1. Set "Bridge" to "vmbr1"
  2. Set "Model" to "VirtIO (paravirtualized)"

4.8 Confirm

Before clicking "Finish", ensure that "Start after created" is unchecked to avoid any issues when booting for the first time.

5. Install windows 11 to vm

The installation of Windows on a Proxmox VM is very similar to installing it on bare metal.  This section will not cover the entire Windows 11 installation, but rather focus on a few key points during the process.

5.1 Start installation

  1. Log into the Proxmox web console
  2. Go to the Windows VM's Console
  3. Click "Start Now"
  4. Proceed with the onscreen instructions until you get to the Windows installation location, then follow the steps in the next section

5.2 Selection location to install windows

When you reach the selection of which disk to install Windows on, you'll notice that no disk is listed, even though a virtual disk was assigned to the VM.  Follow the steps below to install the VirtIO SCSI drivers, which enable communication with the virtual disk.

  1. Click "Load Driver"

    Image title

  2. Click "Browse"

    Image title

  3. Select the appropriate storage VirtIO SCSI drivers

    Image title

    a. expand the virtio Windows drivers disk
    b. expand the amd64 directory
    c. select the w11 directory
    d. click "OK"

  4. Install Red Hat VirtIO VirtIO SCSI drivers

    Image title

    a. select the "Red Hat VirtIO SCSI pass-through controller"   b. click "Install"  

    After the SCSI controller is installed, you should now see your disk listed for Windows installation.

  5. Install Windows to the drive

    Image title

    a. select the disk
    b. click "Next"  

  6. Proceed with the onscreen instructions until you get to the network, then follow the steps in the next section

5.3 Connect to a network

Similar to the previous steps, you'll notice there is no network to connect to.  Follow the steps below to install the remaining VirtIO drivers, which include the Network driver.

  1. Press shift + f10 to bring up the Terminal.

    Image title

  2. Install VirtIO drivers

    Image title

    a. click the Terminal window to bring it into focus
    b. Enter the following command, then press the Enter key

    D:\virtio-win-guest-tools.exe
    
  3. Proceed through driver install (defaults are fine)  

  4. Once the VirtIO driver installation completes, click "Finish" and close the Terminal.  
  5. You should now see your network connection.  Click "Next"  

    Image title

  6. Proceed with the rest of the Windows installation  

Next Steps

  • Detach Windows and VirtIO install disks
    • Once the setup is complete, you no longer need the Windows and VirtIO installation disks, so you can remove them from the VM. This will help reduce the time it takes to clone the VM. To do this, shut down the VM and then remove the disk using the hardware tab in the Proxmox web console.
  • Enable RDP
    • If you plan to map a GPU device to the VM, enabling RDP is required.
  • Assign GPU Mapping

Troubleshooting

Windows Boot receives: "Failed to start Boot0001... Time Out"

If you encounter a similar error to the one below on first boot, then: stop the VM, ensure you are on the VM's console, and then start it again.


grafts: