Назад | Перейти на главную страницу

IRQL_NOT_LESS_OR_EQUAL после перемещения гостя Windows XP на новый хост виртуальной машины

У меня два сервера виртуальных машин, оба похожи на 64-битные машины, одинаковый процессор и т.д. Оба работают с KVM с дисками на основе LVM. Одна машина использует CentOS 6 Minimal в качестве ОС хоста, другая - Ubuntu Server 11.04.

Я переместил диски гостевой машины, используя dd over ssh, пока гости были выключены.

Я могу перемещать гостевые машины сервера Ubuntu между двумя хостами, и они нормально работают на любом из них. Моя гостевая машина Windows была создана на хосте Ubuntu и там работает нормально, но сразу при загрузке выдает ошибку синего экрана, когда я пытаюсь запустить ее на хосте CentOS.

Ошибка выложена плиткой: IRQL_NOT_LESS_OR_EQUAL и гласит:

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

Информация о поддержке Microsoft, похоже, указывает на проблему с оборудованием и предлагает такие вещи, как обновление BIOS и удаление компонентов компьютера. Очевидно, проблема здесь не в этом, поскольку оборудование виртуализировано.

Я снова попытался переместить гостевой диск, чтобы убедиться, что данные не были повреждены во время перемещения, но это не устранило проблему.

Кто-нибудь еще сталкивался с этой проблемой при попытке переместить гостевые машины Windows между хостами KVM? Можно ли что-нибудь сделать, чтобы 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 по-прежнему не загружается. Это заставляет меня думать, что проблема связана с совместимостью CentOS и Ubuntu, а не с совместимостью хост-оборудования. Все еще не знаю, что попробовать.

Я видел эту ошибку каждый раз, когда выключаю свою виртуальную машину win7 из QEMU / KVM. И, наконец, из-за параметра арки. Я переключаю свою конфигурацию xml с arch = i686 на arch = x86_64. Тогда я мог корректно выключить эту виртуальную машину. Надеюсь, это поможет вам.

Этот код остановки с первым параметром, установленным на что-то относительно небольшое (в данном случае 0x1016), означает, что какой-то код, работающий в режиме ядра, возможно, драйвер устройства, попытался получить доступ к адресу виртуальной памяти 0x1016. На самом деле это происходит только тогда, когда этот код использует нулевой указатель (который недействителен), а затем добавляет к нему некоторое смещение, в данном случае 0x1016. Это почти наверняка ошибка драйвера устройства, вызванная перемещением виртуальной машины из одной среды в аналогичную и связанную, но другую.

Я предлагаю вам вернуть виртуальную машину в исходную среду и удалить все паравиртуализированные драйверы. Затем попробуйте переместить его. Если это сработает, повторно примените паравиртуализированные драйверы из новой среды.

Я предполагаю, что ошибка связана с типом машины. У тебя есть:

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

Но я не думаю, что ubuntu может запускать этот тип машины.

возможности virsh | grep rhel

На моей машине с Ubuntu это ноль. Возможно, измените это на другой тип компьютера с Windows, который находится в списке возможностей ubuntu. Запустите возможности virsh, посмотрите под

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