如何修復uefi啟動選項

如何修復uefi啟動選項

我以某種方式刪除了 BIOS 中的所有啟動選項(可能是由於使用超級 grub 磁碟的某些操作引起的)。我嘗試使用 boot-repair live-usb 修復我的 grub。執行建議的修復和重新啟動後,BIOS 中仍然沒有啟動選項,每次啟動時都會進入 BIOS 設定畫面。

有關我的設置的完整資訊是這裡

整個故事開始於我發現我的 Windows 無法啟動(BCD 損壞錯誤)。然後我認為這是一個 grub 問題,所以我在我的 Linux 中使用了引導修復並執行了建議的修復。然後我發現我也無法進入我的linux,只剩下grub>提示字元。所以我在現場嘗試了super-grub disk和super-grub2 disk。然後我發現我基本上已經刪除了 BIOS/uefi 中的所有啟動選項。現在我安裝了另一個linux(kubuntu),希望新安裝可以修復grub,但它沒有。所以我最終嘗試了 boot-repair live usb 並執行了建議的修復,但仍然沒有成功。知道如何解決這個問題嗎?

答案1

最後用gdisk修復了它。不確定哪個是關鍵步驟,但是在備份和還原 uefi 標頭和分割表後,重新啟動時我的 linux 將嘗試修復磁碟,然後無法掛載 efi 系統分割區。在此階段,從救援命令列執行 gdisk 會自動發現與 efi 系統分割區關聯的錯誤「活動」標誌。只要讓它修復標誌就可以解決問題。

不是bios或uefi的問題。我還嘗試清除 efi 系統分割區並重新安裝 Windows 10。

答案2

如果您唯一的問題是 UEFI NVRAM 開機選項(啟動變數)消失了,您將有多種選擇:

如果您可以在 UEFI 模式下從外部媒體啟動:

  • 掛載作業系統的根檔案系統, mount /proc/sys然後/devchroot 到該檔案系統,掛載 ESP 分割區並運行grub-install(假設/dev/sdX是作業系統安裝的根檔案系統)
mount /dev/sdX /mnt
mount -t proc none /mnt/proc
mount --rbind /dev /mnt/dev
mount --rbind /sys /mnt/sys
chroot /mnt /bin/bash
mount /boot/efi
grub-install /dev/sdX

grub-install會自動為 GRUB 產生 UEFI 開機變量,但它需要efivarfs安裝虛擬檔案系統/sys/firmware/efi/efivars並且系統以 UEFI 模式開機。

  • 或掛載您的 ESP 分割區而不進行 chroot,並用於efibootmgr手動重新建立您的啟動選項:(假設/dev/sdX1是您的 ESP 分割區)
mount /dev/sdX1 /boot/efi

ls /boot/efi/EFI # there should be a directory for each OS/distribution

efibootmgr -c -d /dev/sdX1 -L "Any label you want" -l \\EFI\\<distro name>\\shimx64.efi  
# or ...\\grubx64.efi if Secure Boot disabled
  • 如果啟用了安全啟動,並且您的作業系統安裝了安全啟動填充程序,則可能會有一個特殊grub-install選項。如第一個選項所示 chroot,然後運行:
grub-install --uefi-secure-boot /dev/sdX

如果您的外部媒體只能在傳統 BIOS 模式下啟動:

  • Chroot 就像上面的第一個選項一樣,但使用這一grub-install行:
grub-install --target=x86_64-efi --force-extra-removable /dev/sdX

在傳統模式下,您可能會收到有關無法存取 UEFI 啟動變數的錯誤訊息,但您現在可以忽略該訊息。

這會將 GRUB 的第二個副本安裝為[ESP mount path]/EFI/boot/bootx64.efi,這是韌體期望找到 UEFI 後備/可移動媒體引導程式的位置。此後,韌體應將 ESP 分割區偵測為“可在 UEFI 模式下啟動”,並且您應該能夠使用 BIOS 啟動選單選擇它進行啟動。由於現在僅存在 UEFI 可啟動磁碟(刪除外部啟動媒體後),因此即使是最傳統的 UEFI 韌體現在也應該以 UEFI 模式啟動。

系統以 UEFI 模式啟動後,您可以grub-install /dev/sdX再次執行來為 Linux 作業系統重新建立標準 UEFI 啟動變數。

相關內容