哪個命令用於安裝 grub?
我需要重新安裝
grub
(以修復引導孔安全問題)。我不想犯錯誤,而且因為我不太習慣grub
,所以我問自己是否有辦法找到grub-install
用於在機器上安裝 current 的命令grub
。謝謝你的幫助。
環境:Grub 2、Manjaro(Arch linux)、EFI 引導
efibootmgr -v
以 root 身份執行。第一行將是BootCurrent: NNNN
NNNN 是一個十六進制的四位數字。找到相應的“BootNNNN”行。它看起來類似於:
BootNNNN* Manjaro HD(X,GPT,11111111-2222-3333-4444-555555555555,0x800,0x82000)/File(\...\something.efi)
NNNN
是第一行的數字,Manjaro
是人類可讀的啟動項描述字元串(可以是任何內容),X
是 UEFI 韌體檢測到的磁碟順序,11111111-2222-3333-4444-555555555555
是引導載入程序安裝到的 EFI 系統分區的 PARTUUID,- 並且
\...\something.efi
是 EFI 系統分區上的 Windows 樣式路徑名,標識要使用的引導載入程序文件。對於 GRUB + Secure Boot,它通常是shimx64.efi
或shim.efi
類似的,指的是 Secure Boot shim 引導載入程序,然後它將載入grubx64.efi
同一目錄中命名的文件。EFI 系統分區可能掛載為
/boot/efi
、 或/boot
,或根本不掛載;不同的發行版在這裡做不同的事情。如果它安裝在/boot/efi
,執行ls -l /boot/efi/EFI/BOOT/BOOTX64.efi
該文件的長度並將其與efibootmgr -v
: 標識的引導載入程序路徑中的文件進行比較,如果它們匹配,您就會知道您可能也應該更新備份引導載入程序。(記住這一點 - 稍後再詳細介紹。)一旦知道了 PARTUUID,就可以使用
blkid
或lsblk -o +PARTUUID
辨識 EFI 系統分區(簡稱 ESP)對應的 Linux 設備名稱。現在您將擁有重建grub-install
命令所需的所有部分。**但是,**使用 Secure Boot,註冊到系統 NVRAM 的第一個“引導載入程序”實際上是 Secure Boot shim,而不是 GRUB。你不想改變這個事實。
因此,您可能希望使用該
--no-nvram
選項來避免更改 NVRAM 引導變數。因此,重新安裝 GRUB 的命令應該是:grub-install --no-nvram /dev/<the disk device corresponding to your ESP partition>
如果 GRUB 目前也安裝到
\EFI\BOOT\BOOTX64.efi
ESP 上的備份引導載入程序路徑中,您需要將--force-extra-removable
選項添加到grub-install
命令中,因此它也會更新。請注意,如果您使用的是 Secure Boot shim 引導載入程序,那麼更新 ESP 上的 shim 也很重要。在重新引導系統之前,驗證 GRUB 和 ESP 上的 shim 是否具有足夠近期的時間戳。2020-07-28 之後的任何事情都應該是好的。如果 shim 包不會自動更新 ESP 上的 shim 文件,您可以在包安裝程序放置的任何位置找到更新的 shim,並將其複製到 ESP 上的舊 shim 上。
使用 Secure Boot 和 GRUB,ESP 的典型佈局如下所示:
<ESP mountpoint>/EFI/<name of distro>/grubx64.efi
= 實際的 GRUB<ESP mountpoint>/EFI/<name of distro>/shimx64.efi
= 安全啟動墊片<ESP mountpoint>/EFI/BOOT/BOOTX64.efi
= 墊片的備份引導副本<ESP mountpoint>/EFI/BOOT/grubx64.efi
= GRUB 的備份引導副本帶有組件的路徑
<name of distro>
通常應該是主引導載入程序,但如果系統出於任何原因“忘記”NVRAM 設置,例如重置所有韌體設置的 UEFI 韌體更新(又名“BIOS設置”)恢復為出廠預設值。