Windows 7 无法使用 qemu 在 KVM 上安装

Windows 7 无法使用 qemu 在 KVM 上安装

我正在尝试在由我的 64 位 Ubuntu Karmic 机托管的虚拟机中安装 Windows 7 作为客户操作系统。我选择语言设置并点击“立即安装”,但不久之后,系统出现蓝屏死机。

我尝试了几种不同的方法,包括使用 32 位版本的 Windows 7,但很快就失败了。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 的值。

这是我的蓝屏:

蓝屏死机

我通过谷歌搜索发现的结果很少,所以我猜这并不是 KVM 不支持 Windows 7 的情况。

更新:

我已经能够使用图形“虚拟机管理器”应用程序成功创建 Windows 7 VM,尽管我不太了解使用创建的 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'/>

我不确定这是否意味着工作虚拟机根本没有使用 qemu,或者它与 kvm 的使用方式是否存在其他差异。

更新2:

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

答案1

这是简单的方法

除非您有特定原因要使用 virt-install 安装 GuestOS,否则这里是不使用 virt-install 的“简单”方法。

我有一个安装了 Windows 7 的虚拟机。下面是我创建它的方法。

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

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

这将创建一个 qcow2 格式的虚拟磁盘。将分区大小设置为 100g(千兆字节)将不是分配 100gb 的物理硬盘空间。虚拟分区仅占用其所含数据的空间。100g 只是让您(希望)永远不需要增加大小。增加 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 或其衍生产品。如果它不起作用,等效(且更常见)命令是 32 位的 qemu-system-x86_64 或 qemu-kvm。

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

kvm -m 512 vdisk.img

无论使用什么命令行开关,您都需要安装额外的物理磁盘、硬件等。要查找有关命令行开关的信息,请检查 kvm --help。

如果你不明白“半虚拟化”和“原生虚拟化”之间的区别Matthias 已经对差异做出了很好的解释

有关此过程的更“深入”解释阅读本文

答案2

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

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

答案3

0x1e 异常是KMODE_EXCEPTION_NOT_HANDLED,这通常是与硬件或设备驱动程序相关的故障。我的猜测是,无论出于什么原因,Windows 都不喜欢虚拟机模拟的硬件。

您是否尝试过使用虚拟盒? 他们发布了 Karmic Koala 版本,并且支持 Windows 7(我现在在 Windows XP 机器上运行 Win7)。

答案4

我从上面看到的另一个区别是 KVM 应该只是 32 位仿真……或者至少您的 XML 差异是突出的。

看起来 KVM 已经添加了 64 位支持,因此 qemu-system-x86_64--accelerate可能会/可以为您提供 KVM 和 64 位,前提是您的内核是由您的发行版为其构建的。

相关内容