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

ger*_*ijk 14 kvm pxe virtualization 12.04

不知何故升级到 12.04 后,我的虚拟机总是先尝试从网络启动。看到这个:

虚拟管理器截图

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

PXE启动配置

我试过了:

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

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

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

ger*_*ijk 7

简答

升级到 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 机器的混合设置,我真的需要它是可配置的。


A.H*_*.H. 5

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

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

pxe-e1000.rom
pxe-ne2k_isa.rom
pxe-pcnet32.rom
pxe-rtl8139.rom
pxe-virtio.rom
Run Code Online (Sandbox Code Playgroud)

不知何故,当使用这些 NIC 之一启动时,seabios 会自动找到并使用这些。当我chmod a= pxe*.rom对这些文件执行 a并启动虚拟机时,我收到“错误”消息

kvm: pci_add_option_rom: failed to find romfile "pxe-rtl8139.rom"
Run Code Online (Sandbox Code Playgroud)

但它可以干净地启动并且没有PXE。


Rol*_*Kau 5

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

-netdev user,id=hostnet0 -device virtio-net-pci,romfile=,netdev=hostnet0
Run Code Online (Sandbox Code Playgroud)