我有两个 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-prober
或update-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_custom
的chainload (${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 上关闭了休眠状态并禁用了快速启动等。