Windows 7无法在带有qemu的KVM上安装


8

我正在尝试将Windows 7作为来宾OS安装在我的64位Ubuntu Karmic盒托管的虚拟机中。我可以选择我的语言设置并单击“立即安装”,但是不久之后,我得到了蓝屏死机。

我尝试了一些变体,包括使用Windows 7的32位版本,该版本很快就会失败。virt-install我尝试过的命令包括:

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

我可以找到的有限信息表明'Vista'应该作为--os-variant起作用,我还没有找到Windows 7特有的任何值。

这是我的蓝屏:

蓝屏

我对Googling的了解很少,所以我猜测这不是KVM根本不支持Windows 7的情况。

更新:

尽管我真的不太了解使用创建的VM的问题的原因,但我已经能够使用图形化的“虚拟机管理器”应用程序成功创建Windows 7 VM virt-install。比较/ etc / libvirt / qemu下的配置文件提供了一些线索,尽管我不了解如何正确地解释它们。两种VM配置之间的有趣差异是:

--- 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'/>

我不确定这是否意味着运行中的VM根本没有使用qemu,或者与kvm的使用方式是否存在其他差异。

更新2:

因此,我已经在下面回答了我自己的问题(大部分是)。为了让我安装Windows 7,KVM VM需要使用KVM自己的CPU仿真而不是qemu。我不确定是否可以做一些事情以使其在qemu仿真CPU上运行,或者是否有更新的版本支持它。但是至少可以在KVM VM上运行它。

Answers:


7

这是简单的方法

除非您有特定的原因为什么要使用virt-install安装GuestOS,否则这是不使用virt-install进行安装的“简便”方法。

我有安装Windows 7的可运行VM。这是我创建它的方式。

步骤1:创建虚拟磁盘映像

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

这将创建qcow2格式的虚拟磁盘。将分区大小设置为100g(千兆字节)将不会分配100gb的物理硬盘空间。虚拟分区只会占用与其包含的数据一样多的空间。100克就能做到,所以您(希望)永远不需要增加体积。增大qcow2图像的默认大小仍然是一件难事

步骤2:安装作业系统

如果您使用实际的物理CD-ROM加载操作系统,请使用以下命令。

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

如果使用磁盘映像加载操作系统,请使用此命令。

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

以下是命令的细分:

  • kvm-调用内核虚拟机(显而易见)
  • -m 750-为虚拟机分配750mb内存
  • -cd-rom设置cd-rom。对于物理磁盘,请使用与HostOS相同的磁盘。对于图像,请提供图像文件的路径。
  • -boot d从cd-rom引导虚拟机

我将初始负载的内存占用设置为750,比较保守,因此我可以确保安装完成而不会耗尽内存。对于后续加载,我通常将其设置为512。

注意:AFIAK,kvm命令仅在Debian / Ubuntu或其衍生版本的最新版本中有效。如果它不起作用,则等效(且更常见)的命令是qemu-system-x86_64或qemu-kvm(32位)。

在完成整个安装过程之后,虚拟机应重新启动进入可正常运行的操作系统。要再次加载VM,只需启动以下命令:

kvm -m 512 vdisk.img

使用任何命令行开关,您都需要安装其他物理磁盘,硬件等。要在命令行开关上查找信息,请检查kvm --help。

如果您不了解“半虚拟化”和“本地虚拟化”之间的区别,Matthias已经对这些区别做了很好的解释

有关此过程的更多“深入”说明,请阅读本文


3

使用qemu虚拟化安装Windows时出现此问题的原因是qemu“半虚拟化”与KVM“本地虚拟化”之间的差异。准虚拟化意味着它模拟一个CPU,并且在客户端(虚拟系统)一侧需要一个特殊的内核,以便该系统知道如何正确调用CPU功能。这就是并非所有系统都可以在没有KVM的情况下使用qemu运行的原因。

另一方面,使用KVM的虚拟系统可以直接访问CPU(因为KVM使用AMD / Intel硬件虚拟化支持)。在那种情况下,不需要特殊的内核。缺点是主机需要具有支持此硬件虚拟化的现代CPU(在AMD上称为SVM,在Intel上称为VT-x),并且客户端系统必须能够在该CPU上运行(这不是问题,因为大多数系统可以在x86上运行),从而降低了可移植性。


1
+1很好地解释了“半虚拟化”与“本地虚拟化”之间的差异
Evan Plaice 2010年

2

0x1e异常是KMODE_EXCEPTION_NOT_HANDLED,通常是与硬件有关或与设备驱动程序有关的故障。我的猜测是,无论出于何种原因,Windows都不喜欢虚拟机中的仿真硬件。

您是否尝试过使用VirtualBox?他们有一个针对Karmic Koala的发行版,并且它们支持Windows 7(我现在正在Windows XP机器上运行Win7)。


谢谢,我想坚持使用KVM,因为我们在Eucalyptus中使用它。对我来说,这既是学习活动,又是运行Windows 7的实际需要。
基夫

1

经过与同事的研究和咨询,问题似乎出在qemu CPU仿真上。我的virt-install命令使用qemu的CPU仿真创建了KVM虚拟机。VMM使用KVM自己的CPU仿真器创建了KVM虚拟机(尽管仍然使用qemu来仿真PC的其他部分,因为当前版本的KVM为此使用qemu)。

通过在我的virt-install命令中添加--accelerate参数,我可以创建一个VM并在其上安装Windows 7。

因此,答案似乎是Windows 7无法使用qemu-kvm-0.11.0 CPU仿真安装在虚拟机上,但是可以通过使用KVM自己的CPU仿真来解决。使用--accelerate选项对virt-install进行安装。配置文件参数将为<domain type="kvm">而不是<domain type="qemu">


谢谢你!我按照建议编辑了xml文件,将kvm替换为qemu并安装了Win7 64bit,没有问题!(在Fed12 64bit上运行)

0

从上面我看到的另一个区别是KVM应该仅是32位仿真...或者至少与突出显示的XML差异有关。

似乎已向KVM添加了64位支持,因此--accelerate,如果您的发行版为此内核构建了内核,那么qemu-system-x86_64 可能会同时提供KVM和64位。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.