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

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

我已经安装了 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。

答案1

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

要求:

  • 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 磁盘上的 Windows 安装略有不同。您不需要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

您需要在 EFI 分区中设置 Windows EFI 加载程序的路径,而不是告诉chainloader要读取的扇区数。这对于所有 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 启动,它们值得一读:

相关内容