The old Windows 2003 Server of a customer, which was mentioned in an earlier post, encountered some problems since the last windows update. Varied blue screens indicated a problem with the virtual storage controller. As this was still an virtual IDE controller, an update to the VirtIO SCSI drivers was the logic step to do.

Many sources I found on the internet on this topic suggested to reinstall/repair-install Windows, but this was not a possibility. This post sums up how to change the storage controller of a Windows installation without reinstalling Windows. The reason why someone wants to do this is a change of the hard disk (from IDE to SATA, from physical to virtual, etc.) or a replacement of controller hardware, e.g. your motherboard breaks down.

Note: To change the storage controller of a Windows 2003 Server/XP machine, a registry patch needs to be installed first. This was also mentioned in the first post.

The first step is to install the new driver. In the case dicussed here, this means to force Windows to install the drivers of the VirtIO Windows driver CD. There is no setup utility to install the drivers, and an installation with the help of the context menu of the *.inf files did not work either. The solution was to add a second VirtIO SCSI controller to the virtual machine.

# touch /tmp/storage.img
# gnt-instance modify -H kvm_extra="-drive file=/tmp/storage.img\\,if=none\\,id=tmp\\,format=raw\\,cache=none\\,aio=native -device virtio-blk-pci\\,drive=tmp\\,id=virtio-tmp\\,bus=pci.0\\,addr=0x4" <hostname>

After a reboot, Windows will recognize the new controller and you can install the drivers by locating on the CD mentioned above.

After this step the standard controller of the guest can be changed to paravirtual:

# gnt-instance modify -H disk_type=paravirtual <hostname>
# gnt-instance modify -H kvm_extra=default <hostname>

After this last step your system should boot up with the new paravirtual storage controller. You will feel a big latency difference on the Windows desktop.

Many things can go wrong while trying to accomplish this. If you get stuck in the process do not hesitate to contact me.