Proxmox - Install Windows VM
In this guide, we will walk through the process of installing a Windows virtual machine (VM) on Proxmox. Proxmox is a powerful open-source virtualization platform that allows you to run multiple virtual machines on a single physical server. For this quick guide, we will be installing a Windows 10 VM. I've opted for Windows 10 here over Windows 11 beacuse I have a Windows 10 license available and did not want to use my primary Windows 11 machine. I also try to keep some older versions and legacy systems around for testing purposes and to keep my skills sharp.
Prerequisites​
Before we get started, make sure you have the following:
- A Proxmox server up and running. If you haven't installed Proxmox yet, refer to the Proxmox Installation Guide.
- A Windows 10 ISO file. You can download the Windows 10 ISO from the Microsoft website. However, we will cover a direct link to the ISO so you can download it directly from Microsoft's servers to your Proxmox server.
- Sufficient resources on your Proxmox server to run the Windows VM. This includes CPU cores, RAM, and storage space.
Steps​
Step 1: Upload the Windows 10 ISO to Proxmox​
-
Open a web browser and navigate to the Microsoft Windows 10 ISO download page. If this link is broken, you can search for the Windows 10 ISO download page on the Microsoft website, but they tend to keep it up to date.
-
You will likely need to make a few selections to get the download button activated. For example, I needed to select the edition of Windows 10, the language and the architecture.
-
Whe you see the version options, hover over the version you want - you should see the4 link show up in the bottom left of your browser, and it'll have
isosomewhere in the URL with a super long string following that. Right click on the link and select Copy link address. -
Navigate to your Proxmox web interface and log in.
-
In the Proxmox dashboard, select the node you want to upload the ISO to, and then select
local(pve)from the storage list (unless you have another storage location you'd like to use, then who am I to stop you from using that). -
Select ISO Images > Download from URL.
-
Paste the copied link into the URL field and click the Query URL button beside the link field. The ISO should autopopulate the Filename field with the name of the ISO file and other details.
-
Click Download to start the download. The ISO will be downloaded to your Proxmox server.
Step 2: Download the VirtIO Drivers​
-
Open a web browser and navigate to the Proxmox VirtIO Driver Wiki.
-
In the Installation section, right click on the download the latest stable... link to copy the VirtIO drivers ISO download link.
-
Navigate back to your Proxmox web interface and log in.
-
In the Proxmox dashboard, select the node you want to upload the ISO to, and then select
local(pve)from the storage list (unless you have another storage location you'd like to use, then who am I to stop you from using that). -
Select ISO Images > Download from URL.
-
Paste the copied link into the URL field and click the Query URL button beside the link field. The ISO should autopopulate the Filename field with the name of the ISO file and other details.
-
Click Download to start the download. The ISO will be downloaded to your Proxmox server.
Step 3: Create a New Virtual Machine​
-
In the Proxmox web interface, select the node you want to create the VM on.
-
Click the Create VM button in the top right corner.
-
In the Create VM wizard, enter a name for your VM (e.g.,
Windows10).
- In this screen shot I have followed my personal system of naming, tagging and IDing my VMs.
- ID: 501 - All my windows related VMs and Containers will have a 5XX ID. I keep my Linux VMs and Containers in the 8XX range, and webapp based services in the 2XX range for example.
- Name: Win-10-146 - Obviously the
Win-10is for Windows 10, but what is the suffix? The146is the last three digits of the IP address I have assigned to the VM. This is a personal preference and not necessary for you to follow, but let me tell you, it makes it super easy to identify a VM by name and know what IP it has been assigned. Happy SShing! - Tags: Windows, VM - I use tags to help me quickly visually identify what a VM is for. I have a lot of VMs and Containers running on my Proxmox server and this helps me quickly identify what I'm looking at. When I see pink, I know it's a test VM, for example. I can also filter by tags in the Proxmox web interface.
- If I'm building a VM for a service that I use or rely on then I'll check the box to Start at boot. For this Windows 10 VM, I have not checked that box as I'll only be using it when I need to test something on Windows.
- In this screen shot I have followed my personal system of naming, tagging and IDing my VMs.
-
Click Next to proceed to the OS selection screen.
-
Next we need to make our OS selections.
- Storage: local - This is the storage location where the VM will be stored. You can select a different storage location if you have one.
- ISO Image: Win10_22H2_English_x64v1.iso (or whatever your named image is)- This is the ISO we uploaded in the previous step. Select it from the drop-down list.

- Guest OS: Microsoft Windows - This is the OS we are installing. Select the appropriate version from the drop-down list. In this case, we are installing Windows 10, so select 10/2016/2019.

- Check Add additional drive for VirtIO drivers - This is where we will attach the VirtIO drivers ISO we downloaded earlier. This is important for the VM to recognize the virtual hardware provided by Proxmox.

If you don't see some of the options we discuss here, check to see if you have the Advanced checkbox checked. If it isn't, go ahead and check it. This will give you more options to configure your VM.
-
Click Next to proceed to the System screen. The System screen has a few specific settings that we will want to ensure we have configured to avoid any kind of issues:
- Graphics Card: Default - This is the default graphics card that Proxmox will use for the VM. You can change this to SPICE if you want to use the SPICE protocol for remote desktop access.
- SCSI Controller: VirtIO SCSI single - This is the controller that will be used for the VM's storage. We want to use VirtIO SCSI for better performance.
- Machine: q35 - This is the machine type that Proxmox will emulate for the VM. We want to use the q35 machine type for better compatibility with Windows 10.
- BIOS: OVMF (UEFI) - This is the BIOS type that Proxmox will use for the VM. We want to use UEFI for better compatibility with Windows 10.
- Check the box for Add EFI Disk - This will add an EFI disk to the VM, which is required for UEFI booting and will allow for Snapshots to be taken of the VM.

-
Click Next to proceed to the Hard Disk screen. Here we will configure the hard disk settings for the VM:
- Bus/Device: VirtIO - This is the bus/device type that Proxmox will use for the VM's hard disk. We want to use VirtIO for better performance.
- Choose the Disk size you want for the VM. I've chosen 32GB for this VM as it will only be used for testing small data projects, but you can choose a different size based on your needs.

-
Click Next to proceed to the CPU screen. Here we will configure the CPU settings for the VM:
- Sockets: 1 - This is the number of CPU sockets that the VM will have. We want to use 1 socket for better performance.
- Cores: 2 - This is the number of CPU cores that the VM will have. I've chosen 2 cores for this VM, but you can choose a different number based on your needs.
- Type: host - This is the CPU type that Proxmox will emulate for the VM. We want to use the host CPU type for better performance.

-
Click Next to proceed to the Memory screen. Here we will configure the memory settings for the VM:
- Memory: 8192 MB - This is the amount of memory (RAM) that the VM will have. I've chosen 8GB for this VM, but you can choose a different amount based on your needs. This would be much more than I need for a test VM, but since the OS will only be used for testing and will not alwasy be running, I'm not really worried about overcommitting resources.

-
Click Next to proceed to the Network screen. Here we will configure the network settings for the VM:
- Model: VirtIO (paravirtualized) - This is the network model that Proxmox will use for the VM. We want to use VirtIO for better performance.
- Bridge: vmbr0 - This is the bridge that the VM will be connected to. I have a single bridge on my Proxmox server, but you may have multiple bridges depending on your network setup. Everything else can be left at the default settings.

-
Click Next to proceed to the Confirm screen. Review the settings you have configured for the VM and make any changes if necessary. Once you are satisfied with the settings, click Finish to create the VM.
Step 4: Install Windows 10 on the VM​
-
After creating the VM, click on the VM in the Proxmox web interface to select it.
-
Click the Start button to start the VM.

-
Click on the Console tab to open the console for the VM.
-
The VM will boot from the Windows 10 ISO you uploaded earlier. Follow the on-screen instructions to install Windows 10 on the VM.

You may see a few error messages that appear to be related to the UEFI boot process. In most cases these errors will resolve themselves and the installation will continue. If you encounter any issues, please refer to the Proxmox documentation or the Proxmox community forums for assistance.
-
Select you input preferences and Time format and click Next.
-
License Agreement - You can choose to activate Windows if you have a key or you can do it later. I have a key, so I'm going to enter it now.
-
You'll then be prompted to select the type of installation you want. I'm going to choose Custom: Install Windows only (advanced).
-
Here we encounter our first issue. Windows cannot find any drives. This is because we need to load the VirtIO drivers. Click Load driver > Browse and navigate to the VirtIO drivers ISO we uploaded earlier.

-
In the dropdown, you'll see a list of drivers for various architectures. Select the amd64 folder and click OK. You may need to read up on the specific drivers you need for your system, but my base system is AMD so I'm going to select the amd64 folder.

-
Click Next and the drivers will be loaded. My system populated this RedHat VirtIO SCSI controller. Click Next.

-
You should now see the drive you created in the Proxmox VM creation process. Select it and click Next.

-
You'll want your machine to connect to your network as well, and we'll once again need to utilize the VirtIO drivers. Click Load driver > Browse and navigate to the VirtIO drivers ISO we uploaded earlier.
-
In the dropdown, you'll see a list of drivers for various architectures. Select the NetKVM > w10 folder and click OK.
-
Windows will now install on the VM. Follow the on-screen instructions to complete the installation.
-
Once the installation is complete, you can log in to your Windows 10 VM and start using it.
If you like to needlessly challenge yourself, like me, then you can also forget to load the network drivers and then have to go back and do that. I'm not saying I did that, but I'm not saying I didn't do that either. I did that. You can add the network drivers once your system is up -- it'll be a good windows driver update refresher for you.
That's it! You have successfully installed a Windows 10 VM on Proxmox. You can now use the VM for testing, development, or any other purpose you need. I have a few uses for this client device, one of which is to work through an Active Directory setup. Have a look for my guide to get up and running.