У меня два сервера виртуальных машин, оба похожи на 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>