GRUB2可以与Windows共享EFI系统分区吗?


30

我有一个现有的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功能。

Answers:


22

经过一天的研究,我现在可以回答我自己的问题:是的,这是可能的,您甚至可以将该分区用作/ boot并存储您的kernels / initramfs / etc。那里。

要求:

  • Grub> = 2.00(1.98和1.99不起作用)
  • 必须从支持EFI变量(CONFIG_EFI_VARS在或作为模块编译efivars)的Linux内核中安装Grub。
  • 要创建EFI引导条目,您将需要 efibootmgr

设定:

首先将您的EFI分区安装到/ boot

mount /dev/sdX1 /boot

如果查看挂载条目,您将看到它只是一个FAT(32)分区。在/boot你应该找到一个目录efi

正如grub会调用的efibootmgrevivars如果未编译到内核中,则应该加载:

modprobe efivars

现在您可以安装grub了:

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

Grub照常将其文件安装到/boot/grub2。如果一切正常,您现在还应该有一个文件夹/boot/efi/grub2/boot/efi/your_distros_name。使用,--bootloader-id=isert_name_here您还可以自己指定文件夹的名称。

Grub efibootmgr自动调用并在EFI引导菜单中创建具有该名称的引导条目(在我的情况下,这意味着它在EFI菜单中显示为可引导设备,不确定每个EFI板上是否都是这种情况)

进一步的设置与通常的grub2设置没有什么不同,grub2-mkconfig它将为EFI添加适当的模块grub.cfg

链加载Windows:

当我要求使用Windows进行双重引导时,我将包括用于链式加载的grub配置:

在EFI上对Windows安装进行链加载与在MBR磁盘上进行链加载略有不同。您将不需要ntfspart_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引导,则值得阅读:


对于我(Fedora24),我将Windows 10 efi分区放在mount /dev/sdXX /boot/efi,然后按照此步骤bcdedit /set {bootmgr} path \EFI\fedora\shim.efi从Windows 运行到引导EFI。
jozxyqk
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.