Windows 2003 Server 32bit guest on KVM host VirtIO drivers

This was a tough one to figure out, yet, simple to do once I did it right.  I am trying to setup a lab network to do some testing with recovery and migration with older Exchange and Windows servers before we do upgrades to 2012 R2 servers.  I am also needing to test KVM further, because I am seriously considering moving some of our servers to virtual guests, and KVM looks awesome!

I ran into many issues getting Win2k3 to load, mostly because well, its an 03 server!  They are such a pain anymore, and as much as I hate to admit, I kind of like the newer Windows Servers (08 +).  Still prefer Linux though!

Ok to the main point. In order get some reasonable performance in the VM guests, I read that the VirtIO drivers for block devices and network are needed.  After installing them, I agree, much better!  Only problem, they are difficult to install on 03 server!  I find lots of poeple posting similar issues out there, and lots more people posting back “works for me!”.

One thing I needed was to get VirtIO driver loaded on the OS itself, the boot disk.   Loading during the F6 prompt absolutely would not work for me. I could select the driver, it would see it and see the floppy disk image just fine, even using different versions, yet it would not work.

I decided to go with IDE on the OS disk and finish intalling.  This worked fine, its just not very fast.  When install finished, I added a second disk image set to VirtIO type in virt-manager, and rebooted the guest, leaving the original OS on IDE for now. It booted up, detected the SCSI controller was new and attempted to load, but it failed stating “Cannot start this hardware”, which left the yellow exclamation mark in the device manager.

This partially installed driver really broke the OS though! It totally brought the system to a crawl with high cpu usage. Actually the cpu stopped, but it was still at a crawl.  It took minutes just to get it to click on things and open anything.

I was able to boot with F8 and selecting “Last known…” option, which restored my registry and allowed the system to run again.  I tried this with several versions I found online from people mentioning how hard it was to load VirtIO drivers in 03.  08 and newer was a piece of cake!

But then…  I tried once more, adding the current ISO image from Fedora again (I used this first by the way).  Only this time, I selected the \WNet folder for the driver.  Yeah… the “WNet” folder on the ISO… this actually has the SCSI drivers!  Doesn’t make any sense!  “Net” , shouldn’t that be the “network” driver?????   Well, coolness happened, the Red Had SCSI VirtIO Controller installed perfectly, finally!!!!

So next I tried the network, which, if I remember right, it was in the \WLH folder of the ISO. And finally, I added the “balloon” memory driver from teh “XP” folder.  Awesome!  None of that makes any sense!!  If I tried to load or update drivers from any of the other folders, OR allow Windows to find on its own, it wouldn’t work.

So , “yea, that’s the ticket!”  On the VirtIO ISO from Fedora:

\WLH – NIC driver for VirtIO

\WNET – SCSI Controller VirtIO driver

\XP  – Balloon driver (memory management stuff)


UPDATE (next day)
I found out why the naming is confusing:

I guess it has to do with Microsoft legacy naming, like “LH” = Longhorn.


Last note…

Oh also, to get the OS disk to run as VirtIO, you have to just switch it in virt-manager. (or use command line, which I haven’t learned yet) You just need to:
A. load the OS on IDE disk first,B. Add a new, temp VirtIO disk, and install the VirtIO correctly in 03 server
C. Shutdown guest, switch original OS disk from IDE to VirtIO
D. Boot up and should be ok!