以下是我的设置。安装新 SSD 后,我有:
- sdc1 上的原始 Windows 7(即将退役)
- sdb2 上的 Windows 7 副本
- sdb1 上的 Windows 系统分区
- Ubuntu 12.04 在 sda 上,/boot 和 grub 在 sda1 上
Grub 是 sda 上的 MBR,并设置为从 BIOS 启动。我宁愿不改变这一点;grub 作为启动管理器更受欢迎。
我从 Ubuntu 运行update-grub
,并且 grub 似乎配置正确,因为所有选项都可用:我可以启动 3 个 Windows 分区和 Ubuntu 中的任何一个。我还运行了修复工具,让 Windows 将两个安装都添加到 BCD。
目前,选择特定选项似乎没有效果;sdc1 上的旧版 Windows 始终会启动。我不明白是什么原因造成的,但我无法弄清楚是什么。grub 和 BCD 如何协同工作?我找不到有关此问题的任何文档。
我的想法是仅从 sdb1 启动 Windows,然后让 BCD 完成剩下的工作(在 sdb2 和 sdc1 之间显示一个启动菜单,但我似乎无法让 BCD 启动 sdb2),但这没有成功。
我的配置文件:
答案1
解决此问题的方法如下:
- 断开所有其他硬盘的连接
- 尝试启动计算机,出现神秘错误
- 插入 Windows 磁盘,运行修复
我还没有尝试重新连接其他磁盘,但我确信 Windows 现在正在使用 SSD!
答案2
在 MBR 上,Windows 7 和 Linux 双启动非常清楚:
始终按启动顺序(在 BIOS 中设置)加载并执行来自第一个磁盘的 MBR。
此 MBR 可以来自 Linux,然后 GRUB 进行控制,或者 MBR 来自 Windows 7,然后启动管理器 (bootmgr) 进行控制。
Windows 中的启动配置数据 (BCD) 最终有几个启动项,如果是,bootmgr 会显示它们供用户选择。您可以在 Windows BCD 中为 Windows 7 和 Linux 设置启动项。
GRUB 配置数据存储在 grub.cfg 中 - 这里我们可以为 Linux 和 Windows 设置多个启动项。grub-install 实用程序会自动扫描并添加所有已安装操作系统(Linux 和 Windows)的条目,无需手动编辑配置。
要编辑 Windows BCD,您可以使用 bcdedit 系统实用程序或图形工具,例如可视化 BCD 编辑器。Visual BCD Editor 能够自动添加 Windows 安装的启动项。下一版本的工具还将自动添加 Linux 启动项。