Let’s Install Windows OS on Proxmox Virtual Environment (PVE)

Let’s Install Windows OS on Proxmox Virtual Environment (PVE)

Proxmox Virtual Environment (PVE) is a complete, open-source and free enterprise-grade server virtualization platform. PVE is based on KVM hypervisor (Type 1 hypervisor, meaning PVE runs directly on your computer hardware, interacting directly with its CPU, Memory, and Storage), and it allows you to run both full virtualizations and lightweight containers using Linux Containers (LXC) on a single platform. You can also manage software-defined storage and networking functionality, as well as high availability and disaster recovery tools with an integrated web-based user interface. PVE is used to virtualize your IT infrastructure, optimize existing resources, and increase efficiencies with minimal expense. You can easily download and install PVE on your hardware from the Proxmox official website

In this article, we are going to go through the steps required to install a Windows OS on PVE. My current version of Proxmox is 6.2-11, and I will install Windows 10, but these steps are also valid for other versions of windows on other versions of Proxmox. By the end of this exercise, you should be able to install Windows on any PVE.

Step 1: Uploading the Windows 10 ISO

On the PVE Web GUI, navigate to Storage ‘local’ on the node where you want to install Windows OS. Select upload, set the content to “ISO image”, and then click “Select File”. Then browse to the
destination where you have saved the Windows 10 ISO file and upload it onto your Proxmox.

Proxmox has two logical volumes ‘local’ and ‘local-lvm’ inside a volume group called pve, which is created on a physical volume on your disk during installation. ‘local-lvm’ can only store VMs/LXCs, while ‘local’ can only store ISOs/Backups/Snippets/Templates as well as your root-filesystem of the PVE OS and all other files. So the difference is in the type of data they can store and how they are formatted.

Side Note:

You can use commands like pvs, vgs, lvs and lsblk to check the current configuration of your storage partitions.
You can also use commands like lvextend and lvresize to resize your logical volumes if you need more space.

Step 2: Creating the VM

On the PVE Web GUI, navigate to Datacenter in the left panel, select the node where you want to install Windows OS, and click “Create VM”.

This will open a new window where you can specify the specifications for the VM you want to create. Under the General Tab you will specify the following:
Node: On what Node you want to install the VM on.
VM ID: This is the ID that will be assigned to the VM. It its automatically assigned to each VM, however you do have the option to change it.
Name: Specify the Name you want to assign to the VM.
Make sure to select Start at boot under advance options before clicking “Next”

Under the OS tab you will specify the details of the OS you are installing on the VM.
Storage: Where you saved the image on Proxmox should be under ‘local’.
ISO Image: Select the Windows 10 ISO file you uploaded in step (1).
Type: Select Microsoft Windows.
Version: 10/2016/2019, and click “Next”.

Under the System Tab, you can leave everything as default and click “Next”.

Under the Hard Disk Tab, you will specify the size of the Disk space:
Bus/Device: SCSI 0
Cache: Default (No Cache)
Storage: local-lvm
Disk Size GiB: (Minimum recommended is 40GiB), Click “Next”.

Under the CPU Tab, Specify the CPU resources you want to allocate to the VM.
Sockets: How many CPU sockets you want to assign? Recommended = 2
Cores: How many CPU cores you want to assign? Recommended = 2
Type: Default (kvm64)
Total Cores: The total amount of cores you have assigned to the VM = (Sockets *
Cores) = 4 VCPUs, Click “Next”.

Under the Memory Tab, you select the total Memory you want to assign to the VM.
Memory (MiB): How much memory you want to assign? Please use increments of
1024(MiB), i.e., for 4 GiB RAM, you will use 4096MiB, Click “Next”.

Under the Network Tab, you will select the network bridge you want this VM to use.
Bridge: The bridge network interface on the server for this VM.
Model: VirtIO (paravirtualized)
VLAN: no VLAN
MAC address: Auto
Click Advance and disable firewall. Will not work if firewall is on. Click “Next”.

The final tab will ask you to confirm all the information you provided for the creation of the VM. Select Finish if you are done and want to create the VM. You can also select Start after created, which will start the VM, and you can start with installing the OS.

Step 3: Installing the Windows OS

Navigate to the created VM. On the left-hand side panel, you will see the VM name you just created. Select it and it will display another menu to the right, click on summary to get an overview of the VM you created.

The functions of each of the tabs on the right-side menu are listed below:

Console: an interactive console to your VM
(KVM)Hardware: Shows and set the Hardware of the KVM VM.
(LXC)Resources: Defines the LXC Hardware opportunities.
(LXC)Network: The LXC Network settings.
(LXC)DNS: The LXC DNS settings.
Options: All guest options can be set here.
Task History: Here all previous tasks from the selected guest will be shown.
(KVM) Monitor: Is the interactive communication interface to the KVM process.
Backup: Shows the available backups from the selected guest and also create a
backup set.
Replication: Shows the replication jobs for the selected guest and allows to
create new jobs.
Snapshots: Manage VM snapshots.
Firewall: Manage the firewall on VM level.
Permissions: Manage the user permission for the selected guest.

Click on “Console” to launch the “noVNC” interactive console that will enable you start the Windows OS installation.

“noVNC is a client web application that uses websockets and HTML5 to connect to virtual machines. It can run in any modern browser that supports websockets and HTML5 postMessage function. It is integrated with some projects such as OpenStack, OpenNebula, LibVNCServer, Proxmox, and ThinLinc. To use it, you need a websocket proxy that can communicate with the VNC server in the virtual environment. The noVNC client receives the connection information from the engine using HTML5 postMessage and passes it to the websocket proxy via URL path. noVNC comes pre-installed and ready to use in the PVE and there is no need to worry about its installation and setup.

Click on “Next” in the Windows Setup menu to proceed with the OS installation.

Accept the license terms and click “Next”

Select custom install

Take Note of this error!

As seen in the screen shot below, when we clicked custom install, the next step threw an error! When trying to look for the storage partition to install windows “We couldn’t find any drives. To get a storage driver, click load driver”.

The issue here is VirtIO drivers for windows! The virtio-win drivers are KVM’s paravirtualized device drivers for Windows guest virtual machines running on KVM hosts. They enable direct access to devices and peripherals for virtual machines. They support block (storage) devices, network interface controllers, balloon (dynamic memory management), and more. They are not included in Microsoft’s Windows installation kit by default, so they need to be provided during the installation of a Windows guest on Proxmox. Therefore, we need to download virtio-win.iso file. You can download the latest virtio-win iso here.

Upload it to your PVE, under the storage ‘local’ just like we did with the Windows ISO file in step (1). When the upload is complete, Select the VM again on the left-hand panel, click on “Hardware”, click “Add” on the top menu and select “CD/DVD Drive”.

In the “Create: CD/DVD Drive” menu, select Storage ‘local’ and choose the ISO image as the virtio-win.iso file that you just uploaded. Then click create.

Notice that now your VM has two CD/DVD Drives attached to ide0 and ide2

Stop/Start the VM so that the new hardware changes can take effect. Just running a “Reboot” might not work here, I recommend using “Stop/Start” to power cycle the VM.   

Select the VM and click “Start” to resume the Windows OS installation.

Access the console again and start the Windows setup again. At the “Where do you want to install Windows?” menu, click “Load driver”

In the Load driver pop-up, click “Browse”

Navigate to the CD Drive that has your virtio-win image

Navigate to “amd64” and select the “w10” directory and click “OK”. For those installing another version of Windows, select the corresponding directory.

AMD64 is a 64-bit version of the x86 processor family, first released in 1999 by AMD. It allows the CPU to address more than 4GB of memory, which is the limit of 32-bit registers. It also introduced two new modes of operation, 64-bit mode and compatibility mode, along with a new 4-level paging mode. AMD64 is also known as x64, x86_64, AMD64, and Intel 64.

The “Red Hat VirtIO SCSI pass-through controller” will be selected. Click next to install the driver.

Once the driver is installed, the setup will take you back to the stage where to install windows but this time there is some joy, and the setup can now see our disk (40GB). At this stage, you can choose to partition your drive or choose to continue and install the OS on a single partition. Click “Next” to progress.

Windows setup will go through the normal process of installation, it will reboot the VM and make it ready for use. From here you are good to go, complete the basic setup and start using your new Windows VM.

I hope this article was useful. If you need assistance or have any concerns about this activity, please utilize our Q & A forum. I’m a very active member there and I’ll be happy to help.

JoshuaProfile

About the Author

Joshua Makuru Nomwesigwa is a seasoned Telecommunications Engineer with vast experience in IP Technologies; he eats, drinks, and dreams IP packets. He is a passionate evangelist of the forth industrial revolution (4IR) a.k.a Industry 4.0 and all the technologies that it brings; 5G, Cloud Computing, BigData, Artificial Intelligence (AI), Machine Learning (ML), Internet of Things (IoT), Quantum Computing, etc. Basically, anything techie because a normal life is boring.

Spread the word: