雙系統使用Linux引導


今天在裝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

重啟應該就可以了。


免責聲明!

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



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