今天在裝linux的window雙系統時,出現在無法使用linux引導的問題,開機總是自動進windows,照理來說我先裝的window,后裝的linux,應該是開機進grub引導才對。在主板的boot里根本沒有linux項,后來用EasyUEFI檢查發現linux的啟動項被禁止和隱藏了!!
后來查了查,部分品牌的電腦會出現無法使用linux引導的問題,BIOS的boot里只有windows的啟動項。如果是傳統的引導方式,可以通過EasyBCD在windows系統下添加linux啟動項,而UEFI的啟動方式就沒法用window引導linux了。
此時可以使用linux的引導文件替換windows的引導文件,讓主板以為你這是windows的引導項。
雖然通過正常的方式無法進入linux系統,但是可以通過linux的啟動盤找到linux的啟動項,我用的是manjaro系統,插入刻錄好的U盤,選擇USB方式引導,在Detect EFI bootloaders里可以找到安裝好的manjaro系統的引導項。通過它可以進入Linux系統。
進入系統的/boot/efi/EFI/
目錄可以看到如下三個文件夾
總用量 32
drwx------ 2 root root 8192 10月 7 05:53 Boot
drwx------ 2 root root 8192 10月 7 14:14 Manjaro
drwx------ 4 root root 8192 10月 7 15:07 Microsoft
其中Manjaro里的grubx64.efi就是Linux的bootloader。
為了開機使用Linux引導我們可以使用Manjaro的grubx64.efi替換Microsoft的bootmgfw.efi,在我電腦上的具體命令是:
# 備份原文件
cp Microsoft/Boot/bootmgfw.efi Microsoft/Boot/bootmgfw1.efi
# 替換
cp Manjaro/grubx64.efi Microsoft/Boot/bootmgfw.efi
但這么以來即使你在Linux的grub里選擇Windows Boot Manager項也不能進入Windows了,因為這個啟動項指向的Windows bootloader已經被Linux替換了,所以還需要修改grub的Windows啟動項,讓它指向我們備份的bootmgfw1.efi。efi文件是不可讀的,我們可以修改的是cfg文件。
看一個當前目錄的Boot文件夾,里面有一個叫grub.cfg的文件,使用cat命令查看內容:
cat Boot/grub.cfg
search.fs_uuid 766eca58-fb60-457a-b79c-607f2c728407 root hd1,gpt4
set prefix=($root)'/boot/grub'
configfile $prefix/grub.cfg
發現它實際上是引用的/boot/grub/grub.cfg
的內容,使用vim打開它,搜索Windows
可以發現Windows的啟動項
menuentry 'Windows Boot Manager (on /dev/sdb1)' --class windows --class os $menuentry_id_option 'osprober-efi-000E-17EB' {
savedefault
insmod part_gpt
insmod fat
set root='hd1,gpt1'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-ieee1275='ieee1275//disk@0,gpt1' --hint-bios=hd1,gpt1 --hint-efi=hd1,gpt1 --hint-baremetal=ahci1,gpt1 000E-17EB
else
search --no-floppy --fs-uuid --set=root 000E-17EB
fi
chainloader /EFI/Microsoft/Boot/bootmgfw.efi
}
將chainloader中的bootmgfw.efi改成bootmgfw1.efi
重啟應該就可以了。