我有一个 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
接收到必要的修改来处理它之前)进行内核更新,使更改发生在您的系统上。在本例中可能会发生这种情况。