Linux與Windows 10用grub引導教程


前言

去年暑假的時候,寫了一篇如何裝 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 默認引導文件

  1. EFI/Boot/bootx64.efi
  2. 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 引導了。步驟:

  1. 進入管理員命令行。方法:win + x,再按 a
  2. 輸入 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 雙系統也配置完畢了。

附加問題

在使用這一年多的時間,遇到了以下的幾個問題:

  1. 在 Windows 10 進行了一個大更新后,會發現 GRUB 引導界面沒有了,還是直接進入了 Windows 10,這時只需要按照 替換引導文件 的方法重新輸入一遍命令就行。
  2. 使用 Linux 某個發行版一段時間之后,難免會想嘗試一下另一個發行版。這時請務必將之前的發型版的引導文件刪除,否則可能會出現無論怎么設置都無法進入 GRUB 的情況。例如:我之前用的是 Ubuntu,我現在換成了 Manjaro,我就需要用 DG 刪除 EFI 分區的 Ubuntu 文件夾。
  3. 在我使用 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 國際 協議進行許可,閱讀 相關說明


免責聲明!

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



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