Windows10+CentOS7双系统(UEFI+GPT)

Windows10+CentOS7双系统(UEFI+GPT)

前言

眼馋双系统有一段时间了,然而之前安装失败格盘的惨痛教训历历在目。这几天闲着没事查阅了好多资料,怂了一个星期,终于决定再来一次尝试。总的来说安装过程还是挺顺利的,但是后期Windows引导的问题折腾了三天。。。
技术不好,最终搞出个另类的双系统:默认启动Windows10,同时支持Windows Quick Boot;BIOS下切换到CentOS。

设备信息

PC: Thinkpad E431,Microsoft Windows10 Pro 64Bit (10240)
CentOS版本:CentOS-7-x86_64-DVD-1511(这个版本的CentOS支持UEFI)

前期准备

1. 分配CentOS安装盘符

直接使用Windows的磁盘管理,用磁盘压缩切一个空间出来就好了。我是切了50G出来。

2. 关闭Windows Quick

执行Win+R输入gpedit.msc,计算机配置->管理模块->关机,双击右边,选择已禁用

3. 关闭Secure Boot

这个要在BIOS下执行。

安装CentOS

1. UltraISO制作CentOS启动盘。

2. 设置CentOS镜像位置

BISO选择U盘启动,接下来应该会看到黑色界面,如下:

将光标移到第一行,然后这里不是直接点Install CentOS7,要按Tab键先配置CentOS镜像位置。
按下Tab之后可以看到一下三行英文:

setparams "Install CentOS 7" Install
    limuze /image/vmlinuz inst.stage2=hd:LABEL=CentOS\x207\x20x86_64 quiet  
    initrdefi /image/pxeboot/initrd.img

这个是用来选择镜像位置的,因为CentOS它不会自动定位到正确的位置。。。所以接下来要先修改上面的内容。
① 把第二句改成:

   limuze /image/vmlinuz initrd=initrd.img linux dd quiet

② 接下来按Ctrr+x执行,就可以看到所有盘符和编号了。类似于下面这样:

可以看到,CentOS镜像的位置(也就是我的U盘)是sdb4。记住这个sdb4,然后关掉这个界面重新再来一次。
③ 重新来一次又来到了步骤2的那个图,还是按Tab键,这一次将第二行改成如下形式:

limuze /image/vmlinuz inst.stage2=hd:/dev/sdb4 quiet

接下来按Ctrr+x执行,CentOS就开始安装了。记得要勾选一个桌面(如gnome桌面)。

4. 设置CentOS磁盘分区

进来安装界面之后,选择前面切出来的那个盘。

CentOS安装过程中要设置磁盘分区,这个就涉及到Linux的磁盘分区。下面是我的设置情况:

/        :大小30G,设备类型`LAM`,文件系统`ext4`
/boot    :大小200M,设备类型`标准分区`,文件系统`ext4`
/boot/efi:大小128M,设备类型、文件系统默认值(这个efi分区是放CentOS的uefi文件的,貌似最后也就占10M左右的空间)
/swap    :大小8G,设备类型`LAM`,文件系统`ext4`(据说swap分区要为物理内存的两倍,不过觉得我8G内存给它8G已经算多了)
/home:  :剩下的空间都给它,设备类型`LAM`,文件系统`ext4`

之后就开始漫长的安装了。。。。

修复引导

CentOS安装完毕时候会重启电脑,这个时候你会看到系统选项有一个Windows10CentOS,选择Windows10,“卧槽!我的Win10居然没事,网上那群骗子,害我虚惊一场,重启看看CentOS先”。选择CentOS,然后就看到下面的东东:

“特么我这个是Linux啊,你提示Windows未启动是什么意思?”
然后就开始了我的折腾之旅。。。。。
(这里省略上万字的心酸历程)
下面是解决方案

1. 网友建议

网上说的在Windows下使用easybcd添加CentOS的引导,反正我试了很多遍就是没成功。事实上easybcd只能添加CentOS的mbr引导,这个可以在easybcd看出,然而我是通过UEFI来装的,应该就不行。

2. 几番折腾,新办法

① 前面CentOS分区的时候实际上/boot/efi是一个ESP分区(UEFI 系统分区)。里面放的是CentOS的EFI引导文件。

$ ls -R EFI/
EFI/:
BOOT/  centos/

EFI/BOOT:
BOOTX64.EFI*  fallback.efi*

EFI/centos:
BOOT.CSV  gcdx64.efi*  grub.cfg.bak  grubx64.efi*     shim.efi*
fonts/    grub.cfg     grubenv       MokManager.efi*  shim-centos.efi*

EFI/centos/fonts:
unicode.pf2

其中最重要的文件是grubx64.efi,开机时,BIOS先通过ESP分区找到相应的efi程序,然后加载启动系统,这里的grubx64.efi就是用来加载CentOS的。
② 以此类推,Windows下肯定也有类似的文件。的确,在装Windows10的时候,会自动分配一个隐藏的ESP分区,盘符别名为SYSTEM_DRV:

BOOT/
EFI/

其中EFI/Microsoft/Boot目录里面放的就是加载Windows系统的efi文件。即EFI/Microsoft/Boot/bootmgr.efi
由上可知,整个硬盘共有两个ESP分区,常理上讲好像有点不科学,具体我也不知道可不可以。我觉得可能是不可以的,测试了下,发现BIOS每次都是从SYSTEM_DRV里面搜索efi程序,而CentOS的efi又不在SYSTEM_DRV目录下,这应该就是CentOS无法启动的原因。
③ 所以接下来我就把CentOS的ESP分区里面的EFI/centos整个文件夹都拷贝到SYSTEM_DRV盘下的/EFI目录下。重启电脑发现还是不行,原因很简单
a.如果想要出现两个系统的选择项,那就要使用Win10引导CentOS或者有个程序来专门引导两个系统,前者我查了很多资料还是没弄出来,好像是要修改Windows的BCD文件,有点麻烦。至于后者,有个叫rEFind的程序(rEFind下载)可以达到目的,不过弄出来界面太丑了,我放弃了。
b.如果想要使用BIOS引导,就要把EFI/centos里面的路径写到一些特殊的文件,这个要用到一个叫BOOTICE的工具BOOTICE下载。

3. BOOTICE使用教程

① 打开BOOTICE,选择UEFI,点修改启动序列


② 选择左边的添加,先随便选一个本地磁盘的efi文件,然后把左边的启动文件改为

\EFI\centos\grubx64.efi

启动分区选择和Windows系统一样的项。
最后把它移动到第二个,保存。
③ 使用PE把\EFI\centos从CentOS的ESP目录移动到Windows的ESP目录下。这一步是为了让上面设置启动文件:\EFI\centos\grubx64.efi生效。
不得不说,PE真是个好工具。

成功

通过上述步骤之后,重启电脑,电脑应该还是自动进入Win10,因为BOOTICE工具是把CentOS添加到BIOS的启动序列中= =
重启,进入BIOS(Thinkpad是F12),可以看到BIOS启动列表有Windows10CentOSUSB HDD等等,这个USB HDD就是U盘,点CentOS,就可以进入CentOS的引导了,然后启动CentOS。到这里就成功了。

心得

装这个双系统,修复引导花了我好长时间,不过也学到了很多东西,比如UEFI和传统Legacy的区别、UEFI的工作原理、PE的作用等等,最终文件没有发生丢失,也算是值了。下面是总结。
1. UEFI+GPT装双系统真麻烦
2. 微软垄断心态真可怕
3. Google搜索东西靠谱多了
4. PE真是个好工具(进入磁盘修改EFI文件)
5. 我装的双系统怎么和大家的不一样= =
(又要继续干活了。。。)

参考资料

CentOS7安装教程

  1. U盘安装CentOS7的最终解决方案

UEFI引导修复

  1. UEFI主板GPT方式安装CentOS6.4
  2. UEFI+GPT安装Windows8和CentOS双系统
  3. Windows10与CentOS的完美结合
  4. UEFI的两种启动模式
  5. 支持 efi 的主板 双系统安装 ubuntu - 学习 EFI 和 gpt
  6. 如何在UEFI模式下Win8与Ubuntu多系统的安装?
  7. 如何在UEFI+GPT下使用rEFind实现Win10 + Kali2.0 双引导!

你可能感兴趣的:(Linux)