如何修复只读EFI系统分区?

如何修复只读EFI系统分区?

我有一个 EFI 分区 /dev/sda1,我曾经能够在其中安装 GRUB 并使用 efibootmgr 更改引导顺序而不会出现任何问题,但不幸的是现在我无法从 grub 收到“只读文件系统”错误 -安装(具体来说,当安装到 /boot/efigrub-install --target=x86_64-efi --efi-directory=/boot/efi /dev/sda和 efibootmgr 时。我尝试使用以下命令擦除它:

sudo mkfs.vfat /dev/sda1

但我仍然收到此错误。具体grub-install --target=x86_64-efi --efi-directory=/boot/efi /dev/sda给出:

Installing for x86_64-efi platform.
Could not delete variable: Read-only file system
efibootmgr: ** Warning ** : Boot0002 has same label gentoo
Could not prepare Boot variable: Read-only file system
Installation finished. No error reported.

我看见修复USB只读文件系统,但我无法擦除此磁盘,因为wipefs我安装并设置了多个发行版,并且需要一段时间才能从此类擦除中恢复。奇怪的是 grub-install 仍然向 /dev/sda1 添加文件,只是启动顺序似乎无法更改。

答案1

请注意,错误消息是“无法删除变量:只读文件系统”。它实际上是在尝试操作 UEFI 启动变量,但失败了。

这些错误实际上是指efivarfs用于访问 UEFI 引导变量的文件系统,该变量通常应安装在/sys/firmware/efi/efivars.可能还有旧版本的 UEFI 变量访问机制,位于/sys/firmware/efi/vars

如果您错过了 CONFIG_EFIVAR_FS 内核配置选项,则该虚拟文件系统的驱动程序可能不存在于您的内核中(如果编译为模块,则其名称为efivarfs)。如果驱动程序可用,请确保此文件系统列在/etc/fstab:如果您的系统引导脚本没有专门处理它,您可能需要在 /etc/fstab 文件中添加如下行:

efivarfs /sys/firmware/efi/efivars efivarfs defaults 0 0

更新:显然,如果有人运行 ,最初的实现efivarfs可能会导致某些计算机变砖rm -rf /sys/firmware/efi/efivarfs

新内核中添加了针对这种情况的保护措施,默认情况下,除了已知安全的变量项之外的所有变量项都是efivarfs不可变的(类似于chattr +i),并且拥有合法的 UEFI 变量操作工具,例如efibootmgr在进行修改之前更改文件属性。

在滚动发布系统中,可以在efivarfs用户空间工具(例如grub-install接收到必要的修改来处理它之前)进行内核更新,使更改发生在您的系统上。在本例中可能会发生这种情况。

相关内容