I'm trying to install Windows 7 as the guest OS in a virtual machine hosted by my 64-bit Ubuntu Karmic box. I get to the point of selecting my language settings and clicking 'install now', but a short while later I get a blue screen of death.
I've tried a few variations, including using the 32-bit version of Windows 7, which fails very quickly. The virt-install
command I've tried includes this:
sudo virt-install --connect qemu:///system -n ksm-win7 -r 2048 \
--disk path=/home/kief/VM-Images/ksm-win7.qcow2,size=50 \
-c /var/Software/Windows7/Full/64bit/SW_DVD5_SA_Win_Ent_7_64BIT_English_Full_MLF_X15-70749.ISO \
--vnc --os-type windows --os-variant vista --hvm
The limited info I could find suggested that 'Vista' should work as the –os-variant, I haven't found any values specific to Windows 7.
Here's my blue screen:
I've found very little by Googling, so I'm guessing this isn't a case of KVM simply not supporting Windows 7.
Update:
I have been able to successfully create a Windows 7 VM using the graphical "Virtual Machine Manager" app, although I don't really understand the cause of the problem with the VM created with virt-install
. Comparing the configuration files under /etc/libvirt/qemu provides some clues, although I don't know enough to interpret them properly. The interesting differences in the two VM configurations are:
--- win7-virt-install.xml
+++ win7-vmm.xml
-<domain type='qemu'>
+<domain type='kvm'>
@@ -21 +21 @@
- <emulator>/usr/bin/qemu-system-x86_64</emulator>
+ <emulator>/usr/bin/kvm</emulator>
@@ -23 +23 @@
- <source file='/home/kief/VM-Images/ksm-win7.qcow2'/>
+ <source file='/var/lib/libvirt/images/ksm-win7x64.img'/>
I'm not sure if this means the working VM is not using qemu at all, or if there is some other difference in the way it's used with kvm.
Update2:
So I've answered my own question (mostly) below. A KVM VM needs to use KVM's own CPU emulation rather than qemu's in order for me to get Windows 7 installed. I'm not sure whether there is something that can be done to get it working on a qemu-emulation CPU, or whether a newer version will support it. But at least it is possible to get it running on a KVM VM.
Best Answer
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
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.
If you're using a disk image to load the OS, use this command.
Here's the breakdown of the commands:
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:
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.