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/>。转载请保留此信息及相应链接。

雁过留声,人过留名

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

特别提示:与当前文章主题无关的讨论相关但需要较多讨论求助信息请发布到水景一页讨论区的相应版块,谢谢您的理解与合作!请参考本站互助指南