当我对 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。我只是重申一下。
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)
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
}
Run Code Online (Sandbox Code Playgroud)
保存文件并关闭编辑器。
返回终端,删除写入权限。
sudo chmod o-w 40_custom
使用更新 GRUBsudo update-grub
(可选)您可以通过转至 /boot/grub/grub.cfg 并检查第 243-251 行来确认更改是否成功。它应该反映您在 40_custom 文件中的编辑
重新启动计算机reboot
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,但因供应商而异。
| 归档时间: |
|
| 查看次数: |
45642 次 |
| 最近记录: |