将 Windows XP 客户机移至新的虚拟机主机后出现 IRQL_NOT_LESS_OR_EQUAL

将 Windows XP 客户机移至新的虚拟机主机后出现 IRQL_NOT_LESS_OR_EQUAL

我有两台虚拟机服务器,都是类似规格的 64 位机器,处理器相同等。两台都运行基于 LVM 磁盘的 KVM。一台机器使用 CentOS 6 Minimal 作为主机操作系统,另一台使用 Ubuntu Server 11.04。

当客户机关闭时,我通过 ssh 使用 dd 移动了客户机磁盘。

我可以在两台主机之间移动 Ubuntu 服务器客户机,它们在任意一台主机上都可以正常工作。我的 Windows 客户机是在 Ubuntu 主机上创建的,在那里运行良好,但当我尝试在 CentOS 主机上运行它时,启动时立即出现蓝屏错误。

错误信息如下IRQL_NOT_LESS_OR_EQUAL

STOP: 0x0000000A (0x00001016, 0x00000002, 0x00000000, 0x804F8FEC)

Microsoft 支持信息似乎表明存在硬件问题,并建议进行 BIOS 更新和移除计算机组件等操作。显然这不是问题所在,因为硬件是虚拟化的。

我尝试再次移动客户磁盘以确保数据在移动过程中没有被损坏,但问题并没有得到解决。

尝试在 KVM 主机之间移动 Windows 客户机时,还有其他人遇到过此问题吗?有什么办法可以让 Windows 从一台机器顺利移动到另一台机器?

我的理解是,使用虚拟化硬件,系统可以在任何机器上看到相同的硬件设备,因此可以使用相同的驱动程序,因为实际硬件对操作系统是隐藏的。有没有例外,驱动程序可能是一个问题?最后,除了完全重新安装 Windows 之外,还有什么方法可以解决这个问题?

更新:

XML 机器定义:

<domain type='kvm'>
  <name>xpvm2</name>
  <uuid>6ddec00b-9f00-29ad-5197-98264c24cabf</uuid>
  <memory>1048576</memory>
  <currentMemory>1048576</currentMemory>
  <vcpu>1</vcpu>
  <os>
    <type arch='x86_64' machine='rhel6.2.0'>hvm</type>
    <boot dev='hd'/>
  </os>
  <features>
    <acpi/>
    <apic/>
    <pae/>
  </features>
  <clock offset='localtime'/>
  <on_poweroff>destroy</on_poweroff>
  <on_reboot>restart</on_reboot>
  <on_crash>restart</on_crash>
  <devices>
    <emulator>/usr/libexec/qemu-kvm</emulator>
    <disk type='block' device='disk'>
      <driver name='qemu' type='raw'/>
      <source dev='/dev/mapper/mainvg-vm_xpvm2'/>
      <target dev='hda' bus='ide'/>
      <address type='drive' controller='0' bus='0' unit='0'/>
    </disk>
    <controller type='ide' index='0'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>
    </controller>
    <interface type='bridge'>
      <mac address='52:54:00:f8:3a:21'/>
      <source bridge='br0'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
    </interface>
    <serial type='pty'>
      <target port='0'/>
    </serial>
    <console type='pty'>
      <target type='serial' port='0'/>
    </console>
    <input type='tablet' bus='usb'/>
    <input type='mouse' bus='ps2'/>
    <graphics type='vnc' port='-1' autoport='yes'/>
    <video>
      <model type='vga' vram='9216' heads='1'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
    </video>
    <memballoon model='virtio'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
    </memballoon>
  </devices>
</domain>

更新2

ps -ef | grep qemu (broken into lines for readability)

CentOS 机器:

qemu      9742     1 99 Feb18 ?        22:51:48 /usr/libexec/qemu-kvm
-S -M rhel6.2.0 -enable-kvm
-m 1024
-smp 1,sockets=1,cores=1,threads=1
-name xpvm2
-uuid 6ddec00b-9f00-29ad-5197-98264c24cabf
-nodefconfig
-nodefaults
-chardev socket,id=charmonitor,path=/var/lib/libvirt/qemu/xpvm2.monitor,server,nowait
-mon chardev=charmonitor,id=monitor,mode=control
-rtc base=localtime
-> -no-shutdown
-drive file=/dev/mapper/mainvg-vm_xpvm2,if=none,id=drive-ide0-0-0,format=raw
-device ide-drive,bus=ide.0,unit=0,drive=drive-ide0-0-0,id=ide0-0-0,bootindex=1
-> -netdev tap,fd=28,id=hostnet0
-device rtl8139,netdev=hostnet0,id=net0,mac=52:54:00:f8:3a:21,bus=pci.0,addr=0x3
-chardev pty,id=charserial0
-device isa-serial,chardev=charserial0,id=serial0
-usb
-device usb-tablet,id=input0
-vnc 127.0.0.1:5
-vga std
-device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x4
-> root     23564  9518  0 17:38 pts/0    00:00:00 grep qemu

Ubuntu 机器:

    105       1616     1  7 17:46 ?        00:00:14 /usr/bin/kvm -S -M pc-0.14
-enable-kvm
-m 1024
-smp 1,sockets=1,cores=1,threads=1
-name xpvm2
-uuid 6ddec00b-9f00-29ad-5197-98264c24cabf
-nodefconfig
-nodefaults
-chardev socket,id=charmonitor,path=/var/lib/libvirt/qemu/xpvm2.monitor,server,nowait
-> -mon chardev=charmonitor,id=monitor,mode=readline
-rtc base=localtime
-> -boot c
-drive file=/dev/mapper/mainvg-vm_xpvm2,if=none,id=drive-ide0-0-0,format=raw
-device ide-drive,bus=ide.0,unit=0,drive=drive-ide0-0-0,id=ide0-0-0
-> -netdev tap,fd=18,id=hostnet0
-device rtl8139,netdev=hostnet0,id=net0,mac=52:54:00:f8:3a:21,bus=pci.0,addr=0x3
-chardev pty,id=charserial0
-device isa-serial,chardev=charserial0,id=serial0
-usb
-device usb-tablet,id=input0
-> -vnc 127.0.0.1:0
-vga std
-device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x4
-> myname      1626  1493  0 17:49 pts/0    00:00:00 grep --color=auto qemu

更新 3:

我已经将原始机器上的 Ubuntu 操作系统替换为 CentOS。回到原始主机上,但现在改为 CentOS,XP VM 仍然无法启动。这让我相信问题与 CentOS 与 Ubuntu 兼容性有关,而不是主机硬件的兼容性。仍然不知道该尝试什么。

答案1

该停止代码的第一个参数设置为相对较小的值(在本例中为 0x1016),这意味着在内核模式下运行的某些代码(可能是设备驱动程序)尝试访问虚拟内存地址 0x1016。这实际上只发生在该代码使用空指针(无效)并向其添加一些偏移量(在本例中为 0x1016)时。这几乎肯定是设备驱动程序错误,由将 VM 从一个环境移动到一个相似且相关但不同的环境而引起。

我建议您将虚拟机移回其原始环境并删除所有半虚拟化驱动程序。然后尝试移动它。如果成功,请从新环境中重新应用半虚拟化驱动程序。

答案2

每次我从 QEMU/KVM 关闭 win7 虚拟机时,我都会看到此错误。最后是因为 arch 参数。我将 xml 配置从 arch=i686 切换到 arch=x86_64。然后我可以正常关闭该虚拟机。希望这对您有帮助。

答案3

我猜错误是由机器类型引起的。您有:

<os>
  <type arch='x86_64' machine='rhel6.2.0'>hvm</type>
  <boot dev='hd'/>
</os>

但我不认为 ubuntu 可以运行这种机器类型。

virsh 功能 | grep rhel

在我的 ubuntu 机器上,结果为 nil。可以将其更改为 ubuntu 功能列表中的其他 Windows 机器类型。运行 virsh capabilities,查看

<guest>
  <os_type>hvm</os_type>
  <arch name='x86_64'>

我的是:

  <os>
    <type arch='x86_64' machine='pc-0.12'>hvm</type>
    <boot dev='hd'/>
  </os>

相关内容