我有两台虚拟机服务器,都是类似规格的 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>