如何将 Windows 11 添加到 grub 菜单?

Pra*_*Rao 4 grub2 dual-boot

当我对 Ubuntu 22.04 LTS 驱动器进行分区以添加 Windows 11 时,我的问题就开始了(我使用 Ubuntu 可启动分区对驱动器进行分区)。

安装 Windows 11 后,我的计算机开始启动 Windows 11,而不是显示 grub 菜单。我通过进入 BIOS 并将 Ubuntu 移动到顶部来修复此问题。我的计算机现在启动进入 Ubuntu,但我仍然没有看到 grub 菜单。

看完这篇文章后,为什么启动我的计算机时不显示 Grub 菜单?,我能够再次显示我的 grub 菜单(@Akalgnotum)。但Windows 11并未包含在菜单中。

在这篇文章的指导下,GRUB 没有检测到我运行的 Windows: sudo os-prober它返回了/dev/nvme0n1p1@/EFI/Microsoft/Boot/bootmgfw.efi:Windows Boot Manager:Windows:efi. 然后我跑了sudo update-grub,这给了我这个“警告”:

Sourcing file `/etc/default/grub'
Sourcing file `/etc/default/grub.d/init-select.cfg'
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-5.15.0-46-generic
Found initrd image: /boot/initrd.img-5.15.0-46-generic
Found linux image: /boot/vmlinuz-5.15.0-43-generic
Found initrd image: /boot/initrd.img-5.15.0-43-generic
Memtest86+ needs a 16-bit boot, that is not available on EFI, exiting
Warning: os-prober will not be executed to detect other bootable partitions.
Systems on them will not be added to the GRUB boot configuration.
Check GRUB_DISABLE_OS_PROBER documentation entry.
Adding boot menu entry for UEFI Firmware Settings ...
done
Run Code Online (Sandbox Code Playgroud)

据我所知,Windows 不会被添加sudo update-grub,因为它不会运行并使用 os-prober 提供的信息。

我不知道如何解决这个问题。任何建议都会非常有帮助。如果需要更多信息,我很乐意提供。

谢谢!

Pra*_*Rao 13

在网上查了好几天,终于找到答案了!

所有功劳都归功于这篇文章: https: //askubuntu.com/a/977251/1191399。我只是重申一下。

  1. sudo fdisk -l

您应该得到一个很长的回报,其中包括如下内容:

Device             Start        End   Sectors   Size Type
/dev/nvme0n1p1      2048    1050623   1048576   512M EFI System
/dev/nvme0n1p2   1050624  874729471 873678848 416.6G Linux filesystem
/dev/nvme0n1p3 874729472  874762239     32768    16M Microsoft reserved
/dev/nvme0n1p4 874762240 1000214527 125452288  59.8G Microsoft basic data
Run Code Online (Sandbox Code Playgroud)
  1. 获取EFI 分区 的 UUID sudo blkid /dev/nvme0n1p1(将 nvme0n1p1 替换为适合您的正确分区)

返回: dev/nvme0n1p1: UUID="3C26-6A4C" BLOCK_SIZE="512" TYPE="vfat" PARTLABEL="EFI System Partition" PARTUUID="3b64b43f-e7eb-4ac8-a32c-9af2edf64d0d"

  1. 授予自己对 /etc/grub.d 中“40_custom”文件的写入权限

    打开终端 (ctrl+alt+t) 并运行以下命令:
    cd /etc/grub.d
    sudo chmod o+w 40_custom

  2. 打开40_custom文件
    open ./40_custom

  3. 在文件底部写入以下内容,并将 3C26-6A4C 替换为正确的 UUID:

menuentry 'Windows 11' {
    search --fs-uuid --no-floppy --set=root 3C26-6A4C
    chainloader (${root})/EFI/Microsoft/Boot/bootmgfw.efi
}
Run Code Online (Sandbox Code Playgroud)
  1. 保存文件并关闭编辑器。

  2. 返回终端,删除写入权限。
    sudo chmod o-w 40_custom

  3. 使用更新 GRUBsudo update-grub

  4. (可选)您可以通过转至 /boot/grub/grub.cfg 并检查第 243-251 行来确认更改是否成功。它应该反映您在 40_custom 文件中的编辑

  5. 重新启动计算机reboot


old*_*red 5

Grub 2.06 关闭 /etc/default/grub 中的 os-prober。

https://www.phoronix.com/news/Ubuntu-22.04-Multi-Boot-Changes

它扫描所有分区以查找其他系统,存在某种安全问题。您可以在 /etc/default/grub 中打开/关闭。

最好只运行一次,然后将 Windows 启动节复制到 40_custom 中。还可以使所有未来的更新更快,特别是如果您有很多分区需要扫描。

sudoedit /etc/default/grub
Run Code Online (Sandbox Code Playgroud)

然后根据需要更改为 true/false。真实推荐。

GRUB_DISABLE_OS_PROBER=true
Run Code Online (Sandbox Code Playgroud)

您可以轻松地将引导节复制到 40_custom。

修复描述的一种方法是将 Windows 条目移至 40_custom 并随意编辑。

从中复制条目:

sudo cp -a /boot/grub/grub.cfg /boot/grub/grub.cfg.backup
sudoedit /boot/grub/grub.cfg
Run Code Online (Sandbox Code Playgroud)

将它们复制到并编辑以仅包含您想要的条目:

sudoedit /etc/grub.d/40_custom
Run Code Online (Sandbox Code Playgroud)

对 grub 或 grub 脚本进行任何更改后,您必须更新 grub 菜单。

sudo update-grub
Run Code Online (Sandbox Code Playgroud)

Windows 10 和 Ubuntu 14.04 的 Grub 菜单

os-prober 概括的典型 UEFI Windows 启动节。每个 ESP - 都有唯一的 UUID 和 partUUID。boot 节中的 UUID 是 ESP 的 UUID。

### BEGIN /etc/grub.d/30_os-prober ###
menuentry 'Windows Boot Manager (on /dev/nvme0n1p1)' --class windows --class os $menuentry_id_option 'osprober-efi-F8FD-D8E5' {
    insmod part_gpt
    insmod fat
    search --no-floppy --fs-uuid --set=root F8FD-D8E5
    chainloader /efi/Microsoft/Boot/bootmgfw.efi
}
Run Code Online (Sandbox Code Playgroud)

如果使用上面的节,您必须更新到您的 UUID,并且不需要使用 os-prober 的注释。查看 ESP 的 UUID。

lsblk -f
Run Code Online (Sandbox Code Playgroud)

注意:Grub 仅启动工作 Windows。并且 UEFI 安全启动必须关闭。Windows 通常会通过更新重新打开 Windows 快速启动。因此,您必须使用 UEFI 一次性启动键直接启动 Windows,通常是 f12,但因供应商而异。