Install virtio drivers in Windows after full virtualization
I'll be surprised if there's a solution to this topic, but if not, that's okay, it's just a fun project for me to try.
I wanted to see if I could get Windows running on a Linode, a completely unsupported configuration, but one that would prevent me from paying any extra if I set everything up correctly. Unfortunately, being blind, I couldn't simply go about it in a usual manner that would allow me to install the operating system with the virtio drivers. My attempts to do so have yielded little result, as I've been unable to get audio in my KVM virtual machine during the Windows setup process. Using Qemu and the hda audio device doesn't seem to work correctly for me on a 32 bit copy of Windows 10, or at least, no audio is presented to me using pulseaudio, and with alsa using hda, audio breaks up so horribly it's unusable. I can't use Narrator to go about an install the way I usually would. These things I've tried without results over the past few days, but I started with something that was successful.
I use a Mac, so I run VMWare Fusion for my virtual machines. Creating one of Windows 10 was easy, and I started with the 64 bit version. I set up Windows with the initial applications I wanted on a 20G disk successfully, with audio and network working out of the box as I expected. Once I enabled and verified remote access to my disk image, I shut down the virtual machine, attached the disk to another Linux virtual machine, and successfully uploaded it. I'm now running Windows on a Linode 2G using full virtualization, but I want to install and use a 32 bit copy of Windows so I can run it on a Linode 1G. In addition to this, I want to ensure that paravirtualization will indeed be faster for me on the 2G Linode, and may stick with that if it works out right. Unfortunately, there are a couple of problems that I've run into.
You cannot, to my knowledge, install the virtio drivers without the proper devices on the Linode. My attempts to boot a KVM virtual machine within my Linux virtual machine, using another installed disk image have failed if I try and add a disk using the virtio interface, with the virtio network driver, also. If I attempt to install the virtio drivers on my current Linode and then reboot it, I'm pretty sure it will fail with some obscure unknown event I won't be able to see, as Glish is useless to me. So, here's my questions. Is there a way to install the virtio drivers and successfully use them when booting Windows using paravirtualization, with all network and drive access working correctly? Or, is there a way to add a secondary virtio disk and network device that I can use to install the drivers with, remove them, then boot up in Windows using the installed virtio drivers? I'm guessing the second probably won't be allowed, even with a support ticket to Linode, as this is a completely unsupported configuration.
Also, on a side note, Windows 10 only supports up to 2 CPUs from my research. So, would there be a way to use cores on 1 CPU, rather than multiple CPUs within the Linode KVM environment? Thanks for any insight or answers anyone may have.
@tech10, that does sound like quite a project there, Blake! You're gettin these errors when you attempt to boot a virtual machine inside a Linode is because our infrastructure doesn't support nested virtualization. This is because of a few things, including the degradation of performance for the nested machine.
So, to answer your questions:
Is there a way to install the virtio drivers and successfully use them when booting Windows using paravirtualization, with all network and drive access working correctly?
Or, is there a way to add a secondary virtio disk and network device that I can use to install the drivers with, remove them, then boot up in Windows using the installed virtio drivers?
We don't currently offer the above features on our platform. That being said, our Bare Metal offering is on the 2020 roadmap and some of these features may be available with it. We'll be sure to update our blog when we have more information available for this product.
So, would there be a way to use cores on 1 CPU, rather than multiple CPUs within the Linode KVM environment?
If I understand you correctly, you are asking if it's possible to select the host's core your vCPU comes from? If this is the case, this feature isn't support as KVM automatically makes the selection.
I hope this has been helpful!
The second question you answered regarding CPU wasn't quite the answer I was looking for, I'll explain what I mean.
When a Linode is created, any Linux operating system will see more than one CPU, each CPU having one core. As a result, any Windows virtual machine I've used will only see two CPU's. If there was a way to alter this, so the Linode would see multiple cores on a single CPU, rather than virtualizing it as multiple CPU's, that could be useful if someone is running something such as Windows on something that provides more than two virtual CPU's, such as on some of the 16 CPU plans. I'd think this could be a selection in a configuration profile easily enough. On the host, KVM would still use the CPU cores as it did before, but the guest would simply see it differently, multiple cores on a single CPU, rather than multiple CPU's with single cores. Hopefully that makes sense.
@tech10 Thanks for breaking that down for me! That does make sense, and it's a great option. That being said, this option isn't a configuration we currently have our host set up to offer. We don't have native support for Windows servers, but this is a something a few of our customers do use. I'm going to add this feature to our internal tracker to make note of your request.