Paravirtualized Block Drivers for Windows
Introduction
In order to improve disk performance, special paravirtualized block drivers can be installed in Windows guests (also network device drivers exist, see Paravirtualized_Network_Drivers_for_Windows). In order to use them in your Windows guest VM, you have to obtain those drivers and then install them on the guest os.
KVM Guest Support Status can be found here: http://www.linux-kvm.org/page/Guest_Support_Status
About drivers
The KVM project released drivers for Windows Guests (http://www.linux-kvm.org/page/WindowsGuestDrivers/Download_Drivers) The drivers could work with a variety of Microsoft recent OSs, 32 and 64 bits, although newer server systems may require or be easier to setup with "signed" drivers (the following download link brings to unsigned drivers, a the moment).
Signed drivers
Signed drivers may be obtained e.g. buying a redhat subscription, as they provide them to their subscriptors, for similar virtualization purposes). Rumour has that the same or similar "signed" drivers could, in a near future, become freely available through the Fedora linux distribution (by red hat).
In the meanwhile, it seems that there is a little workaround, it's not pretty but it works. The problem is the missing driver "certification", of unsigned drivers. But you can temporarily disable this check ONLY for the current session by using the F8 advanced boot options. To use this keep pressing F8 as soon as you boot your guest and you'll see a few options: select "Disable Driver Signature Enforcement" and follow procedure described in this post. Of course you have to do this every time you boot that VM...
This site has a list (though you can't download anything) of certified redhat virtio drivers for windows: http://www.windowsservercatalog.com/results.aspx?text=Red+Hat&bCatID=1282
Download drivers
Download the latest kvm-driver-disc (ISO) from linux-kvm.org ISO to your Proxmox VE server. Later you will need to make this ISO available as CD device in your guest VM in PVE.
In the same web page you will find a few links to help you to "self-sign" the drivers (links point to Microsoft msdn and developer pages). See also http://marc.info/?l=kvm&m=125727943113418&w=4
Alternatively, an iso image containing XP drivers can be found here: http://www.linux-kvm.com/content/kvm-gpl-windows-xp-block-driver-update
For Windows 7 or Server 2008 R2 there's yet another here: http://alt.fedoraproject.org/pub/alt/virtio-win/latest/images/bin/
Installation
The target is to make Windows install virtio drivers for all of its disks. There could be more strategies to accomplish this task:
Adding a temporary drive
see (http://www.linux-kvm.com/content/redhat-54-windows-virtio-drivers-part-2-block-drivers)
- tested guest OSs:
- windows 2003 r2 32 bit guest
- windows 2000 server sp4
The base Windows OS in your guest VM knows nothing about virtio drivers, and for this reason you can't simply stop the VM, change the disk to virtio and reboot. You have to force Windows to install virtio drivers for a virtio disk (provided by PVE), how? Adding a temporary, small, virtio disk to the VM, then booting Windows and make it recognize a new disk, and ask you the drivers (which, at that moment, it doesn't know of).
- Prerequisite: the Base Windows OS should be already running (IDE drives, usually)
- Shut down the VM and, from PVE:
- add a small virtio disk to the VM through PVE web interface (say, 1GB)
- add the ISO just downloaded as a CD device through PVE web interface
- Make shure that the primary boot device is still the old (IDE) boot disk, not the new virtio disk, through PVE web interface.
- Boot the VM and log in as a local administrator
- Window should detect the new disk has a new unknown device and ask you for its drivers:
- Select No when the wizard asks you to search for the driver software
- Select “install from a list of specific location” .
- Select the Browse button and navigate to the driver CD
- Select the appropriate folder for your guest version/architecture.
- Click Next to begin the install.You will get a prompt warning about the driver not being signed. Go ahead and select “Continue Anyway”.
- Finish then driver installation
You should now be able to enter "disk management", from windows, and initalize and format the temporary virtio disk (this is really not necessary but it will prove you that the driver is installed and running)
(Note: doing this on windows 2000 could show a strange, but apparently safe, behaviour: in the "disk management" control panel, you may see something like 8 times the drives you actually have!!! In fact, if you add 1 virtio drive, it shows 8 drives, but it's actually the same, repeated. You can in fact "sign" just the first, and then see that all "duplicated" drives are signed as well. However, the drives seems to behave and perform very well indeed. I signed, created partition, formatted, just on the first one, with no side effects, up to now. In "My computer" you will see just 1 disk, anyway.)
Now, Windows system has the virtio driver installed, and we need to convert all of its previous (IDE) system disks to virtio.
- Shut down the VM and, from PVE and:
- remove (from the vm, not from disk) all the (IDE) disk it had previoulsy, and
- re-add them, in the same order, as virtio disks
- Make shure that the primary boot device is still the old (IDE) boot disk, through PVE web interface.
- Boot again the VM and log in as a local administrator
- Window should detect it has new unknown devices and ask you for the drivers
- You should have the option to use again the ISO mounted in the CD drive
- You should also be able to tell windows to use "current" drivers, it now already has.
- You don't need to initialize/format these drives, of course :-)
After finishing, through PVE web interface, you can:
- remove the first, temporary, virtio disk (if you don't need that more space on Windows)
- remove the ISO mounted as CD device
During windows installation
This may be possible somehow, see:
This may happen mounting a floppy image on kvm, though i don't know how to add floppy support in PVE
Here is a forum thread about this, that may help: