配置:
两个 HDD。分别名为 sda 和 sdb。
原有情况:
sda 上的 Ubuntu。另一个磁盘 (sdb) 是空的。
由于 GRUB 推断某些引导扇区包含 Windows 10,因此我的 GRUB 窗口显示 Ubuntu 和 Windows(在 /dev/sda1 上)。请参阅前面的讨论:
我的 Ubuntu 磁盘上有奇怪的小 Windows 10 分区。它是什么?
新情况:
现在我在第二个硬盘 (sdb) 上安装了 Windows 10。我还必须运行boot-repair
才能恢复 GRUB。
当我启动到 sda 时,GRUB 显示与原始情况类似,并允许启动到 Ubuntu。Windows 条目仍然显示它在 /dev/sda1 上,使用它无法在 sdb 上启动 Windows。
如果我在第二块硬盘上启动(通过 BIOS 中的 F9),那么 GRUB 就会像在第一个硬盘上一样出现,但这次它允许启动到 Ubuntu 和 Windows(它说它仍然在 /dev/sda1/ 上)。
我所看到的:
当启动到 sda 时,它只能看到 Ubuntu,虽然它可能能够从那里启动到 Windows,但它不能,因为它可能无法访问 sdb 或者不知道 Windows 位于 sdb 上。
当启动到 sdb 时,GRUB 知道 Ubuntu 和 Windows 都存在。并且它还知道 Windows(在 /dev/sda1 上)条目指向哪里,因为我们在同一个磁盘上启动,那里有一个实际的 Windows 安装。
解决方法:
如果我仅将第二个 HDD(sdb)设置为主要启动盘,那么我就可以启动这两个操作系统。
尚存的问题:
我不清楚 GRUB 在 sda 上启动时是否正常工作,或者是否已损坏。我可以让 GRUB 在 sda 上启动时的性能与在 sdb 上相同吗?
该条目的条目编辑器如下所示
insmod part_msdos
insmod fat
set root='hd0,msdos1'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1 11FC-F339
else
search --no-floppy --fs-uuid --set=root 11FC-F339
fi
parttool ${root} hidden-
drivemap -s (hd0) ${root}
chainloader +1
官方文档是这样的:
https://help.ubuntu.com/community/Grub2/Installing
解释如下:
GRUB 2 通常将其引导加载程序信息写入主引导记录之后、第一个分区之前的区域。非 Linux 操作系统上的某些软件也使用此嵌入区域,并通过覆盖双引导系统上的 GRUB 2 信息来破坏系统。GRUB 2 现在可以识别并避免此潜在问题。
在具有多个驱动器和操作系统的系统上,用户可以在另一个驱动器上安装 GRUB 2 来保留原始引导加载程序。为此:
指定当前未用于引导系统的磁盘(例如 /dev/sdX,而不是 /dev/sdaXY)作为引导加载程序位置。
安装完成后,更改启动顺序(通过 BIOS 设置),以便写入 GRUB 信息的磁盘成为首先启动的磁盘。
如果用户希望使用原始引导加载程序恢复引导,请将引导顺序改回原始驱动器。