Linux 下修復 UEFI 開機程式之流程
倘若因某些緣故,發生 Linux 系統的 UEFI 開機失效,使得無法順利進入作業系統。那麼可參考以下流程,來進行 UEFI 開機程式重新安裝的動作。本文範例是以 CentOS Stream 8 為操作環境,使用此發行版的安裝映像檔做開機,然後進入救援模式。接著設法讓安裝在磁碟中的相同發行版,回復至可順利啟動的狀態。
若是使用同為 Red Hat 生態體系下的 Linux 發行版,操作流程應會相當一致。至於其它的 Linux 發行版本,則至少在概念上也是相同的。
1. 進入救援模式
使用安裝映像檔開機,在顯示啟動選項後,選擇【Troubleshooting】→【Rescue a CentOS Stream system】(附圖 1、附圖 2)。
2. 掛載並切換至系統目錄
救援模式能夠自動找尋磁碟中的系統安裝位置(附圖 3),選擇【1) Continue】來執行此操作。完成掛載後,按下 ENTER 進入命令行(附圖 4)。接著便比照畫面上的指示,輸入以下指令,切換至系統目錄:
- chroot /mnt/sysroot
3. 設定網路連線
重新安裝 UEFI 開機程式的動作,最直接的途徑就是透過網路重新安裝相關套件。然而救援模式下的系統操作環境,可能不會自動地透過 DHCP 取得網路連線,而需要手動設定。倘若欲配置的 IP 位址為 192.168.1.15,子網路遮罩為 255.255.255.0,以及閘道為 192.168.1.1。那麼假設網卡介面為 enp1s0,則設定指令如下:
- ip addr add 192.168.1.15/24 dev enp1s0
- route add default gw 192.168.1.1
4. 重新安裝 UEFI 套件
執行以下 dnf 指令:
- dnf reinstall grub2-efi-x64 shim-x64
前述安裝動作會將 UEFI 開機所需的相關檔案,重新安裝到 /boot/efi 目錄下,也就是磁碟中的 EFI 分割區。倘若開機失效來自於檔案的遺失或損毀,那麼完成此項步驟後應可恢復。
5. 建立新的 UEFI 開機項目
通常 UEFI 會自動偵測磁碟中 EFI 分割區內的 UEFI 開機程式,並列入到開機選項中。但倘若需要手動建立的話,則可以利用 efibootmgr 工具。首先可使用以下指令查看現存的開機項目:
- efibootmgr -v
清單中的每個項目都會帶有一組十六進位的編號,若是希望刪除其中的特定項目,例如編號 0001 之項目,那麼可使用以下刪除指令:
- efibootmgr -b 0001 -B
至於建立新開機項目的範例如下:
- efibootmgr -c -L 'CentOS Stream' -d /dev/sda -p 1 -l '\EFI\centos\shimx64.efi'
前述指令表示會新增一個名為「CentOS Stream」的開機項目,位於 /dev/sda 的第一個分割區內,其開機程式為該分割區中的 \EFI\centos\shimx64.efi。關於開機程式之具體路徑,應參照 shim-x64 套件所安裝的檔案清單,然後將斜線替換為反斜線。可使用以下指令確認該套件的安裝清單:
- rpm -ql shim-x64