Installing most operating systems in a virtual machine is pretty straight-forward these days, but for Windows specifically there are a few recommended settings and steps to get the best out of your virtual machine. And as I keep forgetting these steps myself too, I'm jotting them down here for future reference. These should mostly apply in the same way for Windows 10, Windows Server 2016, 2018 and 2019.
This guide assumes you have already properly set up and configured your Proxmox server, and that you have your Windows installation ISO ready and uploaded to your server. I recommend Windows 10 Pro (non-Pro does not support RDP screen sharing, unfortunately) or Windows 2019 Server. You can download the Windows 10 installation ISO here, or a 180 day evaluation version of the latter here.
You'll also need to download an ISO containing the VirtIO drivers, which are available from the Fedora project right here. Be sure to download the latest version.
Step 1: VM Settings in Proxmox
While specific settings like how much RAM you would like to allocate to your VM, most of these settings are generally their most recommended from what I have found. Please be sure to adjust things like RAM to your liking, though be sure to set reasonable numbers to ensure performance is good enough.
|OS||Guest OS||Microsoft Windows (10/2016)|
|CD image||Your downloaded ISO|
|SCSI Controller||VirtIO SCSI|
|Hard Disk||Bus/Device||VirtIO Block (0)|
|Disk Size||>50GB ideally|
|CPU||Sockets||1 (adjust to your needs)|
|Cores||4 (adjust to your needs)|
|Memory||Memory||8192 (adjust to your liking)|
After completing the Create VM wizard, don't turn on your VM just yet. We have a few more options to set before we can.
In your Proxmox GUI, head to the Hardware view of the newly created VM. Click the Add button, followed by CD/DVD Drive. Select the VirtIO driver ISO you have previously downloaded, and click OK.
We are now ready to start the VM, so go ahead and click Start in the top-right-hand-side of the Proxmox GUI. Click on Console so we can start the Windows Installation.
Step 2: Windows Installation
After the initial few steps, when you reach the step where you should be able to select what hard drive to install Windows to, you'll notice that there are no drive options available. This is because Windows requires drivers before it can support things VirtIO. Since we're here anyway, we'll right away take the opportunity to install all other drivers we need right away.
Note: If you're installing Windows Server Edition, be sure to select the option with "Desktop Experience." If you choose the wrong option here there is no way to change this later, and you'll have to re-install your VM. Don't ask me how I know this. A friend told me. Ahem.
Click Load Driver in the bottom-left-hand-side of the window, and click Browse in the alert that shows. Now, browse to the VirtIO CD, and for each of the following folders, select the appropriate sub-folder (2kxx if you're installing Windows Server 2016/2018/2019, w10 if Windows 1o).
You'll have to revisit this Load driver view for each of the following drivers:
- NetKVM — the VirtIO Ethernet driver
- viostor — the VirtIO block storage driver
- vioscsi — the VirtIO SCSI driver
- qxldod — QXL graphics driver (if installing Windows 7 or earlier, choose qxl instead)
- Balloon — VirtIO memory balloon driver (optional, but recommended unless your server has plenty of RAM)
I believe these drivers are optional, so you only need to install if you have a specific need for them, or if you just want to be on the safe side:
- viorng — VirtIO RNG driver
- vioser — the VirtIO serial driver
- vioinput — VirtIO input driver (note: there are two drivers to install in this folder)
If you don't get any results when selecting some of these folders (i.e. qxldod), you can (temporarily) uncheck the Hide drivers that aren't compatible with this computer's hardware.
It's a bit clunky to keep having to go back to the Load Driver window like this, but it makes installation a lot smoother if you install all these drivers now instead of after installing Windows.
With these drivers installed, your hard drive should show up now. Select it and click the New button to create the required partitions. Click Next, and the Windows installation will start. Time to grab a coffee refill, this'll take about 10 minutes or so depending on your hardware.
Step 3: Post-installation
Now that Windows is fully installed, we should install and configure a few more things before we can fully call this done.
Open a Windows Explorer screen and head over to your VirtIO CD. On the CD you'll find a folder called guest-agent. Install the guest agent now (be sure to choose the x64 installer).
Create a new folder in Program Files called Balloon, and copy the entire contents of your VirtIO CD's Balloon\2k19\amd64 folder. Next, launch a command prompt with Administrative permissions (
cmd, hit enter) and cd to the newly created folder. Then, run blnsvr.exe -i. This will install the balloon service. From this point onward it will automatically start upon booting up your VM.
Now go ahead and fully shut down your VM.
In the Proxmox GUI, head on over to the Hardware view of your VM again. You can now fully remove both CD/DVD drives as we don't need them anymore. Once you've done that, you can boot your VM back up. The full shutdown-start cycle should also ensure Proxmox will receive data properly from the qemu-agent. You can verify this by checking the Summary view of your VM in the Proxmox GUI. Next to IPs it should now mention the IPv4 and IPv6 addresses. You'll also notice that memory usage is showing the same information as what your VM's task manager shows.
If you're planning on using RDP, you should enable this by right clicking on This PC and clicking Properties. Click Remote settings in the sidebar, and then enable remote connections from there. You should now be able to use RDP to access your VM.
The process isn't too complicated or involved, but as you have noticed involves a few more manual steps than might be obvious at first. Fortunately they're pretty easy to follow and you'll have a usable Windows VM in no-time.
Be sure to run Windows Update before you fully start using your VM, as there's always a gazillion updates available and you don't want to have to sit around and wait for an unresponsive Windows while it's downloading these later.
I hope this guide has helped you. Should you have any further questions and/or feedback, you can find me on Twitter.