解决联想更新BIOS报错:mount the EFI system partition failed
解决联想更新BIOS报错:mount the EFI system partition failed
问题
使用联想thinkbook笔记本运行双系统,在同一个EFI分区内安装了Windows和linux(GRUB)的启动引导,在windows下执行联想提供的BIOS更新程序时报错mount the EFI system partition failed
。联想使用的固件供应商为Insyde,包括用于更新BIOS的程序。其他使用该公司方案的笔记本品牌也可能遇到类似问题。
在Windows11+的系统中,微软也会将OEM提供的BIOS更新作为系统更新的一部分发布。因此上述问题也表现为系统更新重启多次后执行到99%时报错“某些操作未按计划进行”,并自动回退,导致系统更新一直失败。
最初认为是双系统的问题,于是一直没有更新。但最近在linux设置界面查看系统固件信息时报错:
|
|
认为这两者之间可能存在关联,可能是EFI分区本身的问题。值得排查解决。
排查
使用的发行版Manjaro查询固件信息使用的后端是fwupd,经过验证上述报错确实来自fwupd。
安装fwupd后可以执行如下命令测试:
|
|
fwupd在输出WARNING的同时指向了关于该问题的向导页面。
逐项排查,确认EFI分区正确挂载于/boot/efi
,分区格式化为fat32
。
直到排查EFI system partition on a GUID partition table with a wrong partition type GUID
时,在相关的issue中要求查看如下命令的输出:
sudo fwupdtool get-devices --plugins uefi-capsule -vv output > fw.txt 2>> fw.txt
查看输出文件,关注到如下片段:
06:13:04.629 FuVolume Looking for volumes of type c12a7328-f81f-11d2-ba4b-00a0c93ec93b
...
06:13:04.633 FuVolume device /org/freedesktop/UDisks2/block_devices/nvme0n1p1, type: 21686148-6449-6e6f-744e-656564454649, internal: 1, fs: vfat
06:13:04.633 FuContext no volumes of type c12a7328-f81f-11d2-ba4b-00a0c93ec93b
...
06:13:04.643 FuPluginUefiCapsule cannot find default ESP: No ESP or BDP found
已知我的硬盘上nvme0n1p1为挂载的EFI分区,则上述输出表示可识别的EFI分区类型为c12a7328-f81f-11d2-ba4b-00a0c93ec93b
,而实际分区类型为21686148-6449-6e6f-744e-656564454649
。
分析
查看GUID partition type及其含义的列表,可知c12a7328-f81f-11d2-ba4b-00a0c93ec93b
是正确的EFI分区类型,而21686148-6449-6e6f-744e-656564454649
是legacy的BIOS boot partition类型。
这很奇怪。我的双系统都是使用UEFI启动的,设备是2024年新购入,不应该存在传统BIOS启动分区。
推测:分区类型在安装linux或者在某次分区操作中被错误更改,UEFI启动时通过分区引导文件能够正常识别并启动,但这条分区类型会影响fwupd和BIOS升级工具等程序如何在众多分区中识别EFI分区。
解决
一条superuser帖子提供了使用gdisk修改分区类型的步骤。
安装和进入gdisk:
首先使用发行版的包管理器安装gdisk,如果没有预装的话。
执行sudo gdisk /dev/nvme0n1
,其中硬盘设备更换为你实际的硬盘设备名。
此时进入gdisk交互界面,列出了若干支持的指令。
查看所有分区:
按p并回车可以列出所有分区及其相关信息,其中Code
一列也表示分区类型。记住你的EFI分区的序号,通常为1。
|
|
按L并回车会列出所有支持的Type Code及其含义,也可搜索。可以找到EF02代表传统BIOS启动分区,EF00代表EFI启动分区。
|
|
备份分区表:
按b回车,再输入文件路径,将分区表备份到文件以免操作失误。
查看和修改分区类型:
按 i 并回车,再按EFI分区的序号(例如1)并回车会显示分区的详细信息,包括此前的GUID partition type。
|
|
如果想要修改分区类型,按t回车,再输入序号并回车,再输入EF00
,此时会显示Changed type of partition to EFI System partition
。可以再使用i指令确认。
但此时修改还没有实际写入,按w并回车执行写入,出现successful字样则成功。
重启计算机并验证:
此时正在运行的kernel仍然使用的是旧的分区表,新的分区表在重启后应用。
重启计算机到linux,fwupd不再提示warning。
重启计算到windows,BIOS升级工具可以正常升级。注意升级BIOS后会删除grub启动引导项,最好在升级前备份引导项以便恢复,windows下可使用工具如EFI Boot Editor,linux下方式较多,不再赘述。