如何在 Libvirt/qemu-kvm 中禁用不必要的 iPXE 启动尝试?

如何在 Libvirt/qemu-kvm 中禁用不必要的 iPXE 启动尝试?

不知何故,在升级到 12.04 后,我的虚拟机总是先尝试从网络启动。请参见:

virt-manager 屏幕截图

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

PXE 启动配置

我试过了:

  • 通过编辑 XML将emulator其更改/usr/bin/kvm为来禁用 SPICE 。/usr/bin/kvm-spice
  • Ctrl+B配置 iPXE,但它不允许将其作为启动选项禁用。
  • 设置另一种类型的 NIC - 这不是选项,virtio出于性能原因我需要这样做。但是,e1000e也不起作用。
  • 删除 NIC:有效。但是,我需要网络。
  • 谷歌搜索了一下。很难。很多结果都是关于配置的 PXE 启动失败。

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

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

答案1

简短回答

升级到 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 后看到这种情况发生。

<rom bar='off'/>此外,在 libvirt 版本 0.9.10 中,此功能已可通过XML 中的选项进行配置!(请参阅这里) 但是,该版本的 libvirt 在 Ubuntu 12.04 中不可用,我必须升级到 12.10 或将其反向移植。这使得 Ubuntu 12.04 陷入两难境地。

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

答案2

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

该软件包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。

答案3

我可以在 Ubuntu 12.04 中通过在命令行上将以下选项传递给 qemu-kvm 来解决这个问题(将 romfile 设置为空白是诀窍):

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

答案4

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

# qemu-system-i386 -net none

相关内容