如何修復只讀 EFI 系統分區?
我有一個 EFI 分區 /dev/sda1,我曾經能夠將 GRUB 安裝到該分區並使用 efibootmgr 更改引導順序而沒有問題,但不幸的是,現在我無法從 grub 收到“只讀文件系統”錯誤-安裝(具體來說,當安裝到 /boot/efi
grub-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
這可能發生在這種情況下。