当前位置: 首页 > 工具软件 > LinuxBoot > 使用案例 >

libvirt开启Linux虚拟机启动菜单 boot menu timeout

黄毅
2023-12-01

测试环境

Red Hat Enterprise Linux release 8.5 (Ootpa)
kernel-4.18.0-348.20.1.el8_5.x86_64
libvirt-6.0.0-37.1.module+el8.5.0+13858+39fdc467.x86_64
libvirt-client-6.0.0-37.1.module+el8.5.0+13858+39fdc467.x86_64

背景介绍

官网下载的guest image是没有root权限的,获得root访问权限的方法有很多,包括libguestfs来修改,或通过cloud-init在启动时候写入等等。还有一个官方重置Linux主机root密码的方法,详见Resetting the Root Password,这种方法的前提是你可以在内核引导前访问boot menu,这就引出了本文讨论的问题。如果你是Linux虚拟机,而且一启动就直接开始内核引导,没有在boot menu编辑启动参数的机会。这就可以通过本文的方法解决。

解决方案

案例中的虚拟机名为Fedora-Cloud-Base-35,通过以下命令可以启动虚拟机并进入console:

# virsh start Fedora-Cloud-Base-35 && virsh console Fedora-Cloud-Base-35

然而内核直接开始引导,没有编辑启动参数的机会。这时候可以通过virsh edit命令检查一下该虚拟机的配置文件,根据情况添加下面两行到os标签下:

    <bootmenu enable='yes' timeout='30000'/>
    <bios useserial='yes' rebootTimeout='0'/>

添加后的完整配置文件应该是这样(部分内容被省略):

# virsh dumpxml Fedora-Cloud-Base-35 
<domain type='kvm' id='17'>
  <name>Fedora-Cloud-Base-35</name>
  ......
  <os>
    <type arch='x86_64' machine='pc-q35-rhel8.2.0'>hvm</type>
    <boot dev='hd'/>
    <bootmenu enable='yes' timeout='30000'/>
    <bios useserial='yes' rebootTimeout='0'/>
  </os>
  ......
</domain>

这个配置会让boot menu等待30秒,你将有足够的时间做出反应。提示一下,如果你没有看到boot menu,可以尝试直接按e试一下。

参考资料

  1. https://libvirt.org/formatdomain.html#operating-system-booting
 类似资料: