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

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

我有两个 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 正在启动系统。它可以检测 Ubuntu,而 Windows 10 位于我的 /dev/sda1 上。

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

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

经过这些尝试后,我发现了一个 stackoverflow wiki 问题,关于如何第二个硬盘上的双启动窗口,UEFI/GPT 系统。我是按照这个一步一步来的。

完成后,第一次尝试失败了。这是我的 /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
}

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

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

2)将其环境变量设置为win

3)找到Windows的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

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"

/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

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

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

相关内容