openSUSE 与 Windows 使用 Grub2 双启动

之前总结了关于 openSUSE 与 Windows 双系统的双重启动菜单的问题,但是现在看来并不太完善。现在根据最近折腾的经验重新总结一下。也就是在已有 Windows 的电脑上安装 openSUSE 版本 Linux 之后恢复启动菜单并设置为双启动的方法。使用的是早已成为 openSUSE 默认启动管理器的 Grub2。

背景

去年下半年由于M$不遗余力的推送,还有对 Windows 10 所怀的良好愿望,很快就从 Windows 7 升级到了 Windows 10。事实证明,对M$真是不能过度相信。三个月后,对 Windows 10 已经失望大过希望了。然后升级上瘾,又把 openSUSE 13.2 升级到滚动更新版本 Tumbleweed。

openSUSE 现在的版本直升已经处理得很好了,从 13.2 升级到 Tumbleweed 只遇到一个小小的问题。然而最近的一次滚动更新(20160107)之后,Plasma 桌面环境就无法启动了,只能打开 IceWM。于是干脆重新安装了一遍 Tumbleweed,顺便重新划分了一下分区。增加了个单独的 /boot 分区。然后就有了机会重新捣鼓一边 openSUSE 与 Windows 双启动的问题。

下面就不罗嗦了,直接按步骤写过程出来,尽量简洁一点。有什么没交代清楚的问题,可以参考以前的那篇文章

假设原来的 Windows(这里是 Windows 10)安装在主磁盘的 C 分区,openSUSE 在该磁盘的后面的分区。实际上具体的分区结构对本文要介绍的内容影响不大。不过还是记一下吧。Linux 系统分区结构如下:

/dev/sda6 - /boot
/dev/sda7 - swap
/dev/sda8 - /
/dev/sda9 - /home

为什么要修复双启动

安装 openSUSE 之后并不会破坏 Windows 的启动,也就是说,Windows 10 应该还是可以正常启动的,因为 openSUSE 在安装 Grub2 启动管理器的时候会扫描 Windows 安装并为之设置启动项。

但是 Windows 很有可能:

  1. 丧失了休眠的能力,表现为选择休眠之后虽有写硬盘的操作但是却无法正确休眠并断电;
  2. 旧版本的 Windows 还可能会变成未激活状态(Windows 10 的激活机制不同,不太清楚,我懒得试)。

准备 openSUSE 外部引导设备

下一步的操作会使得 openSUSE 的启动项失效,所以先做个引导设备备用。可以是 openSUSE 的安装光盘,但想来没人会为此刻个盘吧,因为可以直接硬盘或者 U 盘引导并加载安装光盘镜像来安装 openSUSE。所以这里提议用安装了 Grub4Dos 的 U 盘来引导启动 openSUSE。可以参考这篇文章来制作启动U盘。

需要注意的是 Grub 的 menu.lst 内容与 Linux 的分区方式有关。上面给的分区结构里把 /boot 单独拿出来了,而参考的这篇文章里假设没有把 boot 单独划个分区。有单独 /boot 分区的可以这么写 menu.lst:

title OpenSUSE Default
root (hd1,5) # 对应上面的 /dev/sda6 (boot 分区),序号从 0 开始计
kernel /vmlinuz
initrd /initrd
boot

或者这样写应该也可以(与上面的参考文章里的一致),

title OpenSUSE Default
root (hd1,6) # 对应上面的 /dev/sda7 (root 分区),序号从 0 开始计
kernel /boot/vmlinuz
initrd /boot/initrd
boot

修复 Windows

启动电脑进入 Windows。在 Windows 的控制面板 –> 系统和安全 –> 管理工具 –> 计算机管理 控制台里面的 存储 –> 磁盘管理,右键单击 C 盘(Windows 所在系统盘),在弹出的菜单里选将此分区设置为“激活”状态(Active)。(如果是 Windows 10,直接鼠标右键单击开始按钮,选择“磁盘管理”即可打开。)

可以试试看此时 Windows 的休眠功能是不是已经正常了。

备用方法:

  • 这个修复还可以使用 Windows 的启动修复光盘(Windows Vista 以上版本)启动到修复界面选择“修复影响Windows启动的问题”来修复。
  • 也可以启动到修复界面后选择“命令行界面”,依次输入下面的指令,
    X:\Windows\System32> bootrec /scanos
    X:\Windows\System32> bootrec /fixmbr
    X:\Windows\System32> bootrec /fixboot
    X:\Windows\System32> bootrec /rebuildbcd
    X:\Windows\System32> exit

    然后重启计算机。

通过 U 盘上的 Grub 启动进入 openSUSE

经过上面一步的折腾,此时开机应该会直接进入 Windows,openSUSE 的 Grub2 启动菜单已经不见了。

插入前面制作的 Grub 启动 U 盘,开机选择从 U 盘启动。注意,

  • 有的大容量 U 盘可能会显示为 HDD,也就是硬盘,注意看清楚。
  • 我的电脑直接在开机时按 F12 键就会出来启动设备选择菜单,使用键盘的上下左右键可以选择/展开子菜单。
  • 如果没有这个启动顺序的选择菜单,又不会自动选择从U盘启动的话,可以进入 BIOS 修改启动顺序。这个因为各个电脑的主板存在差异,就不过多介绍了。反正要装 Linux 系统想来还是有一定探索精神的,搜索一下自己电脑品牌或者主板品牌,或者干脆各种都试一下肯定能找到的。

通过 Grub 引导进入 openSUSE。

重新安装 openSUSE 的 Grub2

在 openSUSE 里打开命令行终端,依次执行下面的命令,

su root
fdisk -l

确认一下系统所在的磁盘是不是 /dev/sda,又或者可能会变成别的,比如 /dev/sdb。然后,确认是 /dev/sda 的话,继续,

grub2-install /dev/sda # 注意这里 sda 后面没有前面提到过的数字 5 或 6 之类的
exit

注:通过 YaST2 里面的 bootloader 来设置没用的。

后记

这样配置之后,如果从 YaST2 里的 bootloader 里勾选写入 MBR 并保存,则需要从“修复 Windows”那一步开始重来一遍。

这样修复双启动菜单之后还有好处,就是在 Windows 系统休眠之后开机可以选择直接进入 openSUSE;反之依然。只是如果 Windows 已休眠,进入 openSUSE 之后最好不要挂载其系统盘,其它非系统 NTFS 分区可以 mount,但是 openSUSE 会提示最好用只读(ro)挂载选项。

欢迎您在下面留下评论。©

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

时间过去太久,评论已关闭。
如果您有话要说,请到讨论区留言并给出此文章链接。
谢谢您的理解 :-)