Windows 7 fails to install on KVM with qemu

Here's the easy way

Unless you have some specific why you'd install a GuestOS using virt-install, here's the 'easy' way to do it without virt-install.

I have a working VM with Windows 7 installed. Here's how I created it.

Step 1: Create the virtual disk image

qemu-img create -f qcow2 vdisk.img 100g

This creates a virtual disk in the qcow2 format. Setting the partition size to 100g (gigabytes) will not allocate 100gb of physical hard disk space. The virtual partition will only take as much space as the data it contains. The 100g just makes it so you'll (hopefully) never need to increase the size. Increasing a qcow2 image's default size is still a pain in the a** to do.

Step 2: Install the OS

If you're using an actual physical cd-rom to load the OS, use the following command.

sudo kvm -m 750 -cdrom /dev/sr0 -boot d vdisk.img

If you're using a disk image to load the OS, use this command.

sudo kvm -m 750 -cd-rom /path/to/image/image.iso -boot d vdisk.img

Here's the breakdown of the commands:

  • kvm - calls the kernel virtual machine (obvious)
  • -m 750 - allocates 750mb of memory for the virtual machine
  • -cd-rom sets up the cd-rom. For a physical disk use same disk as your HostOS. For a image, provide a path to the image file.
  • -boot d boots the virtual machine from the cd-rom

I set the memory footprint for the initial load to 750 to be conservative so I can be sure that the install finishes without running out of memory. For subsequent loads I usually set it to 512.

Note: AFIAK, the kvm command only works in more recent versions of Debian/Ubuntu or their derivatives. If it doesn't work the equivalent (and more common) command is qemu-system-x86_64 or qemu-kvm for 32 bit.

After you've gone through the whole install process the VM should reboot into a working OS. To load the VM again just launch this command:

kvm -m 512 vdisk.img

With whatever command line switches you need to mount additional physical disks, hardware, etc. To find info on command line switches check kvm --help.

If you don't understand the difference between 'paravirtualization' and 'native virtualization' Matthias' has already made a great explanation of the differences.

For a more 'in depth' explanation of this process read this article.


The reason for this problem with installing windows with the qemu virtualization is the difference between qemu "paravirtualization" and KVMs "native virtualization". Paravirtualization means that it simulates a CPU and needs a special kernel on the side of the client (virtual system) so that this systems knows how to.call the CPU functions correctly. That is the reasons for not all systems being able to run using qemu without KVM.

On the other side, virtual systems using KVM can directly access the CPU (because KVM uses AMD/Intel Hardware Virtualization support). In that case no special kernel is needed. The downside is that the host needs to have a modern CPU which supports this Hardware Virtualisation (called SVM on AMD and VT-x for Intel) and that the client system must be able to run on that CPU (not a problem, as most systems can run on a x86), reducing portability.


The 0x1e exception is KMODE_EXCEPTION_NOT_HANDLED, which is usually either a hardware-related or device driver-related fault. My guess is that, for whatever reason, Windows is not liking the emulated hardware from the virtual machine.

Have you tried using VirtualBox? They have a release for Karmic Koala, and they support Windows 7 (I'm running Win7 right now on a Windows XP box).