cra*_*150 33 dual-boot windows grub2 gpt uefi
我有一个现有的 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)
Run Code Online (Sandbox Code Playgroud)
我希望 grub2 使用现有的/dev/sda1EFI 分区。
PS:我的主板支持 EFI。
cra*_*150 25
经过一天的研究,我现在可以回答我自己的问题:是的,这是可能的,您甚至可以将该分区用作 /boot 并存储您的内核/initramfs/etc。那里。
CONFIG_EFI_VARS在模块中编译或作为模块编译efivars)efibootmgr首先将您的 EFI 分区挂载到 /boot
mount /dev/sdX1 /boot
Run Code Online (Sandbox Code Playgroud)
如果您查看挂载条目,您会发现它只是一个 FAT(32) 分区。在/boot你应该找到一个目录efi。
由于 grub 将调用efibootmgr,您应该加载evivars,如果它未编译到内核中:
modprobe efivars
Run Code Online (Sandbox Code Playgroud)
现在你可以安装 grub:
# Replace x86_64 with i386 for 32 bit installations
grub2-install --target=x86_64-efi
Run Code Online (Sandbox Code Playgroud)
Grub 像往常一样将其文件安装到/boot/grub2. 如果一切正常,您现在应该还有一个文件夹/boot/efi/grub2或/boot/efi/<name_of_your_distro>. 有了--bootloader-id=insert_name_here你还可以指定自己的文件夹名称。
Grub 会efibootmgr自动调用并在 EFI 引导菜单中创建一个具有该名称的引导条目(在我的情况下,这意味着它在 EFI 菜单中显示为可引导设备,不确定是否在每个 EFI 板上都是这种情况)
进一步的设置与通常的 grub2 设置没有什么不同,grub2-mkconfig会将适用于 EFI 的模块添加到您的grub.cfg.
当我要求使用 Windows 进行双启动时,我将包含用于链式加载的 grub 配置:
在 EFI 上链式加载 Windows 安装与在 MBR 磁盘上加载略有不同。您将不需要ntfs或part_mbr模块,而不是fat和part_gpt需要。
此外,不需要设置 root,此信息由 Windows 自己的启动管理器存储。而是指定search命令。它所需的参数可以由下式确定
grub-probe --target=hints_string /boot/efi/EFI/Microsoft/Boot/bootmgfw.efi
Run Code Online (Sandbox Code Playgroud)
这将为您提供指定 EFI 分区位置的搜索参数,它应该类似于:
--hint-bios=hd0,gpt1 --hint-efi=hd0,gpt1 --hint-baremetal=ahci0,gpt1 1ce5-7f28
Run Code Online (Sandbox Code Playgroud)
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
}
Run Code Online (Sandbox Code Playgroud)
资料来源:这些涵盖了更多情况,如果你想从 EFI 启动,它们值得一读:
| 归档时间: |
|
| 查看次数: |
48732 次 |
| 最近记录: |