O Windows 7 falha ao instalar no KVM com qemu

8

Estou tentando instalar o Windows 7 como sistema operacional convidado em uma máquina virtual hospedada na minha caixa Karmic do Ubuntu de 64 bits. Chego ao ponto de selecionar minhas configurações de idioma e clicar em 'instalar agora', mas pouco tempo depois recebo uma tela azul da morte.

Eu tentei algumas variações, incluindo o uso da versão de 32 bits do Windows 7, que falha muito rapidamente. O virt-installcomando que eu tentei inclui isso:

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

As informações limitadas que pude encontrar sugerem que o 'Vista' deve funcionar como a variante --os, não encontrei nenhum valor específico para o Windows 7.

Aqui está minha tela azul:

BSOD

Eu descobri muito pouco pesquisando no Google, então acho que esse não é um caso do KVM simplesmente que não suporta o Windows 7.

Atualizar:

Consegui criar com êxito uma VM do Windows 7 usando o aplicativo gráfico "Virtual Machine Manager", embora eu realmente não entenda a causa do problema com a VM criada com virt-install. A comparação dos arquivos de configuração em / etc / libvirt / qemu fornece algumas dicas, embora eu não saiba o suficiente para interpretá-las corretamente. As diferenças interessantes nas duas configurações de VM são:

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

Não tenho certeza se isso significa que a VM em funcionamento não está usando o qemu, ou se há alguma outra diferença na maneira como é usada com o kvm.

Update2:

Então, eu respondi minha própria pergunta (principalmente) abaixo. Uma VM KVM precisa usar a emulação de CPU do KVM em vez do qemu para que eu instale o Windows 7. Não tenho certeza se há algo que possa ser feito para fazê-lo funcionar em uma CPU de emulação qemu ou se uma versão mais recente será compatível. Mas pelo menos é possível executá-lo em uma VM KVM.

Kief
fonte

Respostas:

7

Aqui está o caminho mais fácil

A menos que você tenha algum motivo específico para instalar um GuestOS usando o virt-install, aqui está a maneira 'fácil' de fazê-lo sem o virt-install.

Eu tenho uma VM em funcionamento com o Windows 7 instalado. Aqui está como eu o criei.

Etapa 1: criar a imagem do disco virtual

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

Isso cria um disco virtual no formato qcow2. Definir o tamanho da partição para 100g (gigabytes) não alocará 100 GB de espaço físico no disco rígido. A partição virtual ocupará apenas tanto espaço quanto os dados que ela contém. Os 100g apenas fazem com que você (espero) nunca precise aumentar o tamanho. Aumentar o tamanho padrão de uma imagem qcow2 ainda é um problema no a ** .

Etapa 2: instalar o sistema operacional

Se você estiver usando um CD-ROM físico real para carregar o sistema operacional, use o seguinte comando.

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

Se você estiver usando uma imagem de disco para carregar o sistema operacional, use este comando.

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

Aqui está o detalhamento dos comandos:

  • kvm - chama a máquina virtual do kernel (óbvio)
  • -m 750 - aloca 750mb de memória para a máquina virtual
  • -cd-rom configura o cd-rom. Para um disco físico, use o mesmo disco do seu HostOS. Para uma imagem, forneça um caminho para o arquivo de imagem.
  • -boot d inicializa a máquina virtual a partir do CD-ROM

Defino o espaço de memória para o carregamento inicial como 750 como conservador, para ter certeza de que a instalação será concluída sem ficar sem memória. Para cargas subsequentes, costumo defini-lo como 512.

Nota: AFIAK, o comando kvm funciona apenas em versões mais recentes do Debian / Ubuntu ou em seus derivados. Se não funcionar, o comando equivalente (e mais comum) é qemu-system-x86_64 ou qemu-kvm por 32 bits.

Depois de todo o processo de instalação, a VM deve reiniciar em um sistema operacional em funcionamento. Para carregar a VM novamente, basta iniciar este comando:

kvm -m 512 vdisk.img

Com qualquer opção de linha de comando, você precisa montar discos físicos adicionais, hardware etc. Para encontrar informações sobre opções de linha de comando, verifique kvm --help.

Se você não entender a diferença entre 'paravirtualização' e 'virtualização nativa' Matthias 'já fez uma grande explicação para as diferenças .

Para uma explicação mais aprofundada desse processo, leia este artigo .

Evan Plaice
fonte
3

A razão para esse problema com a instalação de janelas com a virtualização qemu é a diferença entre a "paravirtualização" do qemu e a "virtualização nativa" dos KVMs. A paravirtualização significa que simula uma CPU e precisa de um kernel especial no lado do cliente (sistema virtual), para que esse sistema saiba como chamar a função da CPU corretamente. Essa é a razão pela qual nem todos os sistemas podem executar usando o qemu sem o KVM.

Por outro lado, os sistemas virtuais que usam KVM podem acessar diretamente a CPU (porque o KVM usa o suporte a AMD / Intel Hardware Virtualization). Nesse caso, nenhum kernel especial é necessário. A desvantagem é que o host precisa ter uma CPU moderna que suporte essa virtualização de hardware (chamada SVM na AMD e VT-x para Intel) e que o sistema do cliente deve poder executar nessa CPU (não é um problema, como a maioria dos sistemas pode ser executado em um x86), reduzindo a portabilidade.

Matthias
fonte
1
+1 ótima explicação das diferenças entre 'paravirtualização' e 'virtualização nativa' #
Evan Plaice
2

A exceção 0x1e é KMODE_EXCEPTION_NOT_HANDLED, geralmente uma falha relacionada ao hardware ou ao driver de dispositivo. Meu palpite é que, por qualquer motivo, o Windows não esteja gostando do hardware emulado da máquina virtual.

Você já tentou usar o VirtualBox ? Eles têm uma versão para o Karmic Koala e suportam o Windows 7 (estou executando o Win7 agora em uma caixa do Windows XP).

Jared Harley
fonte
Obrigado, quero continuar com o KVM, pois o estamos usando com o Eucalyptus. Isso é tanto um exercício de aprendizado para mim quanto uma necessidade pragmática de ter o Windows 7 em execução.
Kief
1

Após algumas pesquisas e consultas com um colega, o problema parece estar na emulação da CPU do qemu. Meu comando virt-install criou a máquina virtual KVM usando a emulação de CPU do qemu. O VMM criou uma máquina virtual KVM usando a própria emulação de CPU da KVM (embora ainda use o qemu para emular outras partes do PC, pois a versão atual do KVM usa o qemu para isso).

Ao adicionar o parâmetro --accelerate ao meu comando virt-install, sou capaz de criar uma VM e instalar o Windows 7 nela.

Portanto, a resposta parece ser que o Windows 7 não pode ser instalado em uma máquina virtual usando a emulação de CPU qemu-kvm-0.11.0, mas isso pode ser contornado usando a emulação de CPU do KVM. Isso é feito usando a opção --accelerate para virt-install. O parâmetro do arquivo de configuração será em <domain type="kvm">vez de <domain type="qemu">.

Kief
fonte
obrigado por isso! Editei o arquivo xml como sugerido, substituindo o qemu pelo kvm e instalei o Win7 64bit sem problemas! (rodando em Fed12 64bit)
0

A outra diferença que vejo acima é que o KVM deve ser apenas emulação de 32 bits ... ou pelo menos com o seu diff XML que se destaca.

Parece que o suporte a 64 bits foi adicionado ao KVM, portanto, o qemu-system-x86_64 com --acceleratepode / pode fornecer a você o KVM e o de 64 bits, desde que seu kernel seja construído por sua distribuição.

Mike Mestnik
fonte
0

Consegui iniciar a instalação alterando primeiro a tela para a cirrusrecomendada aqui: https://ubuntuforums.org/showthread.php?t=2325843&s=67c08420c394b532ea814a0c46752914&p=13500324#post13500324

  1. instale o Win 7 com gráficos cirrus, desligue o vm
  2. adicione um segundo adaptador gráfico como qxl
  3. inicialize o vm e instale o driver qxl
  4. desligue vm e remova o adaptador cirrus
Jiab77
fonte
Obrigado pelo seu comentário, adicionei a solução completa.
Jiab77