GRUB2显示Windows 7或Windows Recovery Environment而不是Windows 10


8

这是我最近想出的一个问答,所以我在下面发布了答案。

安装Windows 10后,每次获得内核更新或运行时,update-grub2它始终显示Windows 7Windows Recovery Environment而不是Windows 10。如何永久解决此问题?


这些更改已经存在于(我的Mint 19.2)/ usr / lib / os-probes / Mounted / 20microsoft中,但仍返回“ Windows Vista”。请注意,当双引导系统是Windows 7时,它返回了正确的值,因此它似乎是缺少信息的来源。
cdg

@cdg应该在Linux&Unix上询问,因为该站点仅适用于官方Ubuntu版本。另外,如果您已经拥有所有这些,则应该向Mint Development提交错误报告,因为他们可能无法正确检测到它。
Terrance

Answers:


10

更新: 我刚刚执行了Xubuntu 14.04的全新安装,并且下面列出的文件条目已经存在。看起来GRUB团队现在已包含此更新。我将把它留给任何可能在没有系统更新的情况下偶然发现的人。


更新#2: 如果创建的Ubuntu 14.04 LiveUSB至少具有1GB持久性文件,则此文件位置相同,并且持久性文件将保留所做的更改。仅在将系统启动到启动的USB驱动器后,才可以修改此文件Try Ubuntu


它仍然显示Windows 7Windows Recovery Environment代替的原因Windows 10是该文件/usr/lib/os-probes/mounted/20microsoft不包含的标签Windows 10,因此在os-prober检测OS 期间,它回退为Windows 7or Windows Recovery Environment

要更正此问题,您需要对以下文件进行以下更改(我将把gedit用作编辑器,但使用所需的内容):

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

注意:修改文件之前,应始终对其进行备份!

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.0" "$2/$boot/$bcd"; then
                                long="Windows 10 (loader)"
                        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)"

上面的更改是将行更改if grep -qs "W.i.n.d.o.w.s. .8" "$2/$boot/$bcd"; thenelif grep -qs "W.i.n.d.o.w.s. .8" "$2/$boot/$bcd"; thenif grep -qs "W.i.n.d.o.w.s. .1.0" "$2/$boot/$bcd"; thenlong="Windows 10 (loader)"在该行上添加并保存。

保存后,os-prober现在运行如下:

terrance@terrance-ubuntu:~$ sudo os-prober
[sudo] password for terrance: 
/dev/sdf1:Windows 10 (loader):Windows:chain

然后运行update-grub2它现在将在您/boot/grub/grub.cfg每次获得内核更新时对您的永久性进行更新,因此它将立即显示正确的Windows版本(以下示例):

terrance@terrance-ubuntu:~$ sudo update-grub2
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-3.19.0-26-generic
Found initrd image: /boot/initrd.img-3.19.0-26-generic
Found linux image: /boot/vmlinuz-3.13.0-58-generic
Found initrd image: /boot/initrd.img-3.13.0-58-generic
Found linux image: /boot/vmlinuz-3.13.0-57-generic
Found initrd image: /boot/initrd.img-3.13.0-57-generic
Found memtest86+ image: /boot/memtest86+.elf
Found memtest86+ image: /boot/memtest86+.bin
Found Windows 10 (loader) on /dev/sdf1
done

希望这可以帮助!


4
是否已为Grub2维护者将此消息发布到上游(作为错误/修复程序)?
david6

@ david6我不知道是否已经这样做。昨晚,我只是在尝试发现有关GRUB2的更多信息以及它如何确定所找到的操作系统时才做出了发现。
Terrance

“ 20microsoft”脚本看起来很凌乱,可能还需要其他改进。
david6
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.