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

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

当我对我的 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

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

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

谢谢!

答案1

在网上搜索了几天之后,我找到了答案!

所有荣誉都归于这篇文章: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
  1. 获取 UUIDEFI 分区 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
}
  1. 保存文件并关闭编辑器。

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

  3. 使用以下方法更新 GRUBsudo update-grub

  4. (可选)您可以转到 /boot/grub/grub.cfg 并检查第 243-251 行,以确认更改已成功。它应该反映出您在 40_custom 文件中所做的编辑

  5. 重新启动计算机reboot

答案2

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

然后根据需要更改为 true/false。建议使用 true。

GRUB_DISABLE_OS_PROBER=true

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

修复描述的一种方法是将窗口条目移动到 40_custom 并随意编辑。

从此处复制条目:

sudo cp -a /boot/grub/grub.cfg /boot/grub/grub.cfg.backup
sudoedit /boot/grub/grub.cfg

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

sudoedit /etc/grub.d/40_custom

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

sudo update-grub

Windows 10 和 Ubuntu 14.04 的 Grub 菜单

os-prober 概括的典型 UEFI Windows 启动节。每个 ESP 都有唯一的 UUID 和部分 UUID。启动节中的 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
}

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

lsblk -f

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

答案3

1.列出磁盘和分区

lsblk

2. 识别包含 Windows 分区的磁盘。

sudo cfdisk /dev/sd<YOUR DISK LETTER (NO NUMBER)>
  • 使用垂直箭头键循环浏览您的设备。
  • EFI 分区将是类型为“EFI 系统”的设备。
  • 复制您的 EFI 设备的“文件系统 UUID”。(XXXX-XXXX)
  • 使用键盘的箭头键进行选择[ Quit ]。按回车键退出 cfdisk。

3. 打开 /etc/grub.d/40_custom在你最喜欢的编辑器中( nano,, vim)code

sudo nano /etc/grub.d/40_custom

4. 在评论下方附加您的菜单条目。

menuentry 'Windows 11' {
    search --fs-uuid --no-floppy --set=root <YOUR "File system UUID">
    chainloader (${root})/EFI/Microsoft/Boot/bootmgfw.efi
}

5. 更新您的 grub 配置。

sudo grub-mkconfig -o /boot/grub/grub.cfg

完成sudo reboot

答案4

至少对我来说,这就是解决问题的方法。os-prober 被禁用了。我在 Ubuntu 22.04 上

sudo nano /etc/default/grub

GRUB_DISABLE_OS_PROBER=false

然后运行

sudo update-grub

相关内容