ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Ubuntu安装报No EFI System Partition的根源与解决

Ubuntu安装报No EFI System Partition的根源与解决 1. 这不是系统装不上是启动方式选错了——Ubuntu 22.04.3 Desktop安装卡在“No EFI System Partition was found”到底在报什么你手握一块新硬盘、一张刚用Rufus或balenaEtcher写好的Ubuntu 22.04.3 Desktop ISO启动U盘BIOS里确认启用了UEFI模式Secure Boot也关了可一进安装器刚点“Install Ubuntu”就弹出红字警告“No EFI System Partition was found”或者更迷惑的提示“The partition table format in use on this device is MBR, but the system is booted in UEFI mode. You may want to retry after converting to GPT.”——别急着重刷ISO、别急着删分区、更别急着怀疑镜像损坏。这根本不是Ubuntu的问题而是你当前这台机器的固件启动协议和磁盘分区方案之间发生了底层逻辑冲突。简单说你的电脑正用UEFI的方式“敲门”但硬盘却只准备了一把MBR格式的“老式钥匙”门根本打不开。这个错误高频出现在2018年后出厂的主流品牌机联想ThinkPad T系列、戴尔XPS、惠普暗影精灵、华硕ROG、所有MacBookIntel版以及绝大多数国产OEM整机上。它不挑Ubuntu版本——22.04.3、24.04、甚至Debian 12都一样会报它也不看你是不是新手——我帮过三位Linux内核Contributor调试过同一块NVMe SSD上的这个报错。核心矛盾就两点一是你没手动创建ESPEFI System Partition二是你没把磁盘从MBR转成GPT。而Ubuntu安装器默认的“Erase disk and install Ubuntu”选项只会在GPT磁盘上自动创建ESP遇到MBR就直接放弃连尝试格式化的机会都不给。所以这不是bug是设计使然UEFI规范强制要求启动必须依赖ESP分区而ESP只能存在于GPT磁盘上。下面我会带你从固件设置、磁盘结构、分区实操、安装器绕过技巧四个层面一层层剥开这个看似玄学的报错让你下次装系统时5分钟内就能定位问题、3分钟完成修复、1分钟顺利进入桌面。2. 深度拆解为什么UEFI必须配GPTESP分区到底长什么样2.1 UEFI与BIOS的根本区别不是“升级”而是“换了一套操作系统”很多人以为UEFI只是BIOS的“美化版”其实完全不是。BIOS是一段固化在主板ROM里的16位汇编程序它启动时只认识MBRMaster Boot Record这种512字节的老式引导记录靠读取硬盘前512字节里的引导代码分区表来加载操作系统。而UEFI是一套完整的32/64位运行环境自带文件系统驱动FAT32、网络协议栈、图形界面API它根本不读MBR而是直接挂载一个叫EFI System PartitionESP的FAT32分区从中读取/EFI/ubuntu/grubx64.efi这类.efi启动文件。你可以把BIOS想象成一台老式拨号电话——只能按固定号码MBR地址呼叫而UEFI则像一部智能手机——它需要先连上Wi-Fi挂载ESP分区再从云端FAT32文件系统下载并运行指定APPgrubx64.efi。这个根本差异决定了UEFI启动 必须有ESP分区 必须用GPT分区表。因为MBR分区表最大只支持4个主分区且没有预留空间存放EFI启动文件所需的结构化目录而GPTGUID Partition Table是UEFI标准配套的磁盘描述方案它在磁盘开头和结尾各留了一段备份头并在第一个分区前强制预留1MB空间——这块区域就是ESP的法定“户口所在地”。2.2 ESP分区的技术规格不是随便建个FAT32就行很多教程说“建个FAT32分区标为ESP就行”这是严重误导。真正的ESP必须同时满足5个硬性条件缺一不可文件系统必须是FAT32不能是FAT16或exFAT——UEFI固件只内置FAT32驱动分区类型必须是EF00GPT下或0xEFMBR下但MBRUEFI是非法组合——这是UEFI识别ESP的“身份证”挂载点必须是/boot/efiUbuntu安装器强制校验此路径大小必须≥100MB推荐500MB——Ubuntu 22.04.3的grub-efi-amd64-bin包含多国语言模块、主题图片、安全启动签名实测最小需128MB留500MB防未来内核更新膨胀必须位于磁盘最前端LBA 2048起始且连续——UEFI固件只扫描磁盘前几个扇区碎片化ESP会导致启动失败。我曾用fdisk -l /dev/nvme0n1检查一块报错硬盘发现用户手动创建的“ESP”分区类型是Microsoft basic data即普通FAT32起始扇区在LBA 1048576结果安装器直接忽略——因为它连EF00类型都没设UEFI固件根本不会把它当启动分区扫描。正确做法是用gdisk命令将分区类型设为EF00再用mkfs.fat -F32格式化最后在安装器里手动指定挂载点为/boot/efi。这个细节90%的图文教程都漏掉了。2.3 MBR vs GPT不只是分区数量多寡而是数据结构代际鸿沟MBR和GPT的区别远不止“MBR最多4个主分区GPT支持128个”。它们是两种完全不同的磁盘元数据组织方式对比维度MBRMaster Boot RecordGPTGUID Partition Table存储位置磁盘第一个扇区LBA 0512字节磁盘开头LBA 1和结尾各存一份完整备份每份约16KB分区数量最多4个主分区或3主1扩展理论支持2^64个分区实际工具限制128单分区上限2TB32位扇区地址9.4ZB64位扇区地址≈940万TB数据校验无CRC校验损坏即瘫痪每个GPT头含CRC32校验和自动修复启动依赖BIOS固件读取MBR代码 → 加载活动分区引导扇区UEFI固件读取GPT头 → 定位ESP分区 → 加载/EFI/boot/bootx64.efi关键点在于UEFI固件根本不解析MBR分区表。当你在UEFI模式下启动固件只会做三件事1读取磁盘LBA 1处的Primary GPT Header2验证其CRC323若校验失败读取末尾的Backup GPT Header。如果整个磁盘是MBR格式LBA 1位置是空白或随机数据UEFI直接判定“无有效分区表”进而无法找到ESP——这就是报错“The partition table format in use on this device is MBR...”的底层原因。此时哪怕你硬盘上有10个FAT32分区UEFI也视而不见。解决方案只有两个要么切回Legacy BIOS模式牺牲Secure Boot等新特性要么把磁盘转成GPT推荐。3. 实操全流程从固件设置到分区创建手把手搞定ESP与GPT转换3.1 第一步确认并锁定固件启动模式UEFI/Legacy别跳过这步很多用户反复失败就是因为没搞清当前到底是UEFI还是Legacy在工作。方法极简单开机狂按Del/F2/F10不同品牌键位不同看开机LOGO提示进固件设置找到Boot Mode、Boot Option Filter或UEFI/Legacy Boot选项必须选择UEFI Only或UEFI First禁用Legacy Support/CSM同时关闭Secure BootUbuntu 22.04.3默认不签名开Secure Boot会卡在启动画面保存退出通常F10→Yes。提示某些品牌机如联想的UEFI设置藏得极深。例如ThinkPad需先进入Config→Boot→Boot Mode再选UEFI戴尔XPS则在General→Boot List Option里选UEFI。如果找不到明确选项观察开机LOGO下方是否有“Press F12 for Boot Menu”按F12后看到的启动项带UEFI:前缀如UEFI: USB DISK 1100说明当前是UEFI模式若显示USB DISK 1100无前缀则是Legacy模式。3.2 第二步用gdisk安全转换MBR→GPT不丢数据如果你硬盘已有Windows或其他系统千万别用parted /dev/sda mklabel gpt暴力清空——那会直接抹掉所有分区。正确做法是用gdisk进行无损转换# 从Ubuntu Live USB启动打开终端 sudo apt update sudo apt install gdisk -y sudo gdisk /dev/sda # 替换sda为你目标磁盘可用lsblk确认进入gdisk交互界面后按顺序输入r # 进入恢复/转换菜单 g # 将MBR转换为GPT不破坏现有分区 w # 写入更改并退出注意此操作仅重写分区表头原有分区数据完全保留。但转换后原MBR的“活动分区”标志失效Windows可能无法启动需后续重建BCD。转换完成后用sudo fdisk -l /dev/sda确认输出中出现Disk label type: gpt且分区类型显示为Microsoft basic data等GPT标识而非Linux/EFI System等MBR类型。3.3 第三步手动创建合规ESP分区关键转换GPT后还需为Ubuntu创建专用ESP。这里强烈建议用gdisk而非图形化工具因为GUI工具常忽略EF00类型设置sudo gdisk /dev/sda # 输入以下命令每行一个 n # 新建分区 1 # 分区号建议ESP用1号 [回车] # 起始扇区默认即LBA 2048符合UEFI要求 500M # 大小输入500M非500M ef00 # 分区类型EF00 EFI System w # 写入创建后格式化为FAT32sudo mkfs.fat -F32 /dev/sda1实操心得我试过用parted创建ESP结果因默认起始扇区对齐问题parted用MiB对齐UEFI要求扇区对齐导致某些主板如华硕TUF B550无法识别ESP。而gdisk严格按LBA扇区操作100%兼容。另外mkfs.fat -F32必须加-F32参数否则默认创建FAT16小于16MB才用UEFI无法读取。3.4 第四步在Ubuntu安装器中正确挂载ESP并跳过自动分区启动Ubuntu Live USB选择“Try Ubuntu”打开安装器。当到达分区步骤时绝对不要选“Erase disk and install Ubuntu”它会清空所有分区且对MBR磁盘直接报错选“Something else” → 手动分区在分区列表中找到你刚创建的/dev/sda1应显示为FAT32、500MB、primary点击它 → 点“Change...” → 设置Use as:EFI System PartitionFormat:✅ 勾选首次使用必须格式化Mount point:/boot/efi其他分区如/、/home按常规设置ext4挂载点/等确保“Install bootloader to”下拉框选的是/dev/sda整块磁盘不是/dev/sda1ESP分区本身。注意安装器界面上“EFI System Partition”选项是灰色的那说明你没在gdisk里设EF00类型或者分区大小不足100MB。此时退回终端用sudo gdisk /dev/sda检查分区类型输入p查看列表确认sda1的Code列是EF00。如果不是输入t→1→ef00→w修正。4. 高阶技巧与避坑指南那些官方文档绝不会写的实战经验4.1 双系统共存Windows Ubuntu的ESP复用与冲突规避如果你硬盘已有WindowsUEFI安装它必然已创建ESP。此时严禁删除原ESP而应复用它用sudo fdisk -l /dev/sda找到Windows的ESP通常是第一个FAT32分区大小100-500MB在Ubuntu安装器中选中该分区 → “Change...” → Mount point设为/boot/efi取消勾选“Format”安装完成后Windows启动项会自动出现在GRUB菜单——因为Ubuntu的grub-install会向同一ESP写入/EFI/ubuntu/目录而Windows的/EFI/Microsoft/目录不受影响。踩过的坑某次帮朋友装双系统他嫌原ESP只有100MB手动扩容到500MB后Windows突然无法启动。查日志发现Windows BCDBoot Configuration Data存储在ESP根目录/EFI/Microsoft/Boot/BCD而扩容操作导致BCD文件被移动到新位置Windows Boot Manager找不到它。解决方案是扩容后用Windows PE启动盘执行bcdboot C:\Windows /s S: /f UEFIS:为ESP盘符重建BCD。4.2 NVMe SSD特殊处理PCIe通道与固件Bug引发的ESP识别失败高端主板如X570、Z690的NVMe SSD有时在UEFI里能识别但Ubuntu安装器却找不到ESP。这通常源于PCIe ACSAccess Control Services固件Bug。解决方法进固件设置 → 找到Advanced→PCI Subsystem Settings→ACS Support关闭ACS Support设为Disabled保存重启再试安装。实测案例一块三星980 Pro在华硕ROG STRIX X570-E主板上开启ACS时Ubuntu安装器死活看不到/dev/nvme0n1p1关闭后立即识别。这是因为ACS启用后UEFI固件对NVMe设备的枚举逻辑异常导致ESP分区信息无法传递给Linux内核。4.3 安装后GRUB不显示Windows启动项三行命令全解决Ubuntu安装完开机只有UbuntuWindows不见了别重装执行sudo os-prober # 扫描其他系统应输出Windows路径 sudo update-grub # 生成新grub.cfg sudo grub-install /dev/sda # 重装GRUB到磁盘MBR/GPT头关键点os-prober默认被禁用出于安全考虑。需先编辑/etc/default/grub将GRUB_DISABLE_OS_PROBERfalse取消注释再执行上述命令。否则update-grub永远看不到Windows。4.4 终极备选方案用Boot-Repair一键修复适合手抖党如果以上步骤仍失败用官方认证的Boot-Repair工具sudo add-apt-repository ppa:yannubuntu/boot-repair sudo apt update sudo apt install -y boot-repair boot-repair启动后点“Recommended repair”它会自动检测ESP位置并挂载重装GRUB到正确位置修复/boot/efi挂载配置重建GRUB菜单。注意Boot-Repair会修改/etc/fstab添加ESP挂载行。务必检查该行是否正确典型错误是写成UUIDxxx /boot/efi vfat defaults 0 1但实际UUID应与sudo blkid | grep sda1输出一致。我见过三次因UUID写错导致系统启动卡在/boot/efi mount failed。5. 常见问题速查表报错代码、原因与秒级解决方案报错原文根本原因秒级解决方案验证命令No EFI System Partition was found未创建EF00类型ESP分区或ESP未挂载到/boot/efi用sudo gdisk /dev/sda创建EF00分区sudo mkfs.fat -F32 /dev/sda1安装器中挂载为/boot/efisudo fdisk -l /dev/sda | grep -A10 Disk labelThe partition table format... is MBR, but system is booted in UEFI mode磁盘为MBR格式但固件在UEFI模式下启动进固件设置关UEFI或用sudo gdisk /dev/sda转GPTsudo fdisk -l /dev/sda | head -n2grub-install: error: cannot find EFI directoryESP存在但未挂载或挂载点非/boot/efisudo mkdir -p /boot/efi sudo mount /dev/sda1 /boot/efimount | grep efiFailed to start Load Kernel Modules启动后ESP挂载失败导致initramfs找不到驱动编辑/etc/fstab确保ESP行正确重启sudo cat /etc/fstab | grep efiGRUB菜单无Windows选项os-prober被禁用sudo nano /etc/default/grub→ 取消GRUB_DISABLE_OS_PROBER注释 →sudo update-grubsudo os-prober应输出Windows路径个人经验遇到任何ESP相关问题第一反应不是重装而是查三件事1sudo fdisk -l看磁盘类型和ESP是否存在2lsblk看ESP是否已挂载3sudo blkid看ESP的UUID是否与/etc/fstab匹配。这三步5分钟内能定位90%的问题。剩下10%基本是主板固件Bug换UEFI版本或关ACS即可。6. 为什么你总在重复踩坑三个被忽视的底层认知6.1 “启动模式”不是设置项而是硬件与固件的联合契约很多人以为在BIOS里切个选项就万事大吉其实UEFI/Legacy切换涉及三个层面固件层UEFI固件代码是否加载磁盘层MBR/GPT分区表是否匹配固件需求操作系统层Linux内核是否编译了UEFI启动支持Ubuntu默认已启用。 三者必须严格对齐。比如你固件设UEFI磁盘是GPT但Ubuntu ISO是用Legacy模式写入U盘Rufus里选了MBR分区方案那么U盘本身无法被UEFI识别——此时你会看到“no bootable device”而非ESP报错。所以制作启动盘时Rufus必须选“GPT partition scheme for UEFI computers”balenaEtcher则自动适配。6.2 ESP不是Ubuntu专属而是所有UEFI系统的公共停机坪ESP分区里存的不是Ubuntu独占文件而是所有UEFI系统共享的“机场候机厅”。/EFI/ubuntu/是Ubuntu的登机口/EFI/Microsoft/是Windows的/EFI/fedora/是Fedora的。它们互不干扰共同由UEFI固件调度。因此删除ESP等于炸毁机场——所有系统都无法启动。这也是为什么双系统必须复用ESP而不是各建各的。6.3 Ubuntu 22.04.3的“Desktop”镜像对UEFI支持反而比Server版更激进很多人奇怪Server版装UEFI毫无压力Desktop版却频频报错真相是Desktop镜像默认启用fwupd固件更新服务它在安装时会主动扫描ESP空间。如果ESP100MBfwupd拒绝写入进而触发安装器报错。而Server版默认不启用fwupd所以对ESP大小宽容得多。解决方案很简单创建ESP时直接设500MB一劳永逸。最后分享个小技巧装完系统后执行sudo efibootmgr -v你会看到类似Boot0001* ubuntu HD(1,GPT,xxx)/File(\EFI\ubuntu\shimx64.efi)的输出——这就是UEFI固件里Ubuntu的启动项ID。如果某天GRUB坏了你可以直接在UEFI启动菜单里选这个ubuntu项绕过GRUB直接进系统再修复。这招救过我七次比重装快十倍。
返回列表