恢复 Windows 与 OpenSUSE 双系统的 GRUB 2 引导菜单

如果在已经安装了 Linux 的电脑上再安装 Windows 系统,原先的 Grub 引导程序就会被替换成 Windows 的启动引导程序。这里根据 OpenSUSE 上的帮助文档记录一下恢复 GRUB 2 引导程序的方法,也就是将 GRUB 引导程序恢复到 MBR。

要恢复 GRUB 引导程序到 MBR,需要能启动到 OpenSUSE 系统中。可以使用安装盘上的 Rescue System 模式,也可以用带有 Plop Boot Manager 或者 Super Grub Disk 的启动光盘。实际上自己做个可以引导启动的 GRUB 启动 U 盘也是很轻松的。

进入 OpenSUSE 系统后可以按照下面的步骤来恢复 MBR(Master Boot Record,主引导记录)。

如果使用 GRUB2(OpenSUSE 13.1 起已为默认)

切换到 root 用户(或使用 sudo -i

su root

查看硬盘分区情况,找到主要的 Linux 分区(即根分区 / 所在的磁盘分区):

fdisk -l

确认一下 Linux 所在的磁盘,假设这里是 /dev/sda6。

以上准备工作如果没什么问题的话,接着进行实质性的修改:

grub2-install /dev/sda # 注意这里 sda 后面没有前面提到过的数字 3
exit

如果上面这一指令运行成功,GRUB2 就已经安装好了,重启系统即可:

reboot

如果使用旧版 GRUB

在终端下输入(如果是 Rescue System 模式的话不需要 sudo,或者还是继续直接使用 root 身份吧):

/usr/sbin/grub

然后执行下面的命令:

 grub> find /boot/grub/stage2 # 这个指令将会显示 grub 安装的实际位置,下面的指令需要用到
 grub> root (hdx,y)
 grub> setup (hdx)
 grub> quit

注意:这里 x 代表磁盘号,而 y 代表分区号,组合起来的位置就是 GRUB stage2 的安装位置。都从 0 开始编号。例如,如果第一条指令输出是 (hd0,5),那么就输入 root (hd0,5),然后输入 setup (hd0)。重启后,GRUB 应该就会出现了。

有了启动引导程序之后就可以通过 OpenSUSE 系统中的 yast2 里面的 Boot Loader 设置启动的参数了。如果不经过上面的折腾,直接通过 Boot Loader 里面提供的安装特性是无法成功的。

在先 Windows 后安装 OpenSUSE 的情况下,是可以选择将 OpenSUSE 的 GRUB 引导程序写入 MBR 的,但是后来发现这样会导致两个问题:(1)Windows 7 无法使用休眠功能,(2)软激活的 Windows 7 会失效。

最近发现 OpenSUSE 的 GRUB 2 引导程序不会导致 Windows 7 无法休眠了,而且因为不是软激活,也不会出现需要重新激活 Windows 7 的情况了。所以觉得 GRUB 2 这个引导程序还是值得推广的。

2015.01.14 更新

在上述 BootLoader Grub2(未测试 Grub)启动的情况下,如果通过 Windows 7 控制面板 –> 系统和安全 –> 管理工具 –> 计算机管理 控制台里面的 存储 –> 磁盘管理 重新将 Win7 系统盘所在分区设置为活动的(鼠标右键单击该分区,选择“将分区标记为活动分区”),则 Windows 7 可以正常休眠和恢复。

2016.01.12 更新

本来想直接更新这篇博客的,但是考虑到 Windows 都到 10 了,openSUSE 也已经翻篇了,就把这个留着做个纪念吧。新起了一篇文章,见这里:openSUSE 与 Windows 使用 Grub2 双启动©

本文发表于水景一页。永久链接:<http://cnzhx.net/blog/opensuse-repair-boot-loader/>。转载请保留此信息及相应链接。

4 条关于 “恢复 Windows 与 OpenSUSE 双系统的 GRUB 2 引导菜单” 的评论

雁过留声,人过留名

您的电子邮箱地址不会被公开。 必填项已用 * 标注

特别提示:与当前文章主题无关的讨论相关但需要较多讨论求助信息请发布到水景一页讨论区的相应版块,谢谢您的理解与合作!请参考本站互助指南
您可以在评论中使用如下的 HTML 标记来辅助表达: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>