服务器与大带宽专家 · 持牌IDC/CDN/ISP服务商
简米科技官网JIANMI TECH
资讯 2026-10-24 简米科技 3,981 字 9 分钟阅读

安装虚拟机EFI分区失败怎么办?EFI分区创建失败怎么解决

导读安装虚拟机EFI分区失败,绝大多数情况不是虚拟机软件坏了,而是固件类型、分区表和ESP分区格式三者没对上, 先把虚拟机的固件类型确认成UEFI,再把磁盘转成GPT,然后手动建一个300MB左右、FAT32格式、带esp标记的分区,问题通常就解开了,先搞清楚EFI分区到底在挑什么虚拟机里的EFI分区,学名是ESP……

安装虚拟机EFI分区失败,绝大多数情况不是虚拟机软件坏了,而是固件类型、分区表和ESP分区格式三者没对上。 先把虚拟机的固件类型确认成UEFI,再把磁盘转成GPT,然后手动建一个300MB左右、FAT32格式、带esp标记的分区,问题通常就解开了。

先搞清楚EFI分区到底在挑什么

虚拟机里的EFI分区,学名是ESP(EFI System Partition),它不是随便划一块空间就行,固件和安装器对它有几条很明确的偏好。

  • 分区表必须是GPT,UEFI固件能读MBR,但Windows安装程序明确拒绝在MBR盘上用UEFI方式安装,会直接报“无法创建新的系统分区”。
  • 文件系统必须是FAT32,很多分区工具默认给FAT16,虚拟机固件扫过去就当没看见。
  • 分区类型GUID要正确,ESP的类型GUID是C12A7328-F81F-11D2-BA4B-00A0C93EC93B,用parted的话对应set 1 esp on。
  • 容量有下限,微软官方文档给的Windows默认值是100MB,多数Linux发行版文档建议300MB以上,太小了mkfs.vfat会拒绝格式化成FAT32,太大了部分安装器也会挑刺。

业内专家指出,虚拟机环境里EFI相关的报错,八成集中在“固件类型和磁盘分区表不匹配”这一条上。

虚拟机安装时EFI分区创建失败怎么解决

安装器提示无法创建EFI系统分区

先别急着重装,按Shift+F10(Windows安装界面)或者切到另一个TTY(Linux),敲下面这行:

ls /sys/firmware/efi

目录存在,说明当前是UEFI方式启动的安装介质;报“No such file or directory”,说明你其实是用Legacy BIOS模式引导的安装盘,这时候不管磁盘怎么建,安装器都不会给你写EFI分区。

处理办法:关掉虚拟机,进设置把固件类型改成UEFI,VMware在“虚拟机设置→选项→高级→固件类型”;VirtualBox在“设置→系统→主板→启用EFI”,改完必须冷启动,直接重启虚拟机不生效。

分区建好了,开机却进EFI Shell或者黑屏

这种情况说明ESP建成了,但引导文件没写进去,常见于手动分区后跳过了引导器安装步骤。

进虚拟机看两个地方:/boot/efi/EFI/下面有没有对应发行版的目录(比如ubuntu、fedora),以及efibootmgr -v能不能看到启动项,目录空着,就是grub-install或bootctl没跑成功。

磁盘超过2TB却用了MBR

MBR分区表最多认2TB,虚拟机磁盘一旦超过这个数,多余空间要么用不上,要么分区表直接写坏,这种场景下EFI分区创建失败只是表象,根子在分区表类型,用parted /dev/sda print看一眼Partition Table字段,写着msdos就得换成gpt。

VirtualBox和VMware EFI报错有什么区别

两家的坑不太一样,对症下药能省不少时间。

对比项 VirtualBox VMware Workstation
EFI开关位置 系统→主板→启用EFI 选项→高级→固件类型
修改时机 必须关机 必须关机
常见卡点 卡在EFI Shell,找不到启动项 安全引导开启后,未签名驱动加载失败
对FAT16的容忍度 较低,容易识别不到ESP 相对宽松,但装系统仍会失败
多ESP处理 优先识别第一块盘的ESP 按启动顺序识别

VirtualBox旧版本的EFI实现比较简陋,卡在EFI Shell是高频问题,可以在Shell里输入exit进Boot Manager手动选启动项,或者用bcfg boot add把引导项写进NVRAM,VMware这边,如果勾了“启用安全引导”,Linux下某些第三方驱动会加载失败,排查时可以先把安全引导关掉。

手动补建EFI分区:Linux和Windows两条路

Linux下用parted重建ESP并重装GRUB

先进Live环境,确认目标盘:

lsblk
parted /dev/sda print

重建分区表(会清空数据,操作前确认盘符):

parted /dev/sda
mklabel gpt
mkpart ESP fat32 1MiB 513MiB
set 1 esp on
mkpart root ext4 513MiB 100%
quit

格式化和挂载:

mkfs.fat -F32 /dev/sda1
mount /dev/sda2 /mnt
mount /dev/sda1 /mnt/boot/efi

chroot进去重装引导,记得把/dev、/proc、/sys挂上:

for i in dev proc sys; do mount --bind /$i /mnt/$i; done
chroot /mnt
grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=GRUB
grub-mkconfig -o /boot/grub/grub.cfg

没有GRUB的发行版,用bootctl install写systemd-boot,路径一样。

Windows安装界面里用diskpart手动分区

在安装向导的磁盘选择页按Shift+F10,依次执行:

diskpart
list disk
select disk 0
clean
convert gpt
create partition efi size=300
format quick fs=fat32 label="System"
create partition msr size=16
create partition primary
format quick fs=ntfs label="Windows"
exit

注意:create partition efi这条命令只在UEFI方式启动的WinPE里可用,如果报“该命令不支持当前启动类型”,说明你的安装U盘是BIOS方式引导的,回去改虚拟机的固件类型,别在这条命令上死磕。

笔记本装虚拟机EFI引导失败怎么办

笔记本上跑的虚拟机,多了一层宿主机的干扰,比较典型的是三种情况。

  • 宿主机开了Hyper-V或者内存完整性,VirtualBox和VMware都会降速甚至起不来,UEFI引导阶段直接卡死,控制面板→程序→启用或关闭Windows功能,把Hyper-V和相关虚拟化平台关掉,重启再试。
  • 宿主机是ARM架构的新笔记本,x86的ISO在ARM虚拟机上跑不起来,EFI分区建了也没用,得换ARM版本的镜像。
  • 宿主机的杀毒软件拦了虚拟磁盘写入,表现为分区命令执行成功,重启后分区表却回滚了,把虚拟机目录加进白名单即可。

机房批量部署虚拟机EFI分区失败的排查顺序

批量场景下,单台能装、批量就挂,通常是模板或者自动化脚本的问题,行业共识认为,按下面这个顺序查效率最高:

  1. 模板虚拟机的固件类型是不是UEFI,磁盘是不是GPT。
  2. 克隆时有没有把NVRAM一起带过去,只克隆磁盘不带NVRAM,新虚拟机会找不到启动项。
  3. 自动化脚本里的分区命令,是不是还留着MBR时代的mklabel msdos。
  4. 批量注入的镜像,/boot/efi/EFI/目录是否完整。

批量环境下,把ESP统一设成512MB是个省心的做法,能覆盖绝大多数发行版和Windows双系统共存的需求。

修复虚拟机EFI分区要不要花钱

软件层面基本不用花钱,parted、diskpart、efibootmgr、bootctl全是系统自带或者开源工具,虚拟机软件本身也内置了这些能力,真正产生费用的场景只有两个:一是虚拟机磁盘物理损坏要做数据恢复,这类服务通常按盘计价,价格区间跨度大,从几百元到上千元都有;二是企业环境里买商业虚拟化平台的技术支持,普通用户自己动手,成本就是时间。

据微软官方文档,Windows在UEFI+GPT环境下自动创建的ESP默认是100MB,手动建到300MB以上更稳妥,后续系统更新和恢复环境都够用。

安装虚拟机EFI分区失败的常见疑问解答

EFI分区不小心删了会怎样

系统立刻无法引导,但数据通常还在,用Live环境重建一个FAT32格式、带esp标记的分区,重新跑一遍grub-install或bcdboot,多数情况能救回来,重建前先用testdisk确认原分区起始扇区,尽量保持对齐一致。

虚拟机里的EFI分区给多大合适

只装Linux,300MB够用;Windows加Linux双系统,512MB更从容;如果打算开休眠或者装多个内核版本,1GB也不算浪费,低于100MB时,FAT32格式化本身就可能失败,这是很多人卡住却查不到原因的地方。

克隆虚拟机后进不了系统,和EFI分区有关吗

关系很大,UEFI的启动项写在虚拟机的NVRAM里,不在磁盘上,只复制vmdk或vdi文件,新虚拟机没有对应的NVRAM记录,固件自然找不到引导文件,解决办法是克隆时选择“完整克隆”并保留NVRAM,或者在新建虚拟机后进EFI Shell,用bcfg boot add手动把\EFI\BOOT\BOOTX64.EFI注册为启动项。

分享本文
本文为 简米科技官网 原创,已由运维技术专家审核。转载请注明来源:原文链接
售前咨询 服务热线 售后 邮箱