Вопрос или проблема
Я использую машину Debian Jessie с установленными kvm и libvirt. Гостевые машины Linux работают нормально, но у меня есть проблемы с запуском машины Windows. У меня не установлено графическое окружение. Поэтому установка осуществляется через virt-install.
Вот команда для создания гостевой машины:
virt-install \
--name=win1 \
--memory 2048 \
--os-type=windows \
--os-variant=win2k8 \
--network bridge=br0 \
--disk pool=data,size=8 \
--cdrom /data/windows.iso \
--graphics vnc,password=testpw
Я могу запустить VNC-сессию. Я также вижу, как установка Windows загружает файлы. Но после загрузки я вижу только черный экран. Я уже пробовал подключение через spice, но это также не работает.
Вероятно, есть проблема с эмуляцией графики?
Есть идеи, в чем может быть проблема?
Обновление 30/09/2016
Я только что попробовал virt-manager для создания гостевой машины Windows, и все работает прекрасно. Поэтому мне стало интересно, в чем разница между моей собственной командой virt-install и командой, выполняемой virt-manager. Я сравнил лог-файл гостевой машины, находящийся по адресу /var/log/libvirt/qemu/win1.log
Полная команда от virt-manager:
LC_ALL=C PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin QEMU_AUDIO_DRV=spice /usr/bin/kvm -name win2k8 -S -machine pc-i440fx-2.1,accel=kvm,usb=off -cpu Opteron_G4 -m 4096 -realtime mlock=off -smp 2,sockets=2,cores=1,threads=1 -uuid 9fd58d92-1926-4df3-8ec5-c8f2d5ebe358 -no-user-config -nodefaults -chardev socket,id=charmonitor,path=/var/lib/libvirt/qemu/win2k8.monitor,server,nowait -mon chardev=charmonitor,id=monitor,mode=control -rtc base=localtime,driftfix=slew -global kvm-pit.lost_tick_policy=discard -no-hpet -no-reboot -global PIIX4_PM.disable_s3=1 -global PIIX4_PM.disable_s4=1 -boot strict=on -device ich9-usb-ehci1,id=usb,bus=pci.0,addr=0x5.0x7 -device ich9-usb-uhci1,masterbus=usb.0,firstport=0,bus=pci.0,multifunction=on,addr=0x5 -device ich9-usb-uhci2,masterbus=usb.0,firstport=2,bus=pci.0,addr=0x5.0x1 -device ich9-usb-uhci3,masterbus=usb.0,firstport=4,bus=pci.0,addr=0x5.0x2 -device virtio-serial-pci,id=virtio-serial0,bus=pci.0,addr=0x6 -drive file=/data/vserver/win2k8.qcow2,if=none,id=drive-ide0-0-0,format=qcow2 -device ide-hd,bus=ide.0,unit=0,drive=drive-ide0-0-0,id=ide0-0-0,bootindex=2 -drive file=/data/windows.iso,if=none,id=drive-ide0-0-1,readonly=on,format=raw -device ide-cd,bus=ide.0,unit=1,drive=drive-ide0-0-1,id=ide0-0-1,bootindex=1 -netdev tap,fd=24,id=hostnet0 -device rtl8139,netdev=hostnet0,id=net0,mac=52:54:00:65:f8:d8,bus=pci.0,addr=0x3 -chardev pty,id=charserial0 -device isa-serial,chardev=charserial0,id=serial0 -chardev spicevmc,id=charchannel0,name=vdagent -device virtserialport,bus=virtio-serial0.0,nr=1,chardev=charchannel0,id=channel0,name=com.redhat.spice.0 -device usb-tablet,id=input0 -spice port=5900,addr=0.0.0.0,disable-ticketing,seamless-migration=on -device qxl-vga,id=video0,ram_size=67108864,vram_size=67108864,bus=pci.0,addr=0x2 -device intel-hda,id=sound0,bus=pci.0,addr=0x4 -device hda-duplex,id=sound0-codec0,bus=sound0.0,cad=0 -chardev spicevmc,id=charredir0,name=usbredir -device usb-redir,chardev=charredir0,id=redir0 -chardev spicevmc,id=charredir1,name=usbredir -device usb-redir,chardev=charredir1,id=redir1 -chardev spicevmc,id=charredir2,name=usbredir -device usb-redir,chardev=charredir2,id=redir2 -chardev spicevmc,id=charredir3,name=usbredir -device usb-redir,chardev=charredir3,id=redir3 -device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x7 -msg timestamp=on
Полная команда от virt-install:
LC_ALL=C PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin QEMU_AUDIO_DRV=spice /usr/bin/kvm -name win2k8 -S -machine pc-i440fx-2.1,accel=kvm,usb=off -cpu Opteron_G4 -m 4096 -realtime mlock=off -smp 1,sockets=1,cores=1,threads=1 -uuid 4513688e-f1ef-4bad-a0db-b7c0d3e0f6ea -no-user-config -nodefaults -chardev socket,id=charmonitor,path=/var/lib/libvirt/qemu/win2k8.monitor,server,nowait -mon chardev=charmonitor,id=monitor,mode=control -rtc base=localtime,driftfix=slew -global kvm-pit.lost_tick_policy=discard -no-hpet -no-reboot -boot strict=on -device ich9-usb-ehci1,id=usb,bus=pci.0,addr=0x5.0x7 -device ich9-usb-uhci1,masterbus=usb.0,firstport=0,bus=pci.0,multifunction=on,addr=0x5 -device ich9-usb-uhci2,masterbus=usb.0,firstport=2,bus=pci.0,addr=0x5.0x1 -device ich9-usb-uhci3,masterbus=usb.0,firstport=4,bus=pci.0,addr=0x5.0x2 -device virtio-serial-pci,id=virtio-serial0,bus=pci.0,addr=0x6 -drive file=/data/vserver/win2k8.qcow2,if=none,id=drive-ide0-0-0,format=qcow2 -device ide-hd,bus=ide.0,unit=0,drive=drive-ide0-0-0,id=ide0-0-0,bootindex=2 -drive file=/data/windows.iso,if=none,id=drive-ide0-0-1,readonly=on,format=raw -device ide-cd,bus=ide.0,unit=1,drive=drive-ide0-0-1,id=ide0-0-1,bootindex=1 -netdev tap,fd=25,id=hostnet0 -device rtl8139,netdev=hostnet0,id=net0,mac=52:54:00:d8:52:9d,bus=pci.0,addr=0x3 -chardev pty,id=charserial0 -device isa-serial,chardev=charserial0,id=serial0 -chardev spicevmc,id=charchannel0,name=vdagent -device virtserialport,bus=virtio-serial0.0,nr=1,chardev=charchannel0,id=channel0,name=com.redhat.spice.0 -device usb-tablet,id=input0 -spice port=5900,addr=0.0.0.0,disable-ticketing,seamless-migration=on -device qxl-vga,id=video0,ram_size=67108864,vram_size=67108864,bus=pci.0,addr=0x2 -device intel-hda,id=sound0,bus=pci.0,addr=0x4 -device hda-duplex,id=sound0-codec0,bus=sound0.0,cad=0 -chardev spicevmc,id=charredir0,name=usbredir -device usb-redir,chardev=charredir0,id=redir0 -chardev spicevmc,id=charredir1,name=usbredir -device usb-redir,chardev=charredir1,id=redir1 -chardev spicevmc,id=charredir2,name=usbredir -device usb-redir,chardev=charredir2,id=redir2 -chardev spicevmc,id=charredir3,name=usbredir -device usb-redir,chardev=charredir3,id=redir3 -device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x7 -msg timestamp=on
Есть две разницы:
Разница 1:
virt-manager: -netdev tap,fd=24,id=hostnet0
virt-install: -netdev tap,fd=25,id=hostnet0
Разница 2:
virt-manager: -global PIIX4_PM.disable_s3=1 -global PIIX4_PM.disable_s4=1
virt-install: (отсутствует)
Что означают эти опции?
Не используйте устройства virtio без соответствующих драйверов для Windows. Сначала вы можете попробовать установить Windows на эту виртуальную машину:
virt-install \
--name=win1 \
--memory 2048 \
--os-type=windows \
--os-variant=win2k8 \
--network bridge=br0,model=e1000 \
--disk pool=data,size=8,bus=ide \
--cdrom /data/windows.iso \
--video=vga \
--graphics vnc,password=testpw
Вы можете попытаться установить виртуальную машину на устройствах virtio, но вам нужно будет добавить драйверы virtio в Windows в начале установки Windows.
Драйверы можно получить с http://www.linux-kvm.org/page/WindowsGuestDrivers/Download_Drivers
Ответ или решение
Вот детальный ответ на вашу проблему с запуском Windows гостя в KVM на базе Debian Jessie без GUI, используя virt-install
. Основные проблемы могут возникать из-за неправильной конфигурации параметров виртуальной машины или отсутствия необходимых драйверов.
Анализ проблемы
На основе предоставленных вами данных и сравнения команд, выполняемых virt-manager
и virt-install
, выяснены два основных различия:
-
Сетевой интерфейс:
- virt-manager:
-netdev tap,fd=24,id=hostnet0
- virt-install:
-netdev tap,fd=25,id=hostnet0
Это различие может быть связано с установкой сетевых настройких, однако оно вряд ли влияет на отображение черного экрана.
- virt-manager:
-
Энергосбережение:
- virt-manager добавляет параметры:
-global PIIX4_PM.disable_s3=1 -global PIIX4_PM.disable_s4=1
Эти параметры отключают состояния сна S3 и S4, которые известны проблемами совместимости с некоторыми конфигурациями гостевых ОС и могут вызывать нестабильное поведение после загрузки Windows.
- virt-manager добавляет параметры:
Решение проблемы
-
Используйте стандартные устройства:
- Убедитесь, что используете стандартный сетевой интерфейс
e1000
, который поддерживается Windows из коробки:--network bridge=br0,model=e1000
- Установите тип видеоадаптера как
vga
, который обычно более совместим для установки Windows без дополнительных драйверов:--video=vga
- Убедитесь, что используете стандартный сетевой интерфейс
-
Измените конфигурацию диска:
- Убедитесь, что используете IDE для хранения, так как Windows из коробки поддерживает этот стандарт без дополнительных драйверов:
--disk pool=data,size=8,bus=ide
- Убедитесь, что используете IDE для хранения, так как Windows из коробки поддерживает этот стандарт без дополнительных драйверов:
-
Добавьте параметры энергосбережения:
- Включите параметры для отключения состояния сна, которые могут вызывать проблемы с совместимостью:
-global PIIX4_PM.disable_s3=1 -global PIIX4_PM.disable_s4=1
- Включите параметры для отключения состояния сна, которые могут вызывать проблемы с совместимостью:
-
Проверьте драйверы:
- Если вы планируете использовать virtio-устройства, убедитесь, что они поддерживаются вашей версией Windows. Их необходимо подключать в начале установки Windows, что требует ISO с драйверами virtio, доступными здесь.
Полная команда для virt-install
Подготовив все необходимые изменения, попробуйте следующую команду для создания гостевого Windows:
virt-install \
--name=win1 \
--memory 2048 \
--os-type=windows \
--os-variant=win2k8 \
--network bridge=br0,model=e1000 \
--disk pool=data,size=8,bus=ide \
--cdrom /data/windows.iso \
--video=vga \
--graphics vnc,password=testpw \
--extra-args " -global PIIX4_PM.disable_s3=1 -global PIIX4_PM.disable_s4=1"
Следуя этим шагам, вы сможете устранить проблему черного экрана при установке Windows в KVM. Также, важно убедиться, что ваш ISO образ Windows корректен и рабочий.