這里均以64位系統(tǒng)(windows和linux均是),gpt分區(qū),UEFI引導(dǎo)作為例子,現(xiàn)在基本上不會不支持吧。
windows下UEFI引導(dǎo)文件的載入順序
主板啟動windows的一般有兩種方法:
windows boot manager啟動
硬盤直接引導(dǎo)啟動
主板bios中分別是途中前兩項(第二項是你自己的硬盤名稱,我這里是vmware虛擬機(jī)的SCSI硬盤,后面的四個不用管)
在安裝windows的時候,系統(tǒng)會位我們建立一個ESP分區(qū),大約200M到300M左右,里面的目錄結(jié)構(gòu)大概是這樣的:(使用diskgenius等軟件可以讀取內(nèi)部文件)EFI ├── Boot │ └── bootx64.efi └── Microsoft ├── Boot │ ├── BCD │ ├── bootmgfw.efi └── Recovery
這里我省略了一些字體等其他文件,只列出了主要的文件
方法1,即windows boot manager 進(jìn)入系統(tǒng)
① 啟動程序會找到指定GPT硬盤的fat格式的分區(qū)(fat32、fat16等),即esp、efi分區(qū)(別名而已)
注意是指定的GPT硬盤,這里是windows創(chuàng)建它的boot manager時已經(jīng)寫入了nvram,告訴他去哪塊硬盤找。
② 尋找EFI/Microsoft/Boot/bootmgfw.efi 文件
③ bootmgfw.efi文件去尋找 EFI/Microsoft/Boot/BCD 文件
通常,bcd文件中里面可以放入一些不同的啟動項供用戶選擇啟動,如windows雙系統(tǒng),PE等的啟動項,具體看下圖:
④ 當(dāng)你選擇了啟動windows后,BCD文件會找到對應(yīng)分區(qū)(大部分人應(yīng)該是C盤)下的\Windows\system32\winload.efi 文件
⑤ 由winload.efi加載完成windows系統(tǒng)
方法2,即選擇硬盤啟動
① 啟動程序會尋找這塊硬盤的的EFI分區(qū)
② 尋找EFI/Boot/bootx64.efi 文件
③ bootx64.efi文件去尋找 EFI/Microsoft/Boot/BCD 文件
接下來步驟和方法1一樣。
按照上面的步驟來看,bootx64.efi和bootmgfw.efi好像是同一個文件,實(shí)際上他們確實(shí)是同一個文件,即想要正常啟動系統(tǒng),BCD文件是必須有的,而bootx64.efi和bootmgfw.efi兩個文件二選一保留下來就行了。
同樣,當(dāng)你把硬盤拔下來插入別的電腦,一般可以直接使用方法2啟動硬盤里的windows(這里忽視了驅(qū)動問題)
接下來就是安裝linux,這里我安裝的是archlinux
根據(jù)arch的官方wiki安裝,我這里分出了三個分區(qū)
swap分區(qū)、根目錄分區(qū)、home目錄分區(qū)
已經(jīng)存在的EFI分區(qū)掛載點(diǎn)為/boot/efi
即這樣順序(這里以上文說的bootx64.efi的路徑為例子):/boot/efi/EFI/boot/bootx64.efi
最后生成grub引導(dǎo)的代碼,兩行g(shù)rub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=archlinux grub-mkconfig -o /boot/grub/grub.cfg
這些代碼再Arch Linux的官方wiki都可以找到
重啟進(jìn)入主板bios會發(fā)現(xiàn)多了個archlinux的啟動項,等級和性質(zhì)和windows boot manager一樣
并且你會發(fā)現(xiàn)EFI分區(qū)下的EFI文件夾下多了個archlinux文件夾
接下來進(jìn)入linux系統(tǒng)sudo vim /boot/grub/custom.cfg
在里面加入windows的啟動項(就是把上文的兩個efi文件任意一個加入linux的grub引導(dǎo)中):menuentry "windows 10" { search --no-floppy --fs-uuid --set=root 自己的fs_uuid chainloader /EFI/Microsoft/Boot/bootngfw.efi }
其中“自己的fs_uuid”使用blkid命令查看,如圖:
這里我的efi分區(qū)為/dev/sda1,所以可以看到是38A0-4EA3
我這里是使用bootngfw.efi文件,你也可以使用bootx64.efi,但是有時候該文件可能會被你新裝的linux更改成指向linux系統(tǒng),比如安裝manjaro(archlinux分支,圖形安裝界面),一路下一步后,安裝完,EFI文件夾里面會多一個manjaro文件夾,以及順帶著把bootx64.efi文件改了,導(dǎo)致你用方法2啟動系統(tǒng)默認(rèn)進(jìn)入的是linux系統(tǒng)。
同時可以加入menuentry "System shutdown" { echo "System shutting down..." halt } menuentry "System restart" { echo "System rebooting..." reboot }
分別是關(guān)機(jī)和重啟選項,以下是效果圖
聯(lián)系客服