Grub2 无法检测到 Windows 10,两个硬盘驱动器上的双启动,UEFI/GPT 系统

cav*_*gru 5 linux dual-boot windows grub2 uefi

我有两个 ssd,其中 /dev/sda1 上有 Windows 10,/dev/sda3 上有 OpenSuse(/dev/sda2 用于存储硬盘)。几个月前,我已经在我的 /dev/sda3 上安装了 Ubuntu。但由于一些个人原因,我决定使用 OpenSuse。所以我一周前在我的 /dev/sda3 上安装了 OpenSuse。

当我在 Ubuntu 上使用我的 /dev/sda3 时,我的引导顺序是 /dev/sda3 而不是 /dev/sda1。当我启动我的机器时,grub 正在启动系统。它可以在我的 /dev/sda1 上的 Windows 10 中检测到 Ubuntu。

但是在我格式化我的 /dev/sda3 并在我的 /dev/sda3 上安装了 OpenSuse 之后,新安装的 grub(OpenSuse 附带的)无法检测到具有相同启动顺序的 Windows 10。

所以我检查了一些论坛并尝试了许多不同的东西,例如os-proberorupdate-bootloader但没有任何效果。

在这些尝试之后,我发现了一个关于如何在第二个硬盘驱动器 UEFI/GPT 系统上双引导窗口的 stackoverflow wiki 问题。我已经一步一步地遵循了这一点。

完成后,第一次尝试失败。这是我的 /etc/grub.d/40_custom 样子,

#!/bin/sh
exec tail -n +3 $0
# This file provides an easy way to add custom menu entries.  Simply type the
# menu entries you want to add after this comment.  Be careful not to change
# the 'exec tail' line above.
menuentry "MS Windows" {
        insmod part_gpt
        insmod search_fs_uuid
        insmod ntfs
        insmod chain
        search --fs-uuid --no-floppy --set=root --hint-bios=hd1,msdos1 --hint-efi=hd1,msdos1 --hint-baremetal=ahci1,msdos1 685EBC705EBC3920
        chainloader /Windows/Boot/EFI/bootmgfw.efi
}
Run Code Online (Sandbox Code Playgroud)

为了创建它,我遵循了这些步骤,(如果我做错了什么,我只是用上面的链接重新编写相同的步骤......)

1)找到windows 10磁盘的挂载路径,这是我的情况/run/media/cavit/685EBC705EBC3920,,

2) 将它的 env var 设为win,

3)找到给我的窗户的efi /Windows/Boot/EFI/bootmgfw.efi,,

4)grub2-probe --target=hints_string $win--hint-bios=hd0,gpt4 --hint-efi=hd0,gpt4 --hint-baremetal=ahci0,gpt4 --hint='hd2,gpt4',

5)grub-probe --target=fs_uuid $win给出, 685EBC705EBC3920,

6)我没有,drivemap因为我的 Windows 10 磁盘已经是第一个。

7)find /boot -name grub.cfg给出, /boot/grub2/grub.cfg,

8)grub-mkconfig -o /boot/grub2/grub.cfg给出这样的输出,

Generating grub configuration file ...
Found theme: /boot/grub2/themes/openSUSE/theme.txt
Found linux image: /boot/vmlinuz-4.4.2-1-default
Found initrd image: /boot/initrd-4.4.2-1-default
Found linux image: /boot/vmlinuz-4.4.1-1-default
Found initrd image: /boot/initrd-4.4.1-1-default
Found memtest image: /boot/memtest.bin
done
Run Code Online (Sandbox Code Playgroud)

9)grub-script-check /boot/grub/grub.cfg没有任何输出。

但是在我重新启动并选择该新条目后的第一次尝试时,grub 给出了一个输出can't find command chainload. 在原来的帖子中,最后一行代码/etc/grub.d/40_customchainload (${root})/Windows/Boot/EFI/bootmgfw.efi这样的,我只是想如果该命令修改为chainloader. 所以我尝试了如果是这样,这次我得到了一个错误为Error: Invalid Signature.

另一方面,我的 Windows 10 磁盘 (/dev/sda1) 上存在一个奇怪的分区。有一个额外的分区,我不明白它为什么存在。这是我的blkid输出,

/dev/sda1: LABEL="Recovery" UUID="6AC8BAAFC8BA78C1" TYPE="ntfs" PARTLABEL="Basic data partition" PARTUUID="83e0d3c4-f90b-4f2f-8f8b-500b1f773d5d"
/dev/sda2: UUID="08BA-F986" TYPE="vfat" PARTLABEL="EFI system partition" PARTUUID="4c3e9d7b-1f9c-49e7-8bfe-83d1e3d778b4"
/dev/sda3: PARTLABEL="Microsoft reserved partition" PARTUUID="2686e370-0de7-466c-85b7-1e6594f6eb56"
/dev/sda4: UUID="685EBC705EBC3920" TYPE="ntfs" PARTLABEL="Basic data partition" PARTUUID="901c7e27-71f0-4e61-9626-095783661f2d"
Run Code Online (Sandbox Code Playgroud)

在 /dev/sda2 上有EFI文件夹,这是树结构,

EFI                                                                                                                                                                            
??? Boot                                                                                                                                                                     
?   ??? bootx64.efi                                                                                                                                                          
??? Microsoft                                                                                                                                                                
?   ??? Boot                                                                                                                                                                 
?   ?   ??? BCD                                                                                                                                                              
?   ?   ??? BCD.LOG                                                                                                                                                          
?   ?   ??? BCD.LOG1                                                                                                                                                         
?   ?   ??? BCD.LOG2                                                                                                                                                         
?   ?   ??? bootmgfw.efi                                                                                                                                                     
?   ?   ??? bootmgr.efi                                                                                                                                                      
?   ?   ??? BOOTSTAT.DAT                                                                                                                                                     
?   ?   ??? boot.stl     
?   ?   ??? kd_02_10df.dll
?   ?   ??? kd_02_10ec.dll
?   ?   ??? kd_02_1137.dll
?   ?   ??? kd_02_14e4.dll
?   ?   ??? kd_02_15b3.dll
?   ?   ??? kd_02_1969.dll
?   ?   ??? kd_02_19a2.dll
?   ?   ??? kd_02_8086.dll
?   ?   ??? kd_07_1415.dll
?   ?   ??? kd_0C_8086.dll
?   ?   ??? kdstub.dll
?   ??? Recovery
?       ??? BCD
?       ??? BCD.LOG
?       ??? BCD.LOG1
?       ??? BCD.LOG2
??? ubuntu
    ??? grub.cfg
    ??? grubx64.efi
    ??? MokManager.efi
    ??? shimx64.efi
Run Code Online (Sandbox Code Playgroud)

所以我不知道我是否错了,为什么这个ubuntu文件夹在我的EFI目录中。似乎没有更多的论坛或维基可以检查来解决它。那么有没有办法修复 Windows 10 的 grub 检测?

注意:我在 Windows 上关闭了休眠状态并禁用了快速启动等。