Windows 8 + Ubuntu 12 双系统 Legacy BIOS 转 UEFI 启动纪实

注意:这是一篇记录性质的日志,并不是一篇教程. 我最后成功将两个系统由 UEFI 引导了,但是花了不少功夫,绝对不是最佳步骤,本文仅供要做同样事情的人参考.

在帮弟弟装系统的时候发现他的笔记本不支持 UEFI 启动,回去随手看了一下自己的主板发现居然可以,但是我的 win8.1 和 ubuntu12.10 已经以 Legacy BIOS 方式安装了,网上找了一圈也没见到如何转换的教程.

我有两块硬盘,一块 SSD 内安装着 Windows 8.1 与 Ubuntu 12.10 ,由 Windows 的 Bootmgr 引导 Grub Legacy , 一块 HDD 内安装着 Windows 7.

首先 Legacy BIOS 方式安装的系统是安装在 MBR 分区格式上的,如果要用 UEFI 方式启动 Windows 8 ,则必须将硬盘分区改成 GPT 格式的. Windows 下有 diskpart 工具可以完成转换工具,于是找了篇教程:

http://www.iruanmi.com/convert-gpt-to-mbr-or-convert-mbr-to-gpt-use-diskpart-tool/

但是,注意教程中的以下语句:

我看到那行 Clean 略发虚,于是找了一下文档:

http://support.microsoft.com/kb/300415

其中写道:

clean [all]

Use the clean command to remove partition or volume formatting from the current in-focus disk by zeroing sectors. By default, only the MBR or GPT partitioning information and any hidden sector information on MBR disks is overwritten. If you specify the all parameter, each and every sector can be zeroed, and all data that is contained on the drive can be deleted.

好像没啥问题嘛,于是就高高兴兴进入命令行恢复模式敲下了代码.

于是第一个悲剧就开始了: SSD 意料之中地引导不能,由第二启动项的 HDD 启动了封存已久的 Win7 ,那个卡啊.. 当时换 SSD 最重要的原因就是机械硬盘里的 Win7 实在是太卡了. 然而漫长等待后进了系统却发现 SSD 识别不出来了,到磁盘管理器里一看,我了个去整块盘被我格掉了.

WP_20131229_001

我高速思考着丢了些啥文件—— BRN 最新更新的一部分代码;两首歌和张欣悦那首原创钢琴曲的录音母带;两个折腾完的系统. 好像就最后一个最心疼啊. 正琢磨着怎么重新装系统的时候,我突然想到这些文件应该可以恢复,干脆下个 EasyRecovery 试试看吧,虽然我记得 SSD 不像 HDD 格式化完可以找回数据,但好歹试一试.

打开 EasyRecovery 以后,发现果然找到三个丢失的分区,但是剩下四个 ext4 和 swap 分区就找不到了,而且只能恢复文件到一个新的地方而不能恢复整个磁盘,最关键的是,恢复要 90 软妹币,啧啧啧啧. 由于不想急着付钱,于是开始找国外有没有什么磁盘恢复的软件,但是找到的还是一个国内的软件:Disk Genius. DG 不但找到了所有分区,而且可以直接修复分区表,还是免费版的功能,最重要的是,立等可取,直接就恢复使用了. DG 简直业界良心,真不明白 EasyRecovery 何来的勇气收 90 大洋. 本来想给 Disk Genius 贡献一个专业版的,但一看 450 人民币,割肉割得有点痛,就罢手了.. 开发的哥们儿,给个捐赠方式行不.. 这里顺带吐槽一下,这俩软件的官网都好难看.

一番折腾过后 SSD 顺利恢复使用,但是仍然不能引导,毕竟已经改成 GPT 分区格式了. 而就在这时,反复重启的时候, Win7 突然说要安装更新,一装就是 65 个,我怀疑这块硬盘本身就有质量问题,任何关于系统的操作都异常缓慢,这 65 个更新我干等了一个多小时才装完.

在研究为何不管是 Legacy BIOS 还是 UEFI 都不能引导 SSD 的时候,我明白了原来 UEFI 要引导 GPT 磁盘是以 ESP (EFI System Partition) 做入口的,并且如果 Windows 要以 UEFI 模式安装的话还需要一个 MSR (Microsoft Reserved Partition) . 也就是说,我要新建两个特殊的分区,并且似乎原有的 Boot 分区就不需要使用了. 我打开 DG 找了找,发现格式化选项里没出现过 ESP 和 MSR 格式,如果要手动格式化,需要在 Win8 的命令行恢复模式下使用 Diskpart 工具建立.

问题是手头没有空光盘也没有空 U 盘,仅有的 Win8 也不能引导,被迫只能把移动硬盘划了 10G 出来写了个主引导记录扔进去了个 Win8 安装镜像.

通过移动硬盘里的 Win8 安装包顺利进入命令行恢复模式,使用 Diskpart 工具首先删掉了原有的 350M Boot 分区,创建了一个 222M 的 ESP 分区,把剩下的 128M 作为 MSR 分区. 之后再使用 bcdboot 建立引导记录:

*本部分多有参考:

http://roov.org/2013/11/uefi-bootfix/

http://technet.microsoft.com/en-us/library/hh825686.aspx

重启之后 UEFI 已经能正常引导 Windows. 那么接下来就是把 Ubuntu 的引导也修复了.

最初我还是想通过 Windows 的 Bootmgr 来引导 Grub Legacy ,但据 这篇文章 所说,用 Grub Legacy 不如新装一个 Grub2 ,可是装完 Grub2 后我发现 EFI 版的 Bootmgr 没有链式引导(Chainloader)功能,因此只能使用主板的引导选择功能(我的 T420s 是启动时按 F12)来更改引导.

至于安装 Grub2 并建立引导记录的方法很简单,使用 Boot-Repair 就好了.

*本部分多有参考:

https://help.ubuntu.com/community/UEFIBooting

https://help.ubuntu.com/community/Boot-Repair

安装完后并没有覆盖 Windows 的引导记录,只是默认更改为 Grub2 了,如果愿意用 Grub2 引导 Windows 的话用 Chainloader 就行了,如果要用主板直接引导 Windows ,就进入 UEFI BIOS 修改默认启动项.

至此,引导更换完成,折腾了好久也走了不少弯路,希望能对同样要从 BIOS Legacy 切换到 UEFI BIOS 的人有所帮助.

发表评论?

1 条评论。

  1. 不得不说一句,真实用。厉害!

发表评论


注意 - 你可以用以下 HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">