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-prober
orupdate-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_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"
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 上关闭了休眠状态并禁用了快速启动等。