前言
去年暑假的時候,寫了一篇如何裝 Linux 和 Windows 10 雙系統的文章發在了簡書上,我寫這篇文章的原因是當初裝雙系統確實是折騰了許久,網上也找不到一篇詳盡的教程。由於去年對於寫教程還不是熟練,而這一年多的使用過程也遇到了一些問題,所以就准備「Refactoring」這篇文章。
EFI 分區
在教程正式開始之前,先花一點時間說明 EFI 分區的組成和作用。
首先,在你裝了 Windows 之后,Windows 在裝機過程中會將硬盤划分出一個約 100m 大小的分區,稱為 EFI 分區這個分區就是起引導作用的。在資源管理器中是看不到的這個分區的,可以在磁盤管理中看到,管理則需要借助 DG 工具。便於說明,在裝好了 Linux 之后,我將 EFI 掛載至 boot 分區截圖:
可以看到,該分區包含 3 個文件夾(如果你沒有裝 Linux 的話,就只有兩個),分別是 Boot、Microsoft 和 Manjaro,其中 Boot 文件夾就是 UEFI 引導所必需的文件。
我們繼續打開 Microsoft/Boot
文件夾:
這些文件就是啟動 Windows 10 所必需的,包含了語言包、字體等,BCD 包含了 Windows 引導開始以后的信息。其中,bootmgfw.efi 是 Windows 默認引導文件。
- EFI/Boot/bootx64.efi
- EFI/Microsoft/Boot/bootmgfw.efi
以上是采用 UEFI 啟動 Windows 10 的文件結構,也就是說,當你按下開機按鈕的時候,首先 UEFI 找到 EFI 分區的 Boot 文件夾,然后加載 bootx64.efi
文件,讀取文件信息,找到 EFI/Microsoft/Boot/bootmgfw.efi
,按照 bootmgfw.efi
的要求,加載所需的啟動信息,啟動 Windows 10。
准備工作
在正式裝系統之前,我們還需要做一些准備工作:
關閉 Windows 的快速啟動
這個功能的作用是在於關機的時候不完全斷電,類似將系統處於「休眠」狀態,這樣可以讓開機更加迅速。但這也就導致了只能使用 Windows 系統。
關閉 BIOS 的 Secure Boot 的功能
在默認情況下,UEFI 固件只會加載那些被簽名的引導程序。在缺少 Secure Boot 功能的傳統 PC 機上,惡意的后門程序可以加載自身,進而搖身一變偽裝成一個引導程序。這樣的話,BIOS 就會在啟動的時候加載后門程序,這樣它就可以躲過操作系統,把自己隱藏得很深。
但是不得不說,這對我們安裝 Linux 造成了很大的困擾,也是直接導致我們重啟到 Windows 10 后進不去 Linux 的原因。
首先我們要關閉這個功能:進入 BIOS 找到 Secure Boot,選擇 disabled,這樣就關閉了。當然,有些人進入 BIOS 會發現 Secure Boot 這個選項是灰色的(比如我的就是),這時你需要先給你的 BIOS 設一個密碼,然后就能關 Secure Boot 了。
安裝 Linux
所有的准備都已經完成,這時就可以准備刻錄 U 盤了,不推薦 UltraISO,經親測,軟碟通僅刻錄 Ubuntu 能成功,其它絕大多數發行版都會失敗。推薦「Rufus」和「USBWriter」,這兩個軟件都可以。
刻錄完成后,重啟按 f12
,選擇從 USB 設備啟動,對於絕大多數發行版來說一路回車就行了,只需要注意一點:在選擇掛載 boot 位置的時候,一定要掛載在 efi 分區,別的都不行。
重啟之后,不出意外的話,你會直接進入 Windows 10,不要擔心,這時 Linux 已經安裝成功了,我們只需要將引導文件替換一下。
替換引導文件
先用 DG 打開 EFI 分區,你會看到多了一個文件夾,名稱取決於你安裝的是哪一個發行版。我安裝的是 Manjaro Linux,名稱就是 Manjaro,打開之后會發現里面有一個名為 grubx64.efi 的文件,這就是啟動 Linux 的引導文件。和 Windows 10 的 bootmgfw.efi 類似,我們想要用 grubx64.efi 引導代替掉 bootmgfw.efi,這樣就可以用 GRUB 引導了。步驟:
- 進入管理員命令行。方法:win + x,再按 a
- 輸入
bcdedit /set {bootmgr} path \EFI\Manjaro\grubx64.efi
。提示操作成功的話,就完成了。
注:經人提醒,如果輸入以上命令提示「參數錯誤」的話,將 {bootmgr} 改為 ‘{bootmgr}’,原因是 PowerShell 和 CMD 語法的差別。
至此,如果你安裝的是除 Arch 之外絕大多數發行版,那么接下來就和你沒有啥關系了,你已經成功了,好好享受吧!
開機之后會發現進入 GRUB 的引導了,通常會包含至少三個選項(以 Manjaro 舉例):Manjaro、Manjaro 高級選項和 Windows Manager。這就代表你已經完美的解決了 Windows 和 Linux 雙系統引導的問題。
修復 Windows 引導
這一點是我安裝 Arch Llinux 的時候發現的,Arch Linux 安裝過程是手動安裝的,在編寫 GRUB 的時候會掃描不到 Windows Manager 所在的分區(當然可能不是所有人都會遇到),所以在 GRUB 界面可能會看不到 Windows Manager 選項,導致進不去 Windows 10,這里就需要手動編輯 GRUB 信息,我們打開 /boot/grub/grub.cfg
文件,發現里面確實沒有 Windows 10 的啟動信息,在后面加上:
1menuentry "Microsoft Windows 10" {
2 insmod part_get
3 insmod fat
4 insmod search_fs_uuid
5 insmod chain
6 search --fs-uuid --set=root $hints_string $fs_uuid
7 chainloader /EFI/Microsoft/Boot/bootmgfw.efi
8}
注意:
這里的 $hints_string
,代表的是終端執行命令:
1sudo grub-probe --target=hints_string /boot/efi/EFI/Microsoft/Boot/bootmgfw.efi
后的輸出;
而 $fs_uuid
代表的是:
1sudo grub-probe --target=fs_uuid /boot/efi/EFI/Microsoft/Boot/bootmgfw.efi
的輸出。
然后保存。在終端執行命令:sudo grub-mkconfig -o /boot/grub/grub.cfg
,就 OK 了。
到此,Arch Linux 和 Windows 10 雙系統也配置完畢了。
附加問題
在使用這一年多的時間,遇到了以下的幾個問題:
- 在 Windows 10 進行了一個大更新后,會發現 GRUB 引導界面沒有了,還是直接進入了 Windows 10,這時只需要按照
替換引導文件
的方法重新輸入一遍命令就行。 - 使用 Linux 某個發行版一段時間之后,難免會想嘗試一下另一個發行版。這時請務必將之前的發型版的引導文件刪除,否則可能會出現無論怎么設置都無法進入 GRUB 的情況。例如:我之前用的是 Ubuntu,我現在換成了 Manjaro,我就需要用 DG 刪除 EFI 分區的 Ubuntu 文件夾。
- 在我使用 Manjaro 更新了一次 Linux 的內核后,進不去 Windows 10 了,這個時候千萬不要直接修復 Windows 10 引導,這會格式化 EFI 分區,只需要按上面 修復 Windows 引導 的方法編輯一下 GRUB 就可以了。
最后:祝使用愉快。
本文標題: Linux 與 Windows 10 用 GRUB 引導教程
最后更新:2018 年 02 月 05 日 - 10:02
本文鏈接:https://blog.itswincer.com/posts/ad42f575/
本文采用:署名-非商業性使用-禁止演繹 4.0 國際 協議進行許可,閱讀 相關說明