Windows

GRUB2 能否與 Windows 共享 EFI 系統分區?

  • January 11, 2020

我有一個現有的 Windows 7 GPT 安裝,它已經有一個 EFI 系統分區。

我現在正試圖在一個單獨的硬碟上安裝 Linux,它也是 GPT 格式的。在沒有 EFI 系統分區的情況下,我沒有找到任何工作方式來啟動 grub,所以我的問題是:

grub2 是否可以使用與 windows 相同的 EFI 系統分區?我如何告訴 grub2 使用它?

為了澄清我的設置:

gpt /dev/sda:
   1 EFI System partition created by windows (100MB)
   2 "Microsoft reserved partition" (200MB)
   3 Windows root (rest of disk)

gpt /dev/sdb:
   # After answering my own question: this partition is not needed
   1 boot partition containing grub, kernels etc.(32MB)
   2 crypto LVM partition (rest of disk)

我希望 grub2 使用現有的/dev/sda1EFI 分區。

PS:我的主機板支持EFI。

經過一天的研究,我現在可以回答我自己的問題:是的,這是可能的,您甚至可以將該分區用作 /boot 並儲存您的 kernels/initramfs/etc。那裡。

要求:

  • Grub >= 2.00(1.98 和 1.99 不起作用)
  • Grub 必須從 Linux 核心安裝,該核心支持 EFI 變數(CONFIG_EFI_VARS編譯為模組或編譯為模組efivars
  • 要創建 EFI 引導條目,您將需要efibootmgr

設置:

首先將你的 EFI 分區掛載到 /boot

mount /dev/sdX1 /boot

如果您查看掛載條目,您會發現它只是一個 FAT(32) 分區。你應該在/boot下面找到一個目錄efi

grub 會呼叫,如果它沒有編譯到核心中efibootmgr,你應該載入:evivars

modprobe efivars

現在你可以安裝 grub:

# Replace x86_64 with i386 for 32 bit installations
grub2-install --target=x86_64-efi

Grub 像往常一樣將其文件安裝到/boot/grub2. 如果一切正常,您現在應該還有一個文件夾/boot/efi/grub2/boot/efi/<name_of_your_distro>. --bootloader-id=insert_name_here您還可以自己指定文件夾的名稱。

Grubefibootmgr自動呼叫並在 EFI 引導菜單中創建一個具有該名稱的引導條目(在我的情況下,這意味著它在 EFI 菜單中顯示為可引導設備,不確定每個 EFI 板上是否都是這種情況)

進一步的設置與通常的 grub2 設置沒有區別,grub2-mkconfig它將為 EFI 添加適當的模組到您的grub.cfg.

鍊式載入視窗:

當我要求使用 Windows 進行雙啟動時,我將包含用於鍊式載入的 grub 配置:

在 EFI 上鍊式載入 Windows 安裝與在 MBR 磁碟上的安裝略有不同。您不需要ntfsorpart_mbr模組,而是需要fatpart_gpt

此外,不需要設置 root,此資訊由 Windows 自己的啟動管理器儲存。而是指定search命令。它所需的參數可以通過以下方式確定

grub-probe --target=hints_string /boot/efi/EFI/Microsoft/Boot/bootmgfw.efi

這將為您提供指定 EFI 分區位置的搜尋參數,它應該類似於:

--hint-bios=hd0,gpt1 --hint-efi=hd0,gpt1 --hint-baremetal=ahci0,gpt1 1ce5-7f28

chainloader您需要在 EFI 分區中設置 Windows 的 EFI 載入程序的路徑,而不是告訴要讀取的扇區數。這對於所有 Windows EFI 安裝都是相同的。結果條目應如下所示:

menuentry "Microsoft Windows x86_64 UEFI-GPT" {
   insmod part_gpt
   insmod fat
   insmod search_fs_uuid
   insmod chain
   search --fs-uuid --no-floppy --set=root <insert ouput from grub-probe here>
   chainloader /efi/Microsoft/Boot/bootmgfw.efi
}

**資料來源:**這些涵蓋了更多情況,如果您想從 EFI 啟動,它們值得一讀:

引用自:https://unix.stackexchange.com/questions/49165