CentOS7中使用efibootmgr管理UEFI啟動項

roc_guo發表於2022-05-18

本文介紹如何在 7.9中使用 efibootmgr工具來管理EFI啟動項。

安裝

CentOS7 預設以UEFI模式安裝,會自帶 >efibootmgr工具,如沒有帶可以使用下面 安裝:

[root@localhost ~]# yum -y install efibootmgr
列出 UEFI 啟動項條目

在使用UEFI韌體的系統上,UEFI啟動項儲存在NVRAM中。 要使用  efibootmgr列出現有的啟動項,如果需要列出條目就是不帶任何選項或引數地呼叫efibootmgr。 下面就是輸出條目的 :

 [root@localhost ~]# efibootmgr
BootCurrent: 0007
Timeout: 1 seconds
BootOrder: 000A,0009,0004,0007,0008,0006,0000,0001,0002,0003,0005
Boot0000* debian
Boot0001* CD/DVD Rom
Boot0002* Hard Disk
Boot0003* Network
Boot0004* CentOS
Boot0005* USB Storage
Boot0006* oVirt Node Next
Boot0007* CentOS Linux
Boot0008* proxmox
Boot0009* Linux
Boot000A* Linux
MirrorStatus: Platform does not support address range mirror
DesiredMirroredPercentageAbove4G: 0.00
DesiredMirrorMemoryBelow4GB: false

其中有一些是之前安裝系統儲存下來的啟動項,可以刪除。
CentOS7中使用efibootmgr管理UEFI啟動項CentOS7中使用efibootmgr管理UEFI啟動項
在上面的輸出中,我們可以注意到與引導變數對應的一系列資訊。 首先,我們可以看到 BootCurrent:這個鍵的值為 0007,表示當前啟動的專案為0007號 CentOS Linux

在輸出中發現的第二個條目是 Timeout:表示在啟動選單中自動選擇條目之後的時間,在本例中是1秒。 接下來是 BootOrder:這個鍵的值是由逗號分隔的條目編號,並顯示相關條目在EFI引導選單中顯示的順序。

efibootmgr命令還顯示了可用引導條目的列表。 每個條目顯示其編號和名稱。 在列表中,啟用的條目它們被標記為' *符號。

可以新增 -v 或者 --verbose 選項來獲取條目的詳細資訊:

[root@localhost ~]# efibootmgr -v
BootCurrent: 0005
Timeout: 5 seconds
BootOrder: 0006,0005,0004,0000,0001,0002,0003
Boot0000* UiApp FvVol(7cb8bdc9-f8eb-4f34-aaea-3ee4af6516a1)
Boot0001* UEFI VBOX CD-ROM VB2-01700376         ACPI(a0341d0,0)PCI(1,1)ATAPI(1,0,0)N.....YM....R,Y.
Boot0002* UEFI VBOX HARDDISK VB6d6781ff-6793398b        ACPI(a0341d0,0)PCI(d,0)SATA(0,ffff,0)N.....YM....R,Y.
Boot0003* EFI Internal Shell    FvVol(7cb8bdc9-f8eb-4f34-aaea-3ee4af6516a1)
Boot0004* CentOS Linux  HD(1,800,64000,2c1c6263-e2bc-4f35-b341-a9174a199f60)File(\EFI\centos\shim.efi)
Boot0005* Centos7.9-EFI HD(1,800,64000,2c1c6263-e2bc-4f35-b341-a9174a199f60)File(\EFI\centos\grubx64.efi)
Boot0006* centos7.9     HD(1,800,64000,2c1c6263-e2bc-4f35-b341-a9174a199f60)File(\EFI\centos\grubx64.efi)

CentOS7中使用efibootmgr管理UEFI啟動項CentOS7中使用efibootmgr管理UEFI啟動項

更改 UEFI 啟動項順序

我們可以使用efibootmgr來更改當前的引導順序。 使用 -o 或者 --bootorder選項,後新增想要排列的順序。當前本機的引導順序如下:

BootOrder: 000A,0009,0004,0007,0008,0006,0000,0001,0002,0003,0005

CentOS7中使用efibootmgr管理UEFI啟動項CentOS7中使用efibootmgr管理UEFI啟動項
可以看到上圖彙總,首先啟動 000A Linux,最後一個條目是 0005 USB Storage裝置。 假設我們想要交換這些條目,讓 0003 Network成為第一個條目。 我們所要做的就是執行以下命令:

 [root@localhost ~]# efibootmgr -o 0003,000A,0009,0004,0007,0008,0006,0000,0001,0002,0005
BootCurrent: 0007
Timeout: 1 seconds
BootOrder: 0003,000A,0009,0004,0007,0008,0006,0000,0001,0002,0005
Boot0000* debian
Boot0001* CD/DVD Rom
Boot0002* Hard Disk
Boot0003* Network
Boot0004* CentOS
Boot0005* USB Storage
Boot0006* oVirt Node Next
Boot0007* CentOS Linux
Boot0008* proxmox
Boot0009* Linux
Boot000A* Linux
MirrorStatus: Platform does not support address range mirror
DesiredMirroredPercentageAbove4G: 0.00
DesiredMirrorMemoryBelow4GB: false

CentOS7中使用efibootmgr管理UEFI啟動項CentOS7中使用efibootmgr管理UEFI啟動項
可以看到順序已經變了。網路卡啟動變為第一項了。
CentOS7中使用efibootmgr管理UEFI啟動項CentOS7中使用efibootmgr管理UEFI啟動項

建立一條引導

可以使用 efibootmgr 在 UEFI 引導管理器中建立新條目。 要建立引導項,我們必須知道EFI系統分割槽的位置和要引導的EFI映像的路徑。

建立新條目時必須使用的選項是 -c 或者 --create。 假設EFI分割槽在 /dev/sda磁碟的第一個分割槽,efi映象的引導路徑是 EFI/centos/grubx64.efi,名稱為centos7.9,我們將執行以下命令:

[root@localhost ~]# efibootmgr -c -d /dev/sda -p 1 -L centos7.9 -l '\EFI\centos\grubx64.efi'
BootCurrent: 0005
Timeout: 0 seconds
BootOrder: 0006,0005,0004,0000,0001,0002,0003
Boot0000* UiApp
Boot0001* UEFI VBOX CD-ROM VB2-01700376
Boot0002* UEFI VBOX HARDDISK VB6d6781ff-6793398b
Boot0003* EFI Internal Shell
Boot0004* CentOS Linux
Boot0005* Centos7.9-EFI
Boot0006* centos7.9

CentOS7中使用efibootmgr管理UEFI啟動項CentOS7中使用efibootmgr管理UEFI啟動項
使用 -c 選項建立一個新條目。 -d (--disk) 來指定EFI系統分割槽所在的磁碟,使用 -p (--part)來指定該磁碟上的哪個分割槽是EFI分割槽(按照標準,EFI分割槽應該總是第一個,分去格式為FAT32)。

使用 -L (--label) 來提供選單中條目的名稱,最後使用 -l (--loader) 來傳遞要引導映象的路徑。 需要注意的是,路徑應該以單引號形式提供。 建立的引導條目將自動放在引導順序列表的頂部。

刪除一條引導

我們可以使用 efibootmgr 刪除現有的引導項。 我們可以刪除一個不存在的系統引導條目。 我們使用 -b 或者 --bootnum 傳遞索引作為引數來選擇我們想要刪除的引導條目,然後使用 -B 或者 --delete-bootnum 來刪除它。

例如,要刪除索引為0008 , 我們將執行以下命令:

[root@localhost ~]# efibootmgr -b 8 -B
Timeout: 1 seconds
BootOrder: 0007,0003,000A,0009,0004,0006,0000,0001,0002,0005
Boot0000* debian
Boot0001* CD/DVD Rom
Boot0002* Hard Disk
Boot0003* Network
Boot0004* CentOS
Boot0005* USB Storage
Boot0006* oVirt Node Next
Boot0007* CentOS Linux
Boot0009* Linux
Boot000A* Linux
MirrorStatus: Platform does not support address range mirror
DesiredMirroredPercentageAbove4G: 0.00
DesiredMirrorMemoryBelow4GB: false

CentOS7中使用efibootmgr管理UEFI啟動項CentOS7中使用efibootmgr管理UEFI啟動項
Tips:在傳遞引導條目序號時,我們可以不填充前面的0。

啟用、取消啟用引導條目

如果不想顯示某一個啟動項可以使用 -A 或者 --inactive 來取消啟用該條目:

[root@localhost ~]# efibootmgr -b 000A -A
Timeout: 1 seconds
BootOrder: 0007,0003,000A,0009,0004,0006,0001,0002,0005
Boot0001* CD/DVD Rom
Boot0002* Hard Disk
Boot0003* Network
Boot0004* CentOS
Boot0005* USB Storage
Boot0006* oVirt Node Next
Boot0007* CentOS Linux
Boot0009* Linux
Boot000A  Linux
MirrorStatus: Platform does not support address range mirror
DesiredMirroredPercentageAbove4G: 0.00
DesiredMirrorMemoryBelow4GB: false

可以看到 Boot000A Linux這一條前面的 *消失了,這就代表不顯示該條目了。
CentOS7中使用efibootmgr管理UEFI啟動項CentOS7中使用efibootmgr管理UEFI啟動項
如果想顯示某一個啟動項可以使用 -a 或者 --active 來啟用該條目:

[root@localhost ~]# efibootmgr -b 000A -a
Timeout: 1 seconds
BootOrder: 0007,0003,000A,0009,0004,0006,0001,0002,0005
Boot0001* CD/DVD Rom
Boot0002* Hard Disk
Boot0003* Network
Boot0004* CentOS
Boot0005* USB Storage
Boot0006* oVirt Node Next
Boot0007* CentOS Linux
Boot0009* Linux
Boot000A* Linux
MirrorStatus: Platform does not support address range mirror
DesiredMirroredPercentageAbove4G: 0.00
DesiredMirrorMemoryBelow4GB: false

可以看到 Boot000A Linux這一條前面的 *又回來 了。
CentOS7中使用efibootmgr管理UEFI啟動項CentOS7中使用efibootmgr管理UEFI啟動項

修改 UEFI 引導管理器超時時間

我們可以設定超時間隔,使用 -t 或者 -timeout 選項來設定,在此之後自動選擇EFI引導管理器中的預設條目。 可以看到下圖,當前超時為0秒,我們可以設定時間長一點:
CentOS7中使用efibootmgr管理UEFI啟動項CentOS7中使用efibootmgr管理UEFI啟動項

[root@localhost ~]# efibootmgr -t 5
BootCurrent: 0005
Timeout: 5 seconds
BootOrder: 0006,0005,0004,0000,0001,0002,0003
Boot0000* UiApp
Boot0001* UEFI VBOX CD-ROM VB2-01700376
Boot0002* UEFI VBOX HARDDISK VB6d6781ff-6793398b
Boot0003* EFI Internal Shell
Boot0004* CentOS Linux
Boot0005* Centos7.9-EFI

CentOS7中使用efibootmgr管理UEFI啟動項CentOS7中使用efibootmgr管理UEFI啟動項

總結

支援UEFI韌體的機器將引導項儲存在稱為NVRAM的非易失性RAM中。 當我們安裝Linu作業系統時,EFI引導管理器選單中會自動新增一個對應的條目。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69901823/viewspace-2894969/,如需轉載,請註明出處,否則將追究法律責任。

相關文章