当我对我的 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。我只是重申一下。
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
- 获取 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"
授予自己对 /etc/grub.d 中“40_custom”文件的写权限
打开终端(ctrl+alt+t)并运行以下命令:
cd /etc/grub.d
sudo chmod o+w 40_custom
打开 40_custom 文件
open ./40_custom
在文件底部写入以下内容,并将 3C26-6A4C 替换为正确的 UUID:
menuentry 'Windows 11' {
search --fs-uuid --no-floppy --set=root 3C26-6A4C
chainloader (${root})/EFI/Microsoft/Boot/bootmgfw.efi
}
保存文件并关闭编辑器。
返回终端,删除写入权限。
sudo chmod o-w 40_custom
使用以下方法更新 GRUB
sudo update-grub
(可选)您可以转到 /boot/grub/grub.cfg 并检查第 243-251 行,以确认更改已成功。它应该反映出您在 40_custom 文件中所做的编辑
重新启动计算机
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