我有一个 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.
我看到了Fix read only file system usb,但是我无法擦除这个磁盘,wipefs
因为我安装并设置了几个发行版,并且需要一段时间才能从这样的擦除中恢复。奇怪的是 grub-install 仍然将文件添加到 /dev/sda1,这只是似乎无法更改的引导顺序。
请注意,错误消息是“无法删除变量:只读文件系统”。它实际上是在尝试操纵 UEFI 引导变量,但在那里失败了。
这些错误实际上是指
efivarfs
用于访问 UEFI 引导变量的文件系统,该变量通常应安装在/sys/firmware/efi/efivars
. 也可能有旧版本的 UEFI 变量访问机制,位于/sys/firmware/efi/vars
.如果您错过了 CONFIG_EFIVAR_FS 内核配置选项,则此虚拟文件系统的驱动程序可能不存在于您的内核中(如果编译为模块,则命名为
efivarfs
)。如果驱动程序可用,请确保此文件系统列在/etc/fstab
:更新:显然,
efivarfs
如果有人运行rm -rf /sys/firmware/efi/efivarfs
.默认情况下,除了已知安全的变量项之外的所有变量项
efivarfs
都是不可变的(类似于chattr +i
),并且具有合法的 UEFI 变量操作工具(例如efibootmgr
在进行修改之前更改文件属性),从而在新内核中添加了针对这一点的保护。在滚动发布系统中,可以在用户空间工具(如用户空间工具)收到必要的修改以处理它之前,进行内核更新,使
efivarfs
更改登陆您的系统。grub-install
这可能发生在这种情况下。