KVM虚拟机EFI启动失败,核心排查顺序是:先确认固件是否正确使用OVMF,再检查NVRAM变量和ESP分区,最后用UEFI Shell或系统安装盘重建启动项,多数情况下,重建NVRAM或修复EFI系统分区即可恢复。
KVM虚拟机EFI启动失败怎么办?先做基础确认
EFI启动失败不是单一故障,它可能出在固件、变量文件、磁盘分区、启动项或驱动签名,先把故障层级分清楚,后面操作才不白费。
确认固件类型:BIOS还是UEFI
在宿主机执行:
virsh dumpxml 虚拟机名称 | grep -i -E 'loader|nvram|firmware'
如果输出为空,或只看到<type>hvm</type>,那这台虚拟机很可能仍走SeaBIOS,EFI启动需要类似下面的配置:
<os firmware='efi'> <type arch='x86_64' machine='q35'>hvm</type> <loader readonly='yes' type='pflash'>/usr/share/OVMF/OVMF_CODE.fd</loader> <nvram>/var/lib/libvirt/qemu/nvram/虚拟机名称_VARS.fd</nvram> </os>
行业共识认为,现代KVM环境优先使用q35加OVMF,老i440fx更适合传统BIOS场景,混用容易让启动项识别异常。
确认OVMF与NVRAM文件
先看固件包是否安装:
rpm -qa | grep -i ovmf # 或 dpkg -l | grep -i ovmf
再检查文件路径:
ls -l /usr/share/OVMF/ ls -l /var/lib/libvirt/qemu/nvram/
常见文件名包括:
OVMF_CODE.fdOVMF_VARS.fdOVMF_CODE.secboot.fdOVMF_VARS.secboot.fd
如果OVMF_CODE.fd缺失,安装edk2-ovmf或ovmf包即可,如果NVRAM文件损坏或大小异常,可以备份后删除,让libvirt重新生成:
virsh destroy 虚拟机名称 mv /var/lib/libvirt/qemu/nvram/虚拟机名称_VARS.fd /root/虚拟机名称_VARS.fd.bak virsh start 虚拟机名称
这一步对“KVM UEFI启动找不到启动项”特别有效,因为UEFI启动项存在NVRAM里,文件损坏后固件就找不到系统盘。
确认磁盘分区与启动项
进入宿主机,检查磁盘镜像分区:
parted -l /var/lib/libvirt/images/虚拟机名称.qcow2 # 或 gdisk -l /var/lib/libvirt/images/虚拟机名称.qcow2
UEFI启动要求:
- 分区表为GPT;
- 存在EFI System Partition,类型通常是
EF00; - ESP分区格式为FAT32;
- ESP内存在
EFI/BOOT/BOOTX64.EFI或发行版引导文件。
如果磁盘还是MBR,UEFI固件无法直接启动,要么把虚拟机固件切回BIOS,要么备份数据后转换GPT并重建引导。
KVM UEFI启动找不到启动项怎么解决?分场景实操
Linux虚拟机:用UEFI Shell和GRUB修复
启动虚拟机,在OVMF画面按ESC进入UEFI Shell,执行:
map -r fs0: ls bcfg boot dump
找到ESP分区后,添加启动项:
bcfg boot add 0 fs0:EFIBOOTBOOTX64.EFI "Linux" reset
如果ESP里没有引导文件,用ISO挂载到虚拟光驱,进入Live环境:
mount /dev/vda2 /mnt mount /dev/vda1 /mnt/boot/efi for i in /dev /dev/pts /proc /sys /run; do mount --bind $i /mnt$i; done chroot /mnt grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=linux update-grub
完成后退出、卸载、重启,多数Linux发行版会重新生成EFI/BOOT/BOOTX64.EFI。
Windows虚拟机:bcdboot重建引导
用Windows安装ISO启动,进入修复模式,打开命令提示符:
diskpart list disk select disk 0 list partition select partition 1 assign letter=S exit bcdboot C:Windows /s S: /f UEFI

如果系统盘不是C:,先确认Windows目录所在盘符,执行成功后重启,Windows Boot Manager会重新写入NVRAM。
云服务器KVM EFI启动失败修复方法
云服务器通常不让你直接改宿主机XML,能做的操作包括:
- 通过VNC控制台查看是否进入UEFI Shell;
- 挂载系统ISO进入救援模式;
- 检查云盘是否被平台转换为MBR;
- 提交工单确认平台是否支持自定义OVMF;
- 尝试切换为平台提供的UEFI模板或BIOS启动。
部分云平台会锁定NVRAM,迁移后启动项丢失只能重建引导,若平台禁用自定义固件,修复空间有限。
KVM虚拟机BIOS和UEFI启动区别在哪?迁移与选型
| 对比项 | BIOS+MBR | UEFI+GPT |
|---|---|---|
| 引导存储 | 磁盘MBR引导代码 | ESP分区+NVRAM启动项 |
| 分区表 | MBR | GPT |
| KVM固件 | SeaBIOS | OVMF/edk2 |
| 启动项位置 | 磁盘顺序 | NVRAM变量 |
| 常见故障 | 引导扇区损坏 | NVRAM丢失、ESP损坏 |
| 大磁盘支持 | 有限 | 更好 |
迁移后为什么EFI启动失败
NVRAM文件里保存了启动项路径和变量,虚拟机从A宿主机迁到B宿主机后,如果NVRAM没带过去,或路径变化,UEFI就找不到系统盘,处理方式:
- 迁移前备份XML和
_VARS.fd; - 迁移后把VARS文件放到目标路径;
- 不确定时删除VARS,让libvirt重建;
- 再进入UEFI Shell手动添加启动项。
Secure Boot与驱动签名
如果启用了安全启动,必须使用OVMF_CODE.secboot.fd和OVMF_VARS.secboot.fd

,未签名驱动、旧版GRUB、第三方内核模块都可能被阻止,排查时可临时关闭Secure Boot,确认能否启动,能启动后再处理签名或换用已签名引导文件。
北京KVM虚拟机EFI启动失败排查与修复价格
北京IDC机房场景
北京地区不少IDC机房使用KVM做私有云底层,EFI启动失败常见于宿主机升级、存储迁移、模板克隆之后,远程处理通常先看VNC,再让机房人员挂ISO或确认网络,若涉及本地磁盘阵列、加密盘、LVM异常,就需要现场支持。
修复价格受哪些因素影响
KVM虚拟机EFI启动失败修复价格没有统一标准,通常受这些因素影响:
- 故障类型:单纯重建NVRAM费用低,涉及数据恢复费用高;
- 处理方式:远程处理低于北京本地上门;
- 系统类型:Linux引导修复相对直接,Windows加BitLocker更复杂;
- 磁盘状态:qcow2损坏、LVM丢失、RAID降级会抬高成本;
- 时间要求:紧急恢复通常比普通工单贵。
业内专家指出,EFI启动问题里真正需要重装系统的比例并不高,先备份磁盘和XML,再动手修复,能减少二次损坏。
KVM虚拟机EFI启动失败怎么办?常见Q&A
Q1:KVM虚拟机EFI启动失败后,数据会丢吗?
通常不会,只要磁盘镜像和分区表未损坏,数据仍在,操作前备份XML、NVRAM和qcow2文件,避免误删或覆盖。
Q2:KVM UEFI启动找不到启动项,必须重装系统吗?
不必,多数情况可用UEFI Shell添加BOOTX64.EFI,Linux用grub-install,Windows用bcdboot,只有ESP和系统分区都损坏时,才考虑重建系统。
Q3:云服务器KVM EFI启动失败修复方法有哪些限制?
云平台常不允许直接编辑libvirt XML,需要挂载ISO进救援模式,或提交工单处理,若平台禁用自定义OVMF,只能使用平台UEFI模板,或把虚拟机切换为BIOS启动。
