Windows 7 no se instala en KVM con qemu

8

Estoy tratando de instalar Windows 7 como SO invitado en una máquina virtual alojada en mi caja Ubuntu Karmic de 64 bits. Llego al punto de seleccionar la configuración de mi idioma y hacer clic en 'instalar ahora', pero poco después aparece una pantalla azul de la muerte.

He intentado algunas variaciones, incluido el uso de la versión de 32 bits de Windows 7, que falla muy rápidamente. El virt-installcomando que he probado incluye esto:

sudo virt-install --connect qemu:///system -n ksm-win7 -r 2048 \
--disk path=/home/kief/VM-Images/ksm-win7.qcow2,size=50 \
-c /var/Software/Windows7/Full/64bit/SW_DVD5_SA_Win_Ent_7_64BIT_English_Full_MLF_X15-70749.ISO \
--vnc --os-type windows --os-variant vista --hvm

La información limitada que pude encontrar sugirió que 'Vista' debería funcionar como la variante --os, no he encontrado ningún valor específico para Windows 7.

Aquí está mi pantalla azul:

BSOD

Google ha encontrado muy poco, así que supongo que este no es un caso de KVM que simplemente no es compatible con Windows 7.

Actualizar:

He podido crear con éxito una VM de Windows 7 usando la aplicación gráfica "Virtual Machine Manager", aunque realmente no entiendo la causa del problema con la VM creada con virt-install. Comparar los archivos de configuración en / etc / libvirt / qemu proporciona algunas pistas, aunque no sé lo suficiente como para interpretarlas correctamente. Las diferencias interesantes en las dos configuraciones de VM son:

--- win7-virt-install.xml
+++ win7-vmm.xml
-<domain type='qemu'>
+<domain type='kvm'>
@@ -21 +21 @@
-    <emulator>/usr/bin/qemu-system-x86_64</emulator>
+    <emulator>/usr/bin/kvm</emulator>
@@ -23 +23 @@
-      <source file='/home/kief/VM-Images/ksm-win7.qcow2'/>
+      <source file='/var/lib/libvirt/images/ksm-win7x64.img'/>

No estoy seguro de si esto significa que la máquina virtual en funcionamiento no está usando qemu en absoluto, o si hay alguna otra diferencia en la forma en que se usa con kvm.

Actualización2:

Así que he respondido mi propia pregunta (principalmente) a continuación. Una máquina virtual KVM necesita usar la propia emulación de CPU de KVM en lugar de la qemu para poder instalar Windows 7. No estoy seguro de si hay algo que se pueda hacer para que funcione en una CPU de emulación qemu, o si una versión más nueva lo admitirá. Pero al menos es posible hacerlo funcionar en una máquina virtual KVM.

Encanto
fuente

Respuestas:

7

Aquí está la manera fácil

A menos que tenga algún motivo específico por el que instalaría un GuestOS utilizando virt-install, esta es la forma 'fácil' de hacerlo sin virt-install.

Tengo una máquina virtual que funciona con Windows 7 instalado. Así es como lo creé.

Paso 1: crea la imagen del disco virtual

qemu-img create -f qcow2 vdisk.img 100g

Esto crea un disco virtual en el formato qcow2. Establecer el tamaño de la partición a 100 g (gigabytes) no asignará 100 gb de espacio físico en el disco duro. La partición virtual solo ocupará tanto espacio como los datos que contiene. Los 100 g solo lo hacen para que (con suerte) nunca necesites aumentar el tamaño. Aumentar el tamaño predeterminado de una imagen qcow2 sigue siendo una molestia en el a ** que hacer .

Paso 2: instalar el sistema operativo

Si está utilizando un CD-ROM físico real para cargar el sistema operativo, use el siguiente comando.

sudo kvm -m 750 -cdrom /dev/sr0 -boot d vdisk.img

Si está utilizando una imagen de disco para cargar el sistema operativo, use este comando.

sudo kvm -m 750 -cd-rom /path/to/image/image.iso -boot d vdisk.img

Aquí está el desglose de los comandos:

  • kvm: llama a la máquina virtual del núcleo (obvio)
  • -m 750: asigna 750 mb de memoria para la máquina virtual
  • -cd-rom configura el cd-rom. Para un disco físico, use el mismo disco que su HostOS. Para una imagen, proporcione una ruta al archivo de imagen.
  • -boot d arranca la máquina virtual desde el CD-ROM

Configuré la huella de memoria para la carga inicial en 750 para que sea conservadora, de modo que pueda estar seguro de que la instalación finaliza sin quedarse sin memoria. Para cargas posteriores, generalmente lo configuro en 512.

Nota: AFIAK, el comando kvm solo funciona en versiones más recientes de Debian / Ubuntu o sus derivados. Si no funciona, el comando equivalente (y más común) es qemu-system-x86_64 o qemu-kvm para 32 bits.

Después de haber pasado por todo el proceso de instalación, la VM debe reiniciarse en un sistema operativo que funcione. Para cargar la VM nuevamente, simplemente ejecute este comando:

kvm -m 512 vdisk.img

Con cualquier cambio de línea de comando, necesita montar discos físicos adicionales, hardware, etc. Para encontrar información sobre los cambios de línea de comando, consulte kvm --help.

Si no comprende la diferencia entre 'paravirtualización' y 'virtualización nativa' Matthias 'ya ha hecho una gran explicación de las diferencias .

Para una explicación más 'en profundidad' de este proceso, lea este artículo .

Evan Plaice
fuente
3

La razón de este problema con la instalación de ventanas con la virtualización qemu es la diferencia entre la "paravirtualización" de qemu y la "virtualización nativa" de KVM. La paravirtualización significa que simula una CPU y necesita un núcleo especial en el lado del cliente (sistema virtual) para que este sistema sepa cómo llamar a las funciones de la CPU correctamente. Esa es la razón por la cual no todos los sistemas pueden ejecutarse usando qemu sin KVM.

Por otro lado, los sistemas virtuales que usan KVM pueden acceder directamente a la CPU (porque KVM usa el soporte de virtualización de hardware AMD / Intel). En ese caso no se necesita un núcleo especial. La desventaja es que el host necesita tener una CPU moderna que admita esta virtualización de hardware (llamada SVM en AMD y VT-x para Intel) y que el sistema cliente debe poder ejecutarse en esa CPU (no es un problema, ya que la mayoría de los sistemas puede ejecutarse en un x86), lo que reduce la portabilidad.

Matías
fuente
1
+1 gran explicación de las diferencias entre 'paravirtualización' y 'virtualización nativa'
Evan Plaice
2

La excepción 0x1e es KMODE_EXCEPTION_NOT_HANDLED, que generalmente es una falla relacionada con el hardware o con el controlador del dispositivo. Supongo que, por cualquier razón, a Windows no le gusta el hardware emulado de la máquina virtual.

¿Has intentado usar VirtualBox ? Tienen un lanzamiento para Karmic Koala y son compatibles con Windows 7 (ahora estoy ejecutando Win7 en una caja de Windows XP).

Jared Harley
fuente
Gracias, quiero seguir con KVM, ya que lo estamos usando con eucalipto. Esto es tanto un ejercicio de aprendizaje para mí como una necesidad pragmática de ejecutar Windows 7.
Kief
1

Después de algunas investigaciones y consultas con un colega, el problema parece ser con la emulación de CPU qemu. Mi comando virt-install creó la máquina virtual KVM usando la emulación de CPU de qemu. VMM creó una máquina virtual KVM usando la propia emulación de CPU de KVM (aunque todavía usa qemu para emular otras partes de la PC, ya que la versión actual de KVM usa qemu para esto).

Al agregar el parámetro --accelerate a mi comando virt-install, puedo crear una VM e instalar Windows 7 en ella.

Entonces, la respuesta parece ser que Windows 7 no se puede instalar en una máquina virtual usando la emulación de CPU qemu-kvm-0.11.0, pero esto se puede solucionar usando la propia emulación de CPU de KVM. Esto se hace usando la opción --accelerate para virt-install. El parámetro del archivo de configuración será en <domain type="kvm">lugar de <domain type="qemu">.

Encanto
fuente
¡gracias por esto! ¡Edité el archivo xml como sugerí, sustituyendo kvm por qemu e instalé Win7 64bit sin problema! (corriendo en Fed12 64bit)
0

La otra diferencia que veo desde arriba es que KVM debería ser solo una emulación de 32 bits ... o al menos con su diferencia XML que se destaque.

Parece que se ha agregado soporte de 64 bits a KVM, por lo que qemu-system-x86_64 con --acceleratemight / podría proporcionarle KVM y 64 bits, siempre que su núcleo lo haya creado para su distribución.

Mike Mestnik
fuente