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