用efibootmgr管理UEFI啟動項,添加丟失的啟動項



UEFI用來替代傳統BIOS引導操作系統,學會修改UEFI啟動項也變得十分重要,UEFI全稱為:“統一的可擴展固件接口”(Unified Extensible Firmware Interface),目前新購入的計算機都支持UEFI固件,若是需要啟動傳統MBR設備,則需開啟CSM(Compatibility Support Module)。關閉CSM則變成純UEFI啟動,且完全支持安全啟動。Secure Boot(安全啟動),安全啟動僅適用於使用UEFI啟動的操作系統。如果電腦要啟動不完全支持UEFI的設備,就必須關閉Secure Boot,然后打開CSM。如Win7系統,必須開啟CSM兼容模式。Windows8及以上都能很好的支持UEFI,而為了設置系統引導,必須要管理UEFI啟動項。

在國內個人物理機直接安裝Linux系統時,一般都會再安裝個Windows系統實現雙系統,這樣有時候就會出現系統啟動項丟失的情況多為Linux系統

解決方法就是使用efibootmgr命令添加啟動項,而在Windows下可以使用EasyUEFI這個軟件。

1、如果系統丟失Linux啟動項,如果是雙系統就只能進入Windows,但是我不喜歡用EasyUEFI,這時可以選擇一個Linux liveCD系統,如Ubuntu,
將Ubuntu liveCD 刻錄成U盤啟動,如果刻錄成光驅啟動系統會很慢。

2、在Ubuntu(非liveCD)下我使用efibootmgr命令,顯示如下:

pipci@ubuntu:~$ efibootmgr
BootCurrent: 0012
Timeout: 0 seconds
BootOrder: 0012,0010,0011,000F,000B,000A,0006,0007,0008,0009,000C,000D,000E
Boot0000  Setup
Boot0001  Boot Menu
Boot0002  Diagnostic Splash Screen
Boot0003  Lenovo Diagnostics
Boot0004  Rescue and Recovery
Boot0005  Startup Interrupt Menu
Boot0006* USB CD
Boot0007* USB FDD
Boot0008* ATAPI CD0
Boot0009* ATAPI CD1
Boot000A* ATA HDD0
Boot000B* ATA HDD1
Boot000C* ATA HDD2
Boot000D* USB HDD
Boot000E* PCI LAN
Boot000F* Windows Boot Manager
Boot0010* ubuntu
Boot0011* ubuntushim
Boot0012* opensuse-secureboot
pipci@ubuntu:~$


列表還是很直觀的顯示了當前啟動項,啟動超時,EFI啟動順序,0012是第一啟動項對應的是opensuse系統,0011是第二啟動項對應ubuntu系統這個是我手動添加的,
000F是四啟動項對應的Windows系統。

3、查找系統啟動文件,每個系統都會在EFI分區建立自己的啟動文件。

pipci@ubuntu:~$ sudo fdisk -l      #產看EFI所在分區

設備           Start    末尾    扇區  Size 類型
/dev/sdb1       2048    206847    204800  100M EFI System                   #EFI所在分區                  
/dev/sdb2     206848    468991    262144  128M Microsoft reserved
/dev/sdb3     468992  83888127  83419136 39.8G Microsoft basic data
/dev/sdb4   83888128  92276735   8388608    4G Microsoft basic data
/dev/sdb5   92276736 176168959  83892224   40G Microsoft basic data
/dev/sdb6  176168960 254294015  78125056 37.3G Linux filesystem
/dev/sdb7  254294016 262682623   8388608    4G Linux filesystem
/dev/sdb8  262682624 468860927 206178304 98.3G Microsoft basic data
pipci@ubuntu:~$

4、掛在EFI分區

pipci@ubuntu:~$ sudo mount /dev/sdb1 /mnt/      #掛載EFI分區到/mnt目錄

5、進入EFI分區
pipci@ubuntu:~$ cd /mnt/
bash: cd: /mnt/: 權限不夠
pipci@ubuntu:~$ sudo -i                #以root用戶身份運行一個登錄 shell
root@ubuntu:~# cd /mnt/

6、產出EFI分區
root@ubuntu:/mnt# ls
EFI

7、進入EFI目錄,查看

root@ubuntu:/mnt# cd EFI/
root@ubuntu:/mnt/EFI# ls
Boot  Microsoft  opensuse  ubuntu           #可以看出安裝的系統
root@ubuntu:/mnt/EFI#

8、查看EFI下各目錄內容:
root@ubuntu:/mnt/EFI# ls Boot/
bootx64.efi
root@ubuntu:/mnt/EFI# ls Microsoft/
Boot
root@ubuntu:/mnt/EFI# ls opensuse/
boot.csv  grub.cfg  grub.efi  grubx64.efi  MokManager.efi  shim.efi
root@ubuntu:/mnt/EFI# ls ubuntu/
fw  fwupx64.efi  grub.cfg  grubx64.efi  mmx64.efi  shimx64.efi
root@ubuntu:/mnt/EFI#

9、添加啟動項

root@ubuntu:~# efibootmgr -c -w -L "BootOptionName" -d /dev/sda -p 1 -l \\EFI\\Boot\\bootx64.efi

其中BootOptionName替換成你設定的名字,-d后面是啟動分區所在的硬盤(默認為/dev/sda),-p后面是分區位置(默認為1),-l是啟動efi文件的路徑。
這樣就添加了EFI啟動項。
舉例:
root@ubuntu:~# efibootmgr -c -w -L "BootOptionName" -d /dev/sdb -p 1 -l \\EFI\\Boot\\bootx64.efi    #我的啟動分區所在的硬盤為/dev/sdb
BootCurrent: 0012
Timeout: 0 seconds
BootOrder: 0013,0012,0010,0011,000F,000B,000A,0006,0007,0008,0009,000C,000D,000E
Boot0000  Setup
Boot0001  Boot Menu
Boot0002  Diagnostic Splash Screen
Boot0003  Lenovo Diagnostics
Boot0004  Rescue and Recovery
Boot0005  Startup Interrupt Menu
Boot0006* USB CD
Boot0007* USB FDD
Boot0008* ATAPI CD0
Boot0009* ATAPI CD1
Boot000A* ATA HDD0
Boot000B* ATA HDD1
Boot000C* ATA HDD2
Boot000D* USB HDD
Boot000E* PCI LAN
Boot000F* Windows Boot Manager
Boot0010* ubuntu
Boot0011* ubuntushim
Boot0012* opensuse-secureboot
Boot0013* BootOptionName

通過上面的操作可以看出已經添加了 BootOptionName這個啟動項,編號是0013,BootOrder:處可以看出已經成為第一啟動項。

如果是Linux系統啟動項丟失不要添加/EFI/Boot/bootx64.efi這個啟動項,因為這個文件可能被Windows系統替換,添加后會直接進入Windows系統,
不能進入GRUB引導程序,可以嘗試添加/EFI/opensuse/ 目錄下的grubx64.efi  grub.efi  shim.efi MokManager.efi 等文件,每個Linux發行版
對應的目錄下的文件可能不一樣,根據實際情況添加,我的電腦安裝了3個系統,安裝順序為Windows Ubuntu openSUSE,所以要添加最后安裝的那個
系統對應的啟動文件,因為最后安裝的系統的GRUB才會把前面系統添加進去,才可以通過一個GRUB管理多個系統。

10、刪除啟動項的命令為:

root@ubuntu:~# efibootmgr -b 0013 -B      #刪除剛才添加的BootOptionName啟動項,對應的編號為0013
BootCurrent: 0012
Timeout: 0 seconds
BootOrder: 0012,0010,0011,000F,000B,000A,0006,0007,0008,0009,000C,000D,000E
Boot0000  Setup
Boot0001  Boot Menu
Boot0002  Diagnostic Splash Screen
Boot0003  Lenovo Diagnostics
Boot0004  Rescue and Recovery
Boot0005  Startup Interrupt Menu
Boot0006* USB CD
Boot0007* USB FDD
Boot0008* ATAPI CD0
Boot0009* ATAPI CD1
Boot000A* ATA HDD0
Boot000B* ATA HDD1
Boot000C* ATA HDD2
Boot000D* USB HDD
Boot000E* PCI LAN
Boot000F* Windows Boot Manager
Boot0010* ubuntu
Boot0011* ubuntushim
Boot0012* opensuse-secureboot

11、刪除多余的啟動項從新查看啟動項:
root@ubuntu:~# efibootmgr
BootCurrent: 0012
Timeout: 0 seconds
BootOrder: 0012,0010,0011,000F,000B,000C,000D
Boot0000  Setup
Boot0001  Boot Menu
Boot0002  Diagnostic Splash Screen
Boot0003  Lenovo Diagnostics
Boot0004  Rescue and Recovery
Boot0005  Startup Interrupt Menu
Boot000B* ATA HDD1
Boot000C* ATA HDD2
Boot000D* USB HDD
Boot000F* Windows Boot Manager
Boot0010* ubuntu
Boot0011* ubuntushim
Boot0012* opensuse-secureboot

12、修改boot 順序
root@ubuntu:~# efibootmgr -o 0012,0010,0011,000F,000D,000C,000B    
BootCurrent: 0012
Timeout: 0 seconds
BootOrder: 0012,0010,0011,000F,000D,000C,000B
Boot0000  Setup
Boot0001  Boot Menu
Boot0002  Diagnostic Splash Screen
Boot0003  Lenovo Diagnostics
Boot0004  Rescue and Recovery
Boot0005  Startup Interrupt Menu
Boot000B* ATA HDD1
Boot000C* ATA HDD2
Boot000D* USB HDD
Boot000F* Windows Boot Manager
Boot0010* ubuntu
Boot0011* ubuntushim
Boot0012* opensuse-secureboot
root@ubuntu:~#

通過efibootmgr -o 命令將000B和000D調換,如果要設置第一啟動,把相應的編號放到命令后的最前面,如上面的0012


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM