如何在Libvirt / qemu-kvm中禁用不需要的iPXE引导尝试?


12

升级到12.04后,我的虚拟机总是以某种方式启动,并尝试首先从网络启动。看到这个:

virt-manager屏幕截图

虽然我没有设置任何PXE配置:

PXE引导配置

我试过了:

  • 要禁用SPICE,通过改变emulator/usr/bin/kvm/usr/bin/kvm-spice通过编辑XML。
  • Ctrl+ B配置iPXE,但不允许将其禁用为引导选项。
  • 设置另一种类型的NIC-不是一种选择,virtio出于性能原因,我需要这样做。但是,e1000e也不起作用。
  • 卸下NIC:有效。但是,我需要网络。
  • 到处搜寻。硬。很多结果与配置的PXE引导失败有关。

这不是什么大问题,但是它使启动时间增加了50%到100%(从SSD启动),所以它的时间相对较长,让我很烦。

如何禁用此功能并直接从虚拟硬盘启动?

Answers:


6

简短答案

升级到libvirt 0.9.10+(在Quantal中可用)并将该<rom bar='off'/>选项添加到计算机XML定义的接口配置中。

长答案

现在,我实际上正在使用iPXE引导选项,我看到在SeaBIOS屏幕中发生的延迟不是实际的引导尝试。它只是加载Virtio网络选件ROM,而这会花费一些烦人的几秒钟,即尚未进行iPXE引导尝试。这使我再次阅读libvirt文档,并且发现了一个有趣的发现。

据我所知,从libvirt 0.9.7开始,该行为已更改为默认情况下加载接口的选项ROM。Ubuntu 11.10随附0.9.2,Ubuntu 12.04随附0.9.8。这对于从升级到12.04以来为什么会发生这种情况绝对有道理。

此外,这在libvirt 0.9.10版中已经<rom bar='off'/>可以通过XML中的选项进行配置!(请参阅此处)但是,该版本的libvirt在Ubuntu 12.04中不可用,我将必须升级到12.10或向后移植。这使得Ubuntu 12.04介于两个方面。

其他解决方法是删除@AH'指出的选项ROM文件,并更改@NlightNFotis指出的SeaBIOS'文件系统'。但是,这两种方法基本上都会完全禁用iPXE,并且这是不可配置的(如果virtio仅坚持使用网络设备)。由于我混合使用了iPXE机器和非PXE机器,因此我真的需要它是可配置的。


机器的XML定义在哪里?
布赖斯·几塔

1
@BryceGuinta首先创建一个VM,然后使用以下命令编辑其XML定义(高级)virsh edit <domain>
gertvdijk

5

我对同一问题的实验给了我一些提示:

该软件包kvm-ipxe将几个PXE选件ROM安装到/usr/share/qemu/

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

当以这些NIC之一启动时,seabios会以某种方式自动找到并使用它们。当我chmod a= pxe*.rom在这些文件上执行并启动虚拟机时,出现“错误”消息

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

但是它可以干净地启动,并且不需要PXE。


谢谢。这给了我一些解决方法:virtio用于一般的网络设备和e1000e需要PXE的VM。但是,我仍然认为这是一个错误。Libvirt不能以某种方式成功地将正确的引导参数传递给SeaBIOS。
gertvdijk 2012年

怎么chmod a=办?
布赖斯·几塔

5

通过在命令行上将以下选项传递给qemu-kvm(将romfile设置为空白是技巧),我能够在Ubuntu 12.04中解决此问题:

-netdev user,id=hostnet0 -device virtio-net-pci,romfile=,netdev=hostnet0

很酷,但是我可以在Libvirt XML机器定义中指定它吗?
gertvdijk 2013年

如果您正在从命令行中进行特殊的反复重启,这就是方法。它增加了一些噪音,但立即杀死了iPXE,而无需您编辑XML文件,破坏所有网络连接或类似操作。
i336_

0

从您的图片中,我可以看到它最有可能与VM BIOS有关。VM配置不得覆盖SeaBIOS'设置,这一定会导致VM首先启动PXE

对于第一种可能的解决方案,请尝试查看是否可以进入虚拟机的BIOS并编辑那里普遍存在的选项。

注意:当我的研究揭示更多可能的解决方案或原因时,将继续更新答案。

[EDIT#1]:您可以在此处找到有关如何在SeaBIOS中设置引导顺序的信息那应该解决问题。


如何进入虚拟机的BIOS?关于SeaBIOS的维基百科告诉我,我应该在引导时尝试F12,但这只会触发一次跳过iPXE尝试。
gertvdijk 2012年

@gertvdijk我目前正在调查中。一经发现,我会尽快与您联系。
NlightNFotis 2012年

@gertvdijk这似乎以某种方式相关:seabios.org/pipermail/seabios/2012-March/003526.html
NlightNFotis 2012年

谢谢,今天学到了新东西。但是,这似乎适用于整个系统,并涉及构建新的CBFS(核心启动文件系统)。据我所知,它也完全禁用了PXE引导。我不喜欢这种方法,我认为应该可以像在virt-manager GUI中一样防止iPXE引导尝试运行。
gertvdijk 2012年

@gertvdijk您怎么知道它禁用了它?我所能看到的就是设置启动顺序,这意味着先启动某些东西
NlightNFotis 2012年

-1

我可以使用“ -net none”来防止这种情况:

# qemu-system-i386 -net none

但是,那么您根本就没有任何网络!我认为这并不是一个答案。
gertvdijk

抱歉,我错过了OP仍需要联网的事实。在我的情况下,没有网络运行是可以接受的。
Catalin P
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.