GRUB2 显示错误的 Windows 版本

GRUB2 显示错误的 Windows 版本

这是我最近弄明白的一个问答,所以我把答案发布在下面。

安装 Windows 10 后,每次我获取内核更新或运行 时,update-grub2它总是显示Windows 7Windows Recovery Environment而不是Windows 10。如何永久修复此问题?

答案1

更新 2022-10-23: 看来 grub 团队尚未针对 Windows 11 进行更新,因为它可能显示 Windows Vista,所以我在下面的答案中添加了如何进行更改。


Windows 7它仍然显示或Windows Recovery Environment而不是 的原因Windows 10是该文件/usr/lib/os-probes/mounted/20microsoft不包含 的标签Windows 10,因此在os-prober操作系统检测期间它会恢复为Windows 7Windows Recovery Environment

为了纠正这个问题,您需要对以下文件进行以下更改(我将使用 gedit 作为编辑器,但您可以使用您想要的编辑器):

sudo gedit /usr/lib/os-probes/mounted/20microsoft

注意:修改文件之前务必先备份!

现已添加适用于 Windows 11 的功能,并且可能会被检测为 Windows Vista。

if item_in_dir -q bootmgr "$2"; then
        # there might be different boot directories in different case as:
        # boot Boot BOOT
        for boot in $(item_in_dir boot "$2"); do
                bcd=$(item_in_dir bcd "$2/$boot")
                if [ -n "$bcd" ]; then
                        if grep -qs "W.i.n.d.o.w.s. .1.1" "$2/$boot/$bcd"; then
                                long="Windows 11"
                        elif grep -qs "W.i.n.d.o.w.s. .1.0" "$2/$boot/$bcd"; then
                                long="Windows 10"
                        elif grep -qs "W.i.n.d.o.w.s. .8" "$2/$boot/$bcd"; then
                                long="Windows 8 (loader)"
                        elif grep -qs "W.i.n.d.o.w.s. .7" "$2/$boot/$bcd"; then
                                long="Windows 7 (loader)"

上面的部分位于文件的第 34 行左右。您所要做的就是将if行首的语句更改为elif,然后从适用if于 Windows 10 的部分上方的行开始添加适用于 Windows 11 的部分。

一旦保存,运行起来os-prober如下所示:

terrance@terrance-ubuntu:~$ sudo os-prober
/dev/sdc1:Windows 11:Windows:chain

然后运行update-grub2它将在您获得内核更新时使更新/boot/grub/grub.cfg永久生效,因此它现在将显示正确的 Windows 版本(下面的示例):

terrance@terrance-ubuntu:~$ sudo update-grub
Sourcing file `/etc/default/grub'
Sourcing file `/etc/default/grub.d/init-select.cfg'
Sourcing file `/etc/default/grub.d/lubuntu-grub-theme.cfg'
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-5.15.0-52-generic
Found initrd image: /boot/initrd.img-5.15.0-52-generic
Found linux image: /boot/vmlinuz-5.15.0-50-generic
Found initrd image: /boot/initrd.img-5.15.0-50-generic
Found linux image: /boot/vmlinuz-5.13.0-52-generic
Found initrd image: /boot/initrd.img-5.13.0-52-generic
Found memtest86+ image: /boot/memtest86+.elf
Found memtest86+ image: /boot/memtest86+.bin
Warning: os-prober will be executed to detect other bootable partitions.
Its output will be used to detect bootable binaries on them and create new boot entries.
Found Windows 11 on /dev/sdc1
done

希望这可以帮助!

相关内容