文鏈接:【信創】Linux下EFI引導配置工具efibootmgr | 統信 | 麒麟 | 方德
Hello,大家好啊!今天給大家帶來一篇關于在信創操作系統上使用EFI引導管理器配置工具efibootmgr命令詳解的文章。efibootmgr是一個在基于UEFI的系統中管理EFI引導條目的命令行工具,它允許用戶查看、添加、刪除和修改EFI引導項。本文將詳細介紹efibootmgr的基本使用方法和常見操作。歡迎大家分享轉發,點個關注和在看吧!
efibootmgr是一個用于管理EFI引導條目的命令行工具。EFI(Extensible Firmware Interface)是BIOS的替代品,廣泛用于現代計算機中。EFI引導項存儲在NVRAM中,efibootmgr工具允許用戶在操作系統中直接管理這些引導項,而不需要進入BIOS設置界面。
大多數現代的Linux發行版都預裝了efibootmgr工具。如果您的系統中沒有安裝,可以通過包管理器進行安裝。
在Debian/Ubuntu系統上,使用以下命令安裝:
sudo apt-get update
sudo apt-get install efibootmgr
在RHEL/CentOS系統上,使用以下命令安裝:
sudo yum install efibootmgr
要查看當前系統的EFI引導項,可以直接運行efibootmgr命令:
pdsyw@pdsyw-pc:~$ sudo -i
root@pdsyw-pc:~# efibootmgr
各行內容解釋
BootCurrent: 0002
當前系統是從編號 0002 的引導項啟動的。在這個例子中,0002 對應的是 "UEFI M.2 DRIVE1: BIWIN AP443 512GB SSD(Kylin Linux Desktop)",也就是說當前系統從這個設備的 Kylin Linux 引導。
Timeout: 5 seconds
系統在啟動過程中等待用戶選擇引導項的時間是 5 秒。如果用戶在此期間沒有選擇,引導過程會按照 BootOrder 中的順序自動繼續。
BootOrder: 000A,0002,0005,0009,0008,0003,0001,0004,0006,0007,0000
這是系統啟動時會依次嘗試的引導項順序。系統會從這個列表的第一個引導項開始嘗試,如果失敗則會嘗試下一個,以此類推。在這個例子中,000A 對應 Windows 引導管理器,因此系統將首先嘗試從 Windows 啟動。
Boot0000* Enter Setup
這個引導項通常用于進入 BIOS 或 UEFI 固件設置界面。在引導過程中選擇這個項可以讓你進入系統設置。
Boot0001* OKR10App
這個引導項可能與某個廠商提供的恢復應用或工具相關,具體功能取決于系統的固件配置。
Boot0002* UEFI M.2 DRIVE1: BIWIN AP443 512GB SSD(Kylin Linux Desktop)
這個引導項指向的是安裝在 BIWIN AP443 512GB SSD 上的 Kylin Linux 系統。
Boot0005* Realtek 8111 PXE IPv4
這個引導項用于通過網絡引導,使用 Realtek 8111 網卡的 PXE (Preboot Execution Environment) 功能通過 IPv4 啟動。
Boot0009* Realtek 8111 PXE IPv6
這個引導項用于通過網絡引導,使用 Realtek 8111 網卡的 PXE 功能通過 IPv6 啟動。
Boot000A* UEFI M.2 DRIVE1: BIWIN AP443 512GB SSD(Windows Boot Manager)
這個引導項指向的是安裝在同一個 SSD 上的 Windows 引導管理器。
如果您需要添加一個新的EFI引導項,可以使用以下命令:
root@pdsyw-pc:~# efibootmgr -c -d /dev/nvme0n1 -p 1 -L "Windows10" -l "\EFI\Microsoft\Boot\bootmgfw.efi"
-c:創建新的引導項。
-d /dev/nvme0n1:指定引導項所在的磁盤設備。
-p 1:指定引導項所在的分區號。
-L "Windows10":為引導項指定一個標簽名稱。
-l "\EFI\Microsoft\Boot\bootmgfw.efi":指定引導程序的路徑。
要修改系統的引導順序,可以使用-o選項指定新的引導順序:
root@pdsyw-pc:~# efibootmgr -o 0002,000A,0005,0009,0008,0003,0001,0004,0006,0007,0000
root@pdsyw-pc:~# efibootmgr
此命令將引導順序設置為首先嘗試引導項0002,然后依次嘗試000A等。
如果需要刪除某個EFI引導項,可以使用-b選項指定引導項標識符,并使用-B選項刪除它:
root@pdsyw-pc:~# efibootmgr
root@pdsyw-pc:~# efibootmgr -b 000A -B
此命令將刪除引導項000A(例如,Windows Boot Manager)。
root@pdsyw-pc:~# cd /boot/efi/EFI/
root@pdsyw-pc:/boot/efi/EFI# rm -rf Microsoft/
引導超時時間是系統等待用戶選擇引導項的時間。可以使用-t選項更改此時間:
root@pdsyw-pc:~# efibootmgr
root@pdsyw-pc:~# efibootmgr -t 10
此命令將引導超時時間設置為10秒。
如果需要查看詳細的幫助信息,可以使用--help:
root@pdsyw-pc:~# efibootmgr --help
此命令將顯示所有可用選項的列表以及它們的簡要說明。
常見問題解決
找不到EFI分區:
確認引導項的分區和設備路徑正確無誤。
使用lsblk命令查看分區結構,并確保EFI分區已正確掛載。
引導項無法啟動:
檢查引導程序的路徑是否正確。
確認引導項的順序和設置已正確保存。
無法刪除引導項:
使用sudo命令獲取超級用戶權限后再嘗試刪除。
確保標識符正確無誤,并使用-B選項進行刪除。
通過本文的介紹,您應該已經掌握了在信創操作系統上使用efibootmgr命令管理EFI引導項的方法。無論是查看當前引導項、添加新引導項、修改引導順序,還是刪除不需要的引導項,efibootmgr都提供了強大的命令行工具,幫助您輕松管理EFI引導配置。如果您覺得這篇文章有用,請分享和轉發。同時,別忘了點個關注和在看,以便未來獲取更多實用的技術信息和解決方案。感謝大家的閱讀,我們下次再見!
修改MBR,在主引導扇區和第一分區之間找個地方放grub是老黃歷了。
電腦有nvme和SATA盤各一塊,UEFI啟動。nvme盤裝的是debian和grub,SATA盤裝的是Windows10。它們各有一個EFI分區。
~# blkid
/dev/nvme0n1p1: UUID="BDEB-5168" TYPE="vfat"
PARTUUID="85a71363-aa05-4ca2-ab37-b14e81559b25"
/dev/sda1: UUID="485B-1474" TYPE="vfat" PARTLABEL="EFI system partition"
PARTUUID="30dfa707-6611-431f-ba2c-74247bde9167"
UUID和分區的UUID不同。BIOS看到485B-1474就基本上顯示Windows Boot Manager。在操作過程中出現過Windows Boot Manager (debian)。
第一塊nvme盤的名字是/dev/nvme0n1。
mount | grep boot
/dev/nvme0n1p1 on /boot/efi
即/boot/efi是EFI分區的根目錄。mount /dev/sda1 /mnt后目錄結構差一層,最好mount mount /dev/sda1 /mnt/efi,這樣兩者一致。
然后先備份再修改。建議用tar,我覺得它保存不同文件系統的文件屬性比較保險。
# tree /boot/efi
/boot/efi
├── EFI
│ ├── debian
│ │ ├── BOOTX64.CSV
│ │ ├── fbx64.efi
│ │ ├── grub.cfg
│ │ ├── grubx64.efi
│ │ ├── mmx64.efi
│ │ └── shimx64.efi
# cat /boot/efi/EFI/debian/grub.cfg
search.fs_uuid acc415d0-f703-4ab1-97e3-b0401ccf7c64 root
set prefix=($root)'/boot/grub'
configfile $prefix/grub.cfg
/boot/grub/grub.cfg里:
insmod ext2
search --no-floppy --fs-uuid --set=root acc415d0-f703-4ab1-97e3-b0401ccf7c64
echo 'Loading Linux 6.1.0-18-amd64 ...'
linux /boot/vmlinuz-6.1.0-18-amd64 root=UUID=acc415d0-f703-4ab1-97e3-b0401ccf7c64 ro quiet
echo 'Loading initial ramdisk ...'
initrd /boot/initrd.img-6.1.0-18-amd64
debian的/是/dev/nvme0n1p2: UUID="acc415d0-f703-4ab1-97e3-b0401ccf7c64" TYPE="ext4" PARTUUID="5bc7c066-2dca-4835-9828-073c2cd85ae0";/boot是/下的一個子目錄;/boot/efi是/dev/nvme0n1p1。
Windows10的則在Microsoft目錄下。Microsoft/下有Boot和Recovery兩個目錄。grub引導Windows時:chainloader /EFI/Microsoft/Boot/bootmgfw.efi。和Microsoft同級的還有個Boot/,下面有個bootx64.efi,刪掉后仍然可以啟動:BIOS (N100, AMI)和grub都直接加載bootmgfw.efi。
我把SATA上的Microsoft的copy到了nvme下(UUID要相應地修改),刪掉SATA上的Microsoft后把nvme上的debian copy了過去,BIOS設成從SATA啟動。即啟動Windows時:BIOS-SATA-NVME-SATA。[微笑]
我不是吃飽了撐的:BIOS-NVME,grub老說找不到485B-1474。CPU和nvme太快了,SATA(雖然也是SSD)還沒來得及加載,詳情見鏈接
menuentry 'Windows Boot Manager (on /dev/sda1)'
--class windows --class os $menuentry_id_option
'osprober-efi-485B-1474' {
insmod part_gpt
insmod fat
search --fs-uuid --set=root BDEB-5168
chainloader /EFI/Microsoft/Boot/bootmgfw.efi
}
把os prober找到的485B-1474換成了BDEB-5168。Windows能這么啟動是好事,也是壞事。我曾用傲梅分區助手把Windows從SATA搬到了nvme,從nvme啟動后它還是用SATA當C:因為當初是裝在SATA上的,系統(注冊表?)里某個地方寫死了C:=第1塊SATA盤的第2個分區。