前一篇关于BIOS+MBR分区实现双系统的文章里面,大家可以发现BIOS+MBR实现双系统真的是很简单,我们什么都不需要做,不需要EasyBCD,不需要启动助手,因为,Linux有自带的强大的Grub,他会为我们做好一切。
但是很多朋友,特别是新买预装了windows8.1(正版)的电脑,在做双系统的时候出现了问题,这时候Grub就帮不上你了,各种启动助手都帮不上你,但是别急,偶可以帮你(开个玩笑)。。。
好了言归正传,这篇关于UEFI模式实现双系统或者多系统的文章,适用于以下朋友
1、电脑主板支持UEFI启动的,希望使用UEFI快速启动,又希望使用多系统的
2、已经预装了正版WIN8.1的系统的。
在开始安装(倒腾)前,大体上讲讲,UEFI+GPT模式的启动原理,首先我们来回顾下BIOS引导MBR分区的流程,BIOS开机自检——》读取硬盘MBR分区的主引导记录—》控制权交给引导程序-》引导程序根据安装时候的配置读取各分区记录—》根据各分区已经有的系统情况,列出启动目录—》根据用户选择,启动选择的引导文件启动用户选择的系统。
现在我们来说说UEFI的情况,主板上的UEFI模块—》硬盘内的第一个fat分区,如果分区内有EFI这个文件目录,就根据EFI文件目录的引导文件加载各类型的驱动和引导文件,启动系统同时完成自检。(如果第一个fat分区没有EFI目录则选择第二个,如果第一块硬盘没有,择选择第二块,或者U盘以此类推),当然,UEFI的实际启动过程,并不像我说的这么简单,我这里也仅仅是简单描述下跟传统BISO引导的不同地点而已。现在我们还是来看看实际的情况。先来看看基于UEFI启动的系统的硬盘结构实例:
这是我目前使用的电脑的第一块硬盘(120G的SSD)的分区结构柱状图。这块硬盘上我一共做了6个分区(GPT分区结构不需要构建逻辑分区,所有分区都是唯一标识的分区)。硬盘头部有两个很小的分区,第一个ESP分区(这个就是放置EFI文件的分区,这个分区非常重要,每次做好系统应该自觉备份里面的所有文件到安全的地方),第二个是MSR分区(微软保留分区,无格式传统软件无法读取),后面接下来就是NTFS分区(50G,安装有WIN8系统和各类软件)第四个分区也是NTFS分区(我保留了35G,专门留个放WOW的),第5个就是安装好Ubuntu的Linux分区,最后一个是OSX的HFS分区。
必须说明的是ESP和MSR分区必须是FAT或者FAT32格式的文件系统,否则主板的UEFI初始化程序无法读取上面的EFI文件夹。ESP分区即最重要的启动分区(名字可以随意)里面保存着整个计算机系统的所有启动信息。下面我们再来看看ESP分区下面的的文件结构:
这是一个我在UEFI环境安装好的win8.1后保存下来的ESP分区的目录表(ESP分区根目录下面是EFI,这个图示EFI文件夹里面的两个文件目录)。
Boot文件夹里面是一个名字叫做bootX64.efi的文件,这个文件UEFI引导的必须文件,而且必须是在ESP根目录Boot文件夹里面。
接下来再来看看Microsoft目录下面的文件结构。Mircrosoft目录下面也是一个Boot文件夹,点开这个/mircrosoft/boot文件夹,可以看到如下图所示的文件:
这个目录类容丰富,包含了windows系统引导启动的所有信息,非常重要,文件夹是字体和语言部分,BCD包含了windows引导开始以后的信息(例如安装Hyper-v虚拟机和恢复还原之类的就会更新里面的信息)。bootmgfw.efi 是 Windows默认引导文件
efi\boot\bootx64.efi
efi\microsoft\boot\bootmgfw.efi
这样的文件结构就构成了UEFI系统引导启动windows的大体结构了(有趣的是,在windows默认的安装的EFI文件结构中,bootx64.efi和bootmgfw.efi实际上是同一个文件,名字不同而已,但是他们出现的位置不同,所起到的作用不同)
UEFI启动分区(本例为ESP分区)的文件结构分析得差不多了,我们在来回顾一次UEFI启动的Windows8.1的过程,UEFI控制找到硬盘扫描硬盘上的fat系统类型分区,找到EFI文件夹,读取EFI文件夹类Boot文件夹的bootX64.efi文件,然后根据其中的信息找到需要加载的mircosoft文件夹,再次读取mircosoft文件夹里的Boot文件夹类的bootmgfw.efi文件,以此按照bootmgfw.efi文件的要求加载各种启动信息,完成Windows启动。
到此为止,我们差不多对UEFI环境有个比较初步的了解了,对UEFI启动也差不多有个简单的理解了。现在我们开始回归这篇文章的主题,如何在UEFI环境下安装WIN8.1+Unbuntu。本着对新同学负责的原则,我们还是从最基本的UEFI安装WIN8.1说起。已经预装好UEFI启动Win8.1的朋友可以直接下跳到Ubuntu的安装。
(一)windows8.1的安装:
首先我们还是按老办法,先规划好磁盘分区在开始安装系统。首先用PE启动你的电脑
使用PE自带的DG分区软件对硬盘进行分区操作。
建立或者转换成GPT分区表,DG软件会提示你是否建立ESP分区,勾选上,分区大小100~300随意(当然你也可以自己建立一个fat或者fat32格式的分区作为启动分区),勾选对齐到4096(4k对齐,固态硬盘都懂得,不是固态也勾选吧)然后确定。
先建立一个NTFS分区安装Windows,接下来按部就班的建立Linux分区以及交换空间
完整的分区图如上图,看看跟上一篇的MBR分区图有什么不同?多了两个小黑头对吧,这两个小黑头就是ESP启动分区和MSR保留分区。特别说明的是ESP分区只是一个FAT或者fat32格式分区,可以再分区表的任意位置,名字大小随意(100~3、500)都行,但是它对于UEFI系统的启动必不可少。
国际惯例还是重安装Win8.1开始,依旧选在原版镜像的U盘或者光盘安装。开机按Del,根据主板的不同开始UEFI模式(固态硬盘的同学AHCI记得开启来),保存然后重启。插入U盘或者光盘,开机按F11(或者其他根据主板不同而异)选择前面带UEFI_字样的启动选项。
安装没什么好说的愉快的一路NEXT。直到选择自定义安装。
Win安装程序读出了我们刚才分好的5个分区,选择30G的我们刚才规划的要安装Win8的分区,NEXT,又是愉快的等待,然后简单的设置,再次愉快的等待,差不多半小时到40分钟,Windows就算安装好了。
这样就算是在UEFI模式下装好了WIN8.1,打开磁盘管理,可以看到windows只读取了硬盘上的4个分区,并没有读取ESP分区,所以UEFI模式相对于BIOS模式是要安全很多,不会受到诸如以前恐怖的CIH病毒侵害的。
接下来,我们先不忙安装Ubuntu ,继续用PE启动电脑,来看看我们这个硬盘的ESP启动分区的情况(当然可以用windows自带的Diskpart命令来查看,并挂载,这里主要是面对新手朋友,所以还是图形见面直观大方)。
接下来,我们先不忙安装,先来看看我们的虚拟机,点开虚拟机设置-》固件,
我们可以看到UEFI模式安装好的win8.1在安装过程中自动的为UEFI控制添加了从文件Bootmgrfw.efi 启动。这个反映在实体机器上就是,你在UEFI模式下安装好WIN8.1的时候,按住启动选择,就只有Windows Boot Manager和你插入的其他启动设备选项了。如果没有其他设备,UEFI会快速的找到Bootmgrfw.efi启动windows。不会再出现原来按F11时候的选择,什么从光驱启动,从硬盘启动的选项了。更不会再找到Bootmgrfw.efi启动windows的情况下,继续去找Grub或者是其他什么传统启动助手软件,然后再通过软件,根据硬盘分区的启动信息,启动多系统选择。(另外,还需要说明的一点事,在GPT分区表上是不存在激活的当前分区这种说法的,因为UEFI启动系统只是找第一个FAT(fat32)分区,在分区中找到EFI文件夹和里面的启动信息就停止了,如果没找到继续找第二个FAT分区,当前设备没有就换下一个设备,以此类推)
说了这么多大概很多在UEFI模式下安装了Windows再安装Ubuntu系统的朋友会多少明白一点,为什么装好双系统,第一次进入了Grub,可以看到多重引导,但是一旦选择进入了Windows8.1,接下来,再重新启动就会直接进入Windows,不会再去启动Grub了吧。
我们再一次用PE启动电脑,现在我们读取到了ESP启动分区,即我标示的F盘(这个盘符是PE启动系统随机分配的)
打开这个F盘,看看里面的结构式是不是
/efi/boot/bootX64.efi
/efi/mircosoft/boot/ bootmgfw.efi
这样的文件结构吧。
这样我们就算不仅仅在UEFI模式下安装好了Win8.1,并且还大体明白了,Win8.1在UEFI模式下是怎么启动电脑的。接下来就是在UEFI模式安装Ubuntu了。
(二)UEFI模式安装Ubuntu
Unbuntu14.04的发行版ISO,已经支持UEFI模式安装了,所以,我们还是选择最简单的办法就是写到U盘或者是光盘安装,启动的时候照例选择有UEFI_前缀字样的启动项。因为安装过程跟上一篇BIOS+MBR的安装差不多,相同的地方我就不一一详细介绍了,只是针对不同的地方。
开始一路NEXT,到选择安装的时候仍然选择其他选项(这个很重要,建议以后折腾电脑的时候,均采取自定义,这样你才明白程序会对自己的电脑做些什么,做了些什么)。
接下来出现我们在上一篇安装里面说得比较详细的自定义安装界面,分区安排还是跟BIOS安装的时候差不多,只是多了两个分区而已(编号方法仍旧是/dev/sda12345)
值得注意的是,我们现在在选安装启动器的设备位置时,选择/dev/sda1 不要遗漏数字1,这样就是把Ubuntu的EFI启动信息安装到我们的ESP启动分区上了,而且,Ubuntu很聪明小心谨慎,只是添加,不会去动微软大爷的原来的。
接下来又是愉快的NEXT,NEXT。。。大概20~30分钟的愉快等待,机器重启,进入熟悉的Grub界面,UEFI的双系统安装就算完成了!
当然到这里大多数的朋友都会遇到,用Grub启动到Ubuntu,愉快的玩耍了几下,然后再回到Windows再次愉快的LOL了两把或是其他神马,然后又想起了,去Ubuntu看看,结果再次启动电脑的时候,直接就近Windows了,微软大爷就是这么霸气。。。等下我们再来说怎么解决这个问题。
同样,我们先不忙配置双启动,先再来看看装好双系统的的情况下的ESP启动分区的情况,启动装好的Ubuntu,打开文件管理器,点击计算机,进入/BOOT目录(ESP启动分区的EFI文件夹是默认挂载到这个目录的)打开EFI文件夹
看到没有,ESP分区根目录下面是不是比刚才装好WIN8.1的时候多了一个Ubuntu文件夹。
这样我们大概也明白了,安装玩UEFI模式的Ubuntu,安装程序会低调的在ESP启动分区的根目录下面添加一个自己的启动信息文件夹。
(三)配置refind完成UEFI下的双系统启动
大概是由于微软大爷的霸气,UEFI双系统做好以后,进入了Win8.1就再也无法看见,引导Grub的界面了。好了现在接下来说说如何解决UEFI模式下,可以愉快的启动切换Win或者Ubuntu,我们可以采取用其他管理引导的方式,例如,Clover和refind,因为Clover是在OSX下配置引导安装的,我们就选择refind(这个可以到官网直接下载,目前的最新版本是0.83版实际上刚才有吧友在回复中提到了,可以使用refind)。那么我就来说说怎么使用refind配置双系统吧。首先下载refind包,解压后得到一个文件夹。
现在,我们需要用PE启动电脑(当然也可以直接使用Diskpart挂载ESP分区,为了方便新同学,直观的了解就直接使用PE了)打开我们安装好的双硬盘的ESP分区,首先完整备份EFI文件夹及文件夹里面的所有内容到一个你认为安全的地方然后打开EFI文件夹,现在你看到的结构内容是
/efi/boot
/efi/Microsoft
/efi/Unbuntu
现在,打开我们下载并解压好的refind-bin-0.83文件夹,选中其中的叫refind的文件夹,全部复制到ESP分区的根目录下面,下面是复制好的,ESP文件结构,如下图所示:
/efi/boot
/efi/Microsoft
/efi/Unbuntu
/efi/refind
现在,我们可以开始配置refind了,首先选择,Microsoft文件夹,随便改个名字,叫做Win81,然后把refind文件夹改名字为Microsoft,改好后的文件结构为:
/efi/boot
/efi/Microsoft
/efi/Unbuntu
/efi/Win81
现在我们进入win81文件夹,进入里面的Boot目录,全选所有的文件,拷贝到Win81中来,然后再删除掉Win81中的这个空的Boot目录。现在Win81的目录结构大体上就是
/efi/Win81/bootmgfw.efi(等等文件和语言文件夹)。
然后我们在进入那个假的Microsoft文件夹(实际上是我们的refind目录更改而来的),新建一个Boot文件夹,剪切原来该文件中的类容,到我们新建的这个Boot目录中来。完成后这个伪装的Mircosoft文件夹的结构为:
/efi/Mircosoft/boot/refind_x64.efi等文件及一些文件夹
选中其中的refind_x64.efi,文件更改名字为bootmgfw.efi,得到这里为止,大体工作就完成了,剩下来的就是改变配置菜单。这个等下再说,为了确保不出错,我们现在来看看修改好的ESP分区里面的文件结构:
/efi/Boot
/efi/Microsoft/boot
/efi/Win8.1
/efi/Ubuntu
确保你的文件结构如上面所示,并且在假Microsoft文件夹的Boot目录下面的refind_x64.efi已经更名为bootmgfw.efi。
现在剩下最后一步工作写refind的配置文件了,实际上下载的软件包里面,已经有写好的模板了(即名为refind.conf-sample),我们只需要更改其中的类容就可以安全的愉快的启动双系统了。
废话不多说,进入/efi/Mircosoft/bott目录,打开其中的refind.conf-sample文件,然后另存为refind.conf 。(打开方式可以选择写字板,这样可以看到清晰的分行和格式)
这是一个脚本文件,“# ”后的类容表示注释,我们仔细浏览这个文件找到下面这段:
这是一个refind为我们写好的定义的启动菜单脚本,启动菜单叫Ubuntu ,使用的启动文件为/efi/ubuntu/Grubx64.efi,另外加载的图标是icon/efi/refind/icons/os_linux.png
现在我们按照菜单指示的路径打开,发现Grubx64.efi,确实存在于我们的目录里面保持不变,
但是图标路径发生了变化,这个原来写好的refind目录已经变为Microsoft/boot了,所以我们更改下这个菜单图标路径为 /efi/Microsoft/boot/icons/os_Ubuntu.png (其实icons目录下面已经有了Linux各种发行版的图标了,所以我直接改成了Ubuntu的)
改好的Ubuntu菜单脚本:
menuentry Ubuntu {
loader/EFI/ubuntu/grubx64.efi
icon/EFI/Microsoft/Boot/icons/os_ubuntu.png
disabled
}
然后再继续找到下面字段,也就是WINDOWS的菜单脚本
这段代码写的win7 ,我们可以更改为Win8.1,按照我们自己的ESP分区的目录结构,修改好windows菜单脚本,修改好的菜单脚本如下:
menuentry “Windows 8.1” {
loader\EFI\Win81\bootmgfw.efi
icon/EFI/Microsoft/Boot/icons/os_win.png ///这里我添加了图标路径
disabled
}
这样我们就弄好了我们双系统的引导菜单,但是refind的功能远不止于此,实际模板提供了包括OSX在内的菜单引导脚本,由于我们电脑上只有Win8.1和Ubuntu,那么我们就把其他模板禁用了以保证我们的启动菜单清清爽爽(直接在不需要的菜单引导脚本前面加上“#”就可以了)
好了,保存退出,大功告成了。
总算写完了,最后发一张喜闻乐见的refind引导开机图片!
这样,就可以愉快的在UEFI模式下,愉快的使用Windows+Ubuntu双系统了。另外提醒下大家,在刚才 的工作做完以后记得保存ESP分区下面的EFI文件夹到安全的目录里面去