Como desabilito uma tentativa indesejada de inicialização do iPXE no Libvirt / qemu-kvm?

12

De alguma forma, após a atualização para o 12.04, minhas máquinas virtuais sempre inicializam com uma tentativa de inicializar pela rede primeiro. Veja isso:

captura de tela virt-manager

enquanto eu não tenho nenhum conjunto de configurações PXE:

Configuração de inicialização do PXE

Eu tentei:

  • Para desativar SPICE, alterando o emulatora /usr/bin/kvmpartir /usr/bin/kvm-spiceeditando o XML.
  • Ctrl+ Bpara configurar o iPXE, mas não permite desativá-lo como uma opção de inicialização.
  • definindo outro tipo de NIC - não é uma opção, preciso virtiopor razões de desempenho. No entanto, e1000etambém não funciona.
  • remover a NIC: funciona. No entanto, eu preciso de rede.
  • Pesquisando por aí. Difícil. Muitos resultados são sobre falhas de inicialização do PXE configurada.

Não é um grande problema, mas aumenta o tempo de inicialização em 50 a 100% aqui (inicializando a partir do SSD), por isso é relativamente longo e me incomoda.

Como posso desativar isso e inicializar diretamente do disco rígido virtual?

gertvdijk
fonte

Respostas:

6

Resposta curta

Atualize para libvirt 0.9.10+ (disponível no Quantal) e inclua a <rom bar='off'/>opção na configuração de interface da definição XML da máquina.

Resposta longa

Agora que estou realmente usando a opção de inicialização do iPXE, vejo que o atraso na tela do SeaBIOS não é uma tentativa de inicialização real. Ele está apenas carregando a ROM da opção de rede Virtio e isso leva alguns segundos irritantes, ou seja, ainda não está fazendo uma tentativa de inicialização do iPXE . Isso me levou a ler a documentação libvirt novamente e fiz uma descoberta interessante.

Tanto quanto pude encontrar, desde a libvirt 0.9.7 o comportamento mudou para carregar as ROMs de opção da interface por padrão. Ubuntu 11.10 fornecido com 0.9.2, Ubuntu 12.04 vem com 0.9.8. Definitivamente, faz sentido o motivo pelo qual vejo isso acontecendo desde a atualização para a versão 12.04.

Além disso, isso se tornou configurável na libvirt versão 0.9.10 com a <rom bar='off'/>opção no XML! (veja aqui ) No entanto, essa versão do libvirt não está disponível no Ubuntu 12.04 e precisarei atualizar para a 12.10 ou fazer o backport. Isso faz com que o Ubuntu 12.04 caia entre dois bancos.

Outras soluções alternativas estão removendo os arquivos ROM da opção, como indicado por @AH ', e alterando o' sistema de arquivos 'do SeaBIOS, como indicado por @NlightNFotis. No entanto, os dois modos basicamente desabilitam o iPXE completamente e não são configuráveis ​​(se você usar virtioapenas os dispositivos de rede). Como tenho uma configuração mista de máquinas iPXE e não PXE, realmente preciso que isso seja configurável.

gertvdijk
fonte
Onde está a definição XML da máquina?
Bryce Guinta
1
@BryceGuinta Criar uma VM em primeiro lugar, em seguida, editar a sua definição XML (avançado) usando o comandovirsh edit <domain>
gertvdijk
5

Minhas experiências com o mesmo problema me deram algumas dicas:

O pacote kvm-ipxeinstala várias ROMs de opção PXE em /usr/share/qemu/:

pxe-e1000.rom
pxe-ne2k_isa.rom
pxe-pcnet32.rom
pxe-rtl8139.rom
pxe-virtio.rom

De alguma forma, eles são automaticamente encontrados e usados ​​pelo seabios ao inicializar com uma dessas placas de rede. Quando eu faço um chmod a= pxe*.romdesses arquivos e inicio a máquina virtual, recebo a mensagem "erro"

kvm: pci_add_option_rom: failed to find romfile "pxe-rtl8139.rom"

mas inicializa de forma limpa e sem PXE.

AH
fonte
Obrigado. Isso me dá uma solução: usar virtiopara dispositivos de rede em geral e e1000epara VMs que precisam de PXE. No entanto, ainda acho que é um bug. De alguma forma, o Libvirt não passa com êxito os parâmetros de inicialização corretos para o SeaBIOS.
gertvdijk
O que chmod a=faz?
Bryce Guinta
5

Consegui contornar isso no Ubuntu 12.04, passando as seguintes opções para qemu-kvm na linha de comando (definir o romfile como em branco é o truque):

-netdev user,id=hostnet0 -device virtio-net-pci,romfile=,netdev=hostnet0
RolKau
fonte
Legal, mas posso especificar isso na minha definição de máquina XML Libvirt?
gertvdijk
Se você estiver fazendo uma reinicialização ad-hoc repetida na linha de comando, este é o caminho a seguir. Ele adiciona um pouco de ruído, mas mata instantaneamente o iPXE sem exigir que você edite arquivos XML, coloque tudo em rede ou algo parecido.
i336_ 28/02
0

Pelas suas fotos, posso ver que provavelmente isso tem a ver com o BIOS da VM. A configuração da VM não deve sobrescrever SeaBIOSas configurações, algo que deve causar a inicialização da VM PXEprimeiro.

Para uma primeira solução possível, tente verificar se você pode acessar o BIOS da máquina virtual e editar as opções existentes nele.

NOTA: Continuarei atualizando a resposta enquanto minha pesquisa descobrir mais soluções ou causas possíveis.

[EDIT # 1]: Você pode encontrar informações sobre como configurar a ordem de inicialização no SeaBIOS aqui . Isso deve resolver o problema.

NlightNFotis
fonte
Como posso entrar no BIOS da VM? A Wikipedia sobre o SeaBIOS me diz que eu deveria tentar o F12 no momento da inicialização, mas isso apenas aciona a tentativa do iPXE uma vez.
gertvdijk
@gertvdijk Atualmente, estou investigando. Voltarei a você assim que descobrir.
NlightNFotis
@gertvdijk Isso parece de alguma forma relacionado: seabios.org/pipermail/seabios/2012-March/003526.html
NlightNFotis
Obrigado, aprendi coisas novas hoje. No entanto, isso parece se aplicar em todo o sistema e na criação de um novo CBFS (sistema de arquivos de inicialização principal). Tanto quanto posso ver, ele também desabilita a inicialização do PXE por completo. Não gosto dessa abordagem e acho que deve ser possível impedir o tempo de execução das tentativas de inicialização do iPXE, como é possível na GUI do virt-manager.
gertvdijk
@gertvdijk Como você sabe que o desativa? Tudo o que posso ver é configurar a ordem de inicialização, o que significa que algo é inicializado antes de outra coisa .
NlightNFotis
-1

Consegui evitar isso usando "-net none":

# qemu-system-i386 -net none
Catalin P
fonte
Mas então você não tem nenhuma rede! Considero que isso não é realmente uma resposta.
gertvdijk
Desculpe, perdi o fato de que o OP ainda precisava de rede. No meu caso, rodar sem rede era aceitável.
precisa