Comment désactiver la tentative de démarrage indésirable iPXE dans Libvirt / qemu-kvm?

12

D'une manière ou d'une autre, après la mise à niveau vers 12.04, mes machines virtuelles démarrent toujours avec une tentative de démarrage à partir du réseau en premier. Regarde ça:

capture d'écran virt-manager

alors que je n'ai aucun ensemble de configuration PXE:

Configuration de démarrage PXE

J'ai essayé:

  • pour désactiver SPICE, en changeant le emulatorà /usr/bin/kvmpartir /usr/bin/kvm-spiceen éditant le fichier XML.
  • Ctrl+ Bpour configurer l'iPXE, mais il ne permet pas de le désactiver comme option de démarrage.
  • définir un autre type de carte réseau - pas une option, j'ai besoin virtiopour des raisons de performances. Cependant, e1000ecela ne fonctionne pas non plus.
  • suppression de la carte réseau: fonctionne. Cependant, j'ai besoin d'un réseau.
  • Googler autour. Difficile. Beaucoup de résultats concernent l'échec des démarrages PXE configurés.

Ce n'est pas un gros problème, mais cela augmente les temps de démarrage de 50 à 100% ici (démarrage à partir d'un SSD), donc c'est relativement long et ça m'agace.

Comment puis-je désactiver cela et démarrer directement depuis le disque dur virtuel?

gertvdijk
la source

Réponses:

6

Réponse courte

Mettez à niveau vers libvirt 0.9.10+ (disponible dans Quantal) et ajoutez l' <rom bar='off'/>option à la configuration d'interface de la définition XML de la machine.

Longue réponse

Maintenant que j'utilise réellement l'option de démarrage iPXE, je constate que le retard qui se produit dans l'écran SeaBIOS n'est pas une véritable tentative de démarrage. Il s'agit simplement de charger la ROM de l'option réseau Virtio et cela prend quelques secondes ennuyeuses, c'est-à-dire qu'il ne fait pas encore de tentative de démarrage iPXE . Cela m'a amené à relire la documentation de libvirt et j'ai fait une découverte intéressante.

Pour autant que je puisse trouver, depuis libvirt 0.9.7 le comportement a changé pour charger les ROM optionnelles de l'interface par défaut. Ubuntu 11.10 est livré avec 0.9.2, Ubuntu 12.04 est livré avec 0.9.8. Cela explique clairement pourquoi je vois cela se produire depuis la mise à niveau vers 12.04.

De plus, cela est devenu configurable dans la version libvirt 0.9.10 avec l' <rom bar='off'/>option dans le XML! (voir ici ) Cependant, cette version de libvirt n'est pas disponible dans Ubuntu 12.04 et je devrai passer à 12.10 ou la rétroporter. Cela fait qu'Ubuntu 12.04 tombe entre deux tabourets.

D'autres solutions de contournement sont la suppression des fichiers ROM optionnels comme indiqué par @AH 'et la modification du' système de fichiers 'SeaBIOS comme indiqué par @NlightNFotis. Cependant, les deux façons désactiveront complètement iPXE et ce n'est pas configurable (si vous vous en tenez virtiouniquement aux périphériques réseau). Comme j'ai une configuration mixte de machines iPXE et non-PXE, j'ai vraiment besoin que cela soit configurable.

gertvdijk
la source
Où est la définition XML de la machine?
Bryce Guinta
1
@BryceGuinta Créez d'abord une machine virtuelle, puis modifiez sa définition XML (avancée) à l'aide de la commandevirsh edit <domain>
gertvdijk
5

Mes expériences sur le même sujet m'ont donné quelques indices:

Le package kvm-ipxeinstalle plusieurs ROM optionnelles PXE dans /usr/share/qemu/:

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

D'une manière ou d'une autre, ceux-ci sont automatiquement trouvés et utilisés par les seabios lors du démarrage avec l'un de ces NIC. Lorsque je fais un chmod a= pxe*.romsur ces fichiers et démarre la machine virtuelle, je reçois le message "erreur"

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

mais il démarre proprement et sans PXE.

AH
la source
Merci. Cela me donne un peu de solution: utiliser virtiopour les périphériques réseau généraux et e1000epour les machines virtuelles qui ont besoin de PXE. Cependant, je pense toujours que c'est un bug. D'une manière ou d'une autre, Libvirt ne transmet pas correctement les paramètres de démarrage appropriés à SeaBIOS.
gertvdijk
Que fait chmod a=-il?
Bryce Guinta
5

J'ai pu contourner ce problème dans Ubuntu 12.04 en passant les options suivantes à qemu-kvm sur la ligne de commande (définir le romfile sur vide est l'astuce):

-netdev user,id=hostnet0 -device virtio-net-pci,romfile=,netdev=hostnet0
RolKau
la source
Cool, mais puis-je le spécifier dans ma définition de machine Libvirt XML?
gertvdijk
Si vous effectuez un redémarrage ad hoc répété à partir de la ligne de commande, c'est la voie à suivre. Il ajoute un peu de bruit, mais tue instantanément iPXE sans vous obliger à modifier des fichiers XML, à neutraliser tout le réseau ou similaire.
i336_
0

D'après vos photos, je peux voir que cela a probablement à voir avec le BIOS de la VM. La configuration de la machine virtuelle ne doit pas écraser SeaBIOSles paramètres, ce qui doit obliger la machine virtuelle à démarrer en PXEpremier.

Pour une première solution possible, essayez de voir si vous pouvez entrer dans le BIOS de la machine virtuelle et modifier les options qui y prévalent.

REMARQUE: continuera de mettre à jour la réponse pendant que mes recherches dévoileront d'autres solutions ou causes possibles.

[EDIT # 1]: Vous pouvez trouver des informations sur la façon de configurer l'ordre de démarrage dans SeaBIOS ici . Cela devrait résoudre le problème.

NlightNFotis
la source
Comment puis-je accéder au BIOS de la VM? Wikipédia sur SeaBIOS me dit que je devrais essayer F12 au démarrage, mais cela ne déclenche qu'une seule fois la tentative iPXE.
gertvdijk
@gertvdijk Je suis actuellement en train de l'examiner. Je vous répondrai dès que je le saurai.
NlightNFotis
@gertvdijk Cela semble en quelque sorte lié: seabios.org/pipermail/seabios/2012-March/003526.html
NlightNFotis
Merci, j'ai appris de nouvelles choses aujourd'hui. Cependant, cela semble s'appliquer à l'ensemble du système et à la création d'un nouveau CBFS (core boot filesystem). Pour autant que je puisse voir, cela désactive également complètement le démarrage PXE. Je n'aime pas cette approche et je pense qu'il devrait être possible d'empêcher l'exécution des tentatives de démarrage iPXE comme cela est possible dans l'interface graphique de virt-manager.
gertvdijk
@gertvdijk Comment savez-vous qu'il le désactive? Tout ce que je peux voir est de configurer l'ordre de démarrage, ce qui signifie que quelque chose est démarré avant autre chose .
NlightNFotis
-1

J'ai pu empêcher cela en utilisant "-net none":

# qemu-system-i386 -net none
Catalin P
la source
Mais alors vous n'avez aucun réseau du tout! Je considère que ce n'est pas vraiment une réponse.
gertvdijk
Désolé, j'ai raté le fait qu'OP avait encore besoin de réseautage. Dans mon cas, courir sans réseau était acceptable.
Catalin P