Wie deaktiviere ich unerwünschte iPXE-Startversuche in Libvirt / qemu-kvm?

12

Irgendwie werden meine virtuellen Maschinen nach dem Upgrade auf 12.04 immer mit dem Versuch gestartet, zuerst vom Netzwerk zu starten. Sieh dir das an:

virt-manager Screenshot

Ich habe noch keine PXE-Konfiguration festgelegt:

PXE-Startkonfiguration

Ich habe es versucht:

  • zu deaktivieren SPICE, durch die sich wandelnde emulatorzu /usr/bin/kvmvon /usr/bin/kvm-spicedurch die Bearbeitung der XML.
  • Ctrl+ Bum das iPXE zu konfigurieren, aber es lässt sich nicht als Boot-Option deaktivieren.
  • Festlegen eines anderen NIC-Typs - keine Option, die ich virtioaus Leistungsgründen benötige . Funktioniert aber e1000eauch nicht.
  • Entfernen der Netzwerkkarte: funktioniert. Ich brauche jedoch Netzwerk.
  • Herum googeln. Schwer. Bei vielen Ergebnissen geht es darum, dass konfigurierte PXE-Starts fehlschlagen.

Kein großes Problem, aber es erhöht die Startzeiten um 50-100% (Booten von SSD), daher ist es relativ lang und nervt mich.

Wie kann ich dies deaktivieren und direkt von der virtuellen Festplatte booten?

gertvdijk
quelle

Antworten:

6

Kurze Antwort

Aktualisieren Sie auf libvirt 0.9.10+ (in Quantal verfügbar) und fügen Sie <rom bar='off'/>der Schnittstellenkonfiguration der XML-Definition des Computers die Option hinzu.

Lange Antwort

Jetzt, da ich die iPXE-Startoption verwende, ist die Verzögerung auf dem SeaBIOS-Bildschirm kein eigentlicher Startversuch. Es wird nur das Virtio-Netzwerkoptions-ROM geladen, und das dauert einige nervige Sekunden, dh es wird noch kein iPXE-Startversuch ausgeführt . Dies veranlasste mich, die libvirt-Dokumentation erneut zu lesen, und ich machte eine interessante Entdeckung.

Soweit ich feststellen konnte, wurde seit libvirt 0.9.7 das Verhalten dahingehend geändert, dass standardmäßig die Options-ROMs der Schnittstelle geladen werden. Ubuntu 11.10 wird mit 0.9.2 ausgeliefert, Ubuntu 12.04 mit 0.9.8. Dies macht definitiv Sinn, warum ich dies seit dem Upgrade auf 12.04 sehe.

Außerdem ist dies in der libvirt-Version 0.9.10 mit der <rom bar='off'/>Option in der XML konfigurierbar geworden ! (siehe hier ) Allerdings ist diese Version von libvirt in Ubuntu 12.04 nicht verfügbar und ich muss auf 12.10 upgraden oder backportieren. Dadurch fällt Ubuntu 12.04 zwischen zwei Hocker.

Andere Problemumgehungen sind das Entfernen der von @AH 'angegebenen Options-ROM-Dateien und das Ändern des von @NlightNFotis angegebenen SeaBIOS-Dateisystems. In beiden Fällen wird iPXE jedoch grundsätzlich vollständig deaktiviert und kann nicht konfiguriert werden (wenn virtionur Netzwerkgeräte verwendet werden). Da ich eine gemischte Konfiguration von iPXE-Maschinen und Nicht-PXE-Maschinen habe, muss diese wirklich konfigurierbar sein.

gertvdijk
quelle
Wo ist die XML-Definition der Maschine?
Bryce Guinta
1
@BryceGuinta Erstellen Sie zuerst eine VM und bearbeiten Sie dann ihre XML-Definition (erweitert) mit dem Befehlvirsh edit <domain>
gertvdijk
5

Meine Experimente zum selben Thema gaben mir einige Hinweise:

Das Paket kvm-ipxeinstalliert mehrere PXE-Options-ROMs in /usr/share/qemu/:

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

Irgendwie werden diese automatisch gefunden und von Seabios verwendet, wenn mit einer dieser Netzwerkkarten gebootet wird. Wenn ich chmod a= pxe*.romdiese Dateien überprüfe und die virtuelle Maschine starte, erhalte ich die Fehlermeldung

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

aber es bootet sauber und ohne PXE.

AH
quelle
Vielen Dank. Das gibt mir eine Art Workaround: Verwenden virtiofür allgemeine Netzwerkgeräte und e1000efür VMs, die PXE benötigen. Ich denke jedoch immer noch, dass es ein Fehler ist. Irgendwie übergibt Libvirt die richtigen Startparameter nicht erfolgreich an SeaBIOS.
gertvdijk
Was macht chmod a=das?
Bryce Guinta
5

Ich konnte dies in Ubuntu 12.04 umgehen, indem ich die folgenden Optionen an qemu-kvm in der Befehlszeile übergab (das Setzen der Romdatei auf leer ist der Trick):

-netdev user,id=hostnet0 -device virtio-net-pci,romfile=,netdev=hostnet0
RolKau
quelle
Cool, aber kann ich das in meiner Libvirt XML-Maschinendefinition angeben?
gertvdijk
Wenn Sie einen wiederholten Ad-hoc-Neustart über die Befehlszeile ausführen, ist dies der richtige Weg. Es fügt ein wenig Rauschen hinzu, beendet iPXE jedoch sofort, ohne dass Sie XML-Dateien bearbeiten, das gesamte Netzwerk beschädigen oder Ähnliches tun müssen.
i336_
0

An Ihren Bildern kann ich erkennen, dass dies höchstwahrscheinlich mit dem VM-BIOS zu tun hat. Die VM-Konfiguration darf SeaBIOSdie Einstellungen nicht überschreiben. Dies muss dazu führen, dass die VM zuerst gestartet wird PXE.

Um eine erste mögliche Lösung zu finden, versuchen Sie, das BIOS der virtuellen Maschine aufzurufen und die dort vorherrschenden Optionen zu bearbeiten.

HINWEIS: Die Antwort wird weiterhin aktualisiert, während meine Nachforschungen weitere mögliche Lösungen oder Ursachen aufdecken.

[EDIT # 1]: Informationen zum Einrichten der Startreihenfolge in SeaBIOS finden Sie hier . Das sollte das Problem lösen.

NlightNFotis
quelle
Wie kann ich das BIOS der VM aufrufen? Wikipedia über SeaBIOS sagt mir, ich sollte F12 beim Booten versuchen, aber das löst nur das einmalige Überspringen des iPXE-Versuchs aus.
gertvdijk
@gertvdijk Ich suche gerade danach. Ich melde mich bei Ihnen, sobald ich es herausgefunden habe.
NlightNFotis
@gertvdijk Dies scheint irgendwie verwandt zu sein: seabios.org/pipermail/seabios/2012-March/003526.html
NlightNFotis
Danke, habe heute neue Sachen gelernt. Dies scheint jedoch systemweit zuzutreffen und ein neues CBFS (Core Boot Filesystem) zu erstellen. Soweit ich sehen kann, wird das PXE-Booten auch vollständig deaktiviert. Ich mag diesen Ansatz nicht und ich denke, dass es möglich sein sollte, die Laufzeit von iPXE-Startversuchen zu verhindern, wie dies in der GUI von virt-manager möglich ist.
gertvdijk
@gertvdijk Woher weißt du, dass es es deaktiviert? Ich kann nur die Startreihenfolge festlegen, dh, etwas wird vor etwas anderem gebootet .
NlightNFotis
-1

Ich konnte dies mit "-net none" verhindern:

# qemu-system-i386 -net none
Catalin P
quelle
Aber dann haben Sie überhaupt keine Vernetzung! Ich halte das nicht wirklich für eine Antwort.
Gertvdijk
Tut mir leid, ich habe die Tatsache verpasst, dass OP immer noch ein Netzwerk benötigt. In meinem Fall war es akzeptabel, ohne Netzwerk zu laufen.
Catalin P