Virtio, Proxmox, and old & new Windows OSes (draft)

I’ve recently set up 4 proxmox configurations and have had successful and mixed results virtualizing previous hardware installs. Virtualizing previous hardware installs means that I’ve taken an existing Windows computer and used a software tool to copy the drive in full and made a special file out of it that I then copied over to the proxmox server itself and converted to an file format that proxmox understands and then I imported that into a virtual machine configuration.

After doing that I was successful at using proxmox to boot that and run it as if it were on the actual hardware.

The conversion process takes a while and configuring it after it has booted also takes some time. Once done you’d remote desktop into it and use it as if you were using the the computer itself. It’s slower but safer. I mean safer in that I can use Proxmox backup routines to back it up and copy it around.

I’ve done 4 computer conversions. The first was that I did my old VM that I used to do my accounting. The second was to convert a physical Windows server 2008 to a VM, and then I did two other important computers used for data entry and accounting. The idea here is that I no longer need 4 computers. One computer handles it all. I can back these VMs up and not have to worry about failing hard drives or disaster recovery from that perspective. I can also reassign resources. I can give more memory, increase disk space and even increase the number of CPUs.

One thing I have noticed is that it has become slower. This is because the system is emulating hardware with software and that takes power.

When you first convert the hardware to the VMs you have to prepare and in the end you have to still have driver support for the virtualized components. For instance, you have to have drivers for the disk controller, the, network card, etc. By default proxmox works with the standard chipset, storage controller, and network and uses a basic video card driver.

In reality you want to use the best fastest components you can. The suggested route is to use the virtio components and use the virtio drivers. However, you have to at least start with enabling the IDE drivers on the computer before you convert it and then you can safely boot the existing VM. After that, which isn’t well documented, is that you should try to use the virtio. Red Hat’s Fedora project has drivers for this purpose. YOu download from their site an .iso file and then emulate an ide cdrom drive. After that you have to figure out how to configure your VMs to switch from that IDE controller to the more capable virtio storage controller. In this process you’ll run into several pitfalls. That’s what I’m going to talk about here.

The first pitfall is that you need to get the drivers for virtio storage installed without being able to boot from a device using those drivers. The way I found to do that is to add another drive of the virtio type and add the ide cdrom with the .iso mounted. Then boot into windows in which case it sees the new virtio storage device and prompts you to install the drivers. You point the driver installation process at the emulated ide drive with the .iso file. This installs it properly.

The second part of this is that you have to then shutdown the VM and detach your main OS drive. Then add it back but this time add it as a virtio storage device. Then, an a very important part of this is, you need to change the boot options of the VM (before you do anything else) to boot from the virtio device. After you do this and boot Windows will install the drivers for that device for the new drive. Then you’ll have to reboot again. After this is done you can remove the temporary virtio drive you added and even remove the ide cdrom with the .iso file. If you are going to do other updates such as change the chipset from i44x to q35 you’ll need that .iso mounted still. If you are going to use the virtio network driver you’ll also want to leave it in. When I did the network driver I was concerned it would get a new IP address from the router. In my case it didn’t.