Grub

如何修復只讀 EFI 系統分區?

  • May 12, 2020

我有一個 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 /sys/firmware/efi/efivars efivarfs defaults 0 0

更新:顯然,efivarfs如果有人執行rm -rf /sys/firmware/efi/efivarfs.

預設情況下,除了已知安全的變數項之外的所有變數項efivarfs都是不可變的(類似於chattr +i),並且具有合法的 UEFI 變數操作工具(例如efibootmgr在進行修改之前更改文件屬性),從而在新核心中添加了針對這一點的保護。

在滾動發布系統中,可以在使用者空間工具(如使用者空間工具)收到必要的修改以處理它之前,進行核心更新,使efivarfs更改登陸您的系統。grub-install這可能發生在這種情況下。

引用自:https://unix.stackexchange.com/questions/439121