我在主分区上分别安装了 Vista 和 Windows 8,并使用 Grub 作为启动管理器。问题是,在安装 Windows 8 后,Grub 无法再直接启动 Vista,因为 Windows 8 会用自己的启动管理器覆盖 Vista,而这又有一个讨厌的习惯,就是在进入 Vista 之前需要额外重启(即 Grub -> WindowsBoot -> 重启 -> 再次运行 Grub -> Vista)。恢复 Vista 启动管理器并不难,但这也无济于事,因为 Windows 8 分区本身无法自行启动。
我该如何配置它,以便可以从 Grub 直接启动到 Vista 和 Windows 8,而无需使用 Windows 启动管理器?
编辑:稍微澄清一下,我想要的只是:Vista 分区上的 Vista bootmgr、Windows 8 分区上的 Windows 8 bootmgr 以及 MBR 中的 Grub 来选择要启动哪一个。
编辑2:部分答案可以在以下位置找到:
通过这种方式,我设法获得了一个可以正常工作的配置(将 c:\boot 复制到驱动器 e:,随意bcdedit.exe
将一些驱动器从 c: 设置为 e:)。但仍存在一些问题,例如 Vista 拒绝自动跳过启动菜单,并且由于某种原因 Vista 从 Windows 8 BCD 启动,反之亦然。
答案1
第一步,照常安装 Vista、Windows 8 和 Linux。Windows 8 将在 Vista 分区上安装其启动管理器,从而破坏 Vista 引导加载程序。
第二步,将C:\Boot\
目录从 Vista 复制到 Windows 8 分区,这样 Windows 8 引导加载程序就位于其所属的位置。这可能需要从 Linux 或 Windows 恢复控制台中完成,因为 Windows 会锁定某些文件。
第三步,使用 bcdedit 让 Windows 8 启动管理器指向 Windows 8 分区,而不是 Vista 分区:
bcdedit.exe /store E:\boot\bcd /set {bootmgr} device partition=E:
这可能需要从恢复模式下的 Windows 安装光盘完成。
第四步,使用 Windows 恢复光盘启动并让其修复 Windows Vista 启动或手动执行:
bootrec /fixboot
Windows Vista 和 Windows 8 引导加载程序现在应该分别位于它们所属的分区上。
要删除启动菜单,必须从 Vista BCD 中删除 Windows 8 菜单条目,并从 Windows 8 BCD 中删除 Vista 条目,因为timeout 0
和displaybootmenu No
似乎无法单独工作。使用 EasyBCD 可以轻松完成此操作。
还有一点要记住,大多数 Windows 启动修复工具只能在设置了启动标志的分区上工作,而不允许在其他分区上操作。因此,需要确保为cfdisk
正确的分区设置了启动标志。这导致了我在此过程中的大部分困惑,因为即使是像 EasyBCD 这样的工具也会不断尝试在错误的驱动器上操作(即 Windows 8 分区被标记为可启动,需要将其重置为第一个分区)。
如果一切完成,update-grub
应该可以正确检测两个 Windows 分区,并且能够在没有 Windows 启动菜单的情况下直接启动每个分区。