44

详解:Windows8+Centos双系统安装与启动

 5 years ago
source link: https://www.linuxprobe.com/win8-centos-efi.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

刚买的thinkpad t430u 64位的笔记本,发现装Linux是一件非常麻烦的事,以前装个linux系统,配置双启,1个小时就能搞定,而这一次我连装centos6.4带配置双启,花了三个星期。双启后成功后又装了Arch,现在笔记本是三系统,三周的时间里,笔记本重启不下300次。我也不知道能不能成功,所以事先,并没有做详细的笔记。所以下面,只是大致的记录。

关闭secure boot

开机按F1进入bios=>security=>secure boot

笔记本不同,可能secure boot的配置不同,将其disabled掉,要不然,选择U盘启动,光盘启动都无效,报没有权限。

bios里面配置启动项,默认efi only,改为both

bios=>startup=>uefi/legacy boot

启动优先级里面有三个选择,

1,efi only(注释:默认)

2,both (注释:二种方式都可以)

3,legacy only(注释:grub1)

这里说的启动根选择U盘启动,光盘启动不一样。这里的启动是,多系统安装好了,而选择的启动模式。而U盘启动,光盘启动这种情况是系统还没有装时选择的安装启动。我的本子,按F12可以选择U盘启动,或者光盘启动。

为什么要进行这一步,如果不改,默认是装在第二块硬盘上面的,也就是efi的默认启动盘,安装CentOS时:

win8装centos

根本没有“更换设置”这个按钮,并且引导程序只能安装在/dev/sda2上面,选中的情况下,centos6.4 64位,根本安装不成功,所有包安装完后,配置时提示报错,

an unhandled exception has occurred.this is most likely a bug.plese copy the full text of this exeception and file a detailed bug report.against anaconda at http://bug.centos.org/

让提交bug到centos,这个有点坑爹。

将efi only改成both后,重新安装,“更换设置”就会出现,并把引导程序装到centos所在的分区,这样centos可以顺利装完,怎么安装网上太多,在这儿就不哆嗦了。

用easybcd和纯grub1实现双启都不可能

用easybcd和纯grub1实现双启根本不可能,大家就不要浪费时间了。网上有说easybcd2.2可以实现,我试过无数次不行。

在启动优先级里面选择,legacy only,保存重启,久违的centos界面出现了,那叫一个激动。下方向键选择others,windows进不去。总之还是有点高兴的,centos装成功了,我信心大增,通过grub1,我想能启动win8,然后我就开始尝试用grub1启动win8,又试了不知道多少次不行。我想完全靠grub1启动是不可能了

用centos自带的efi实现双启

1,启动优先级里面,选择legacy only,进入到centos

2,下载三个文件,BOOTX64.conf BOOTX64.efi splash.xpm.gz

http://mirrors.163.com/centos/6.4/os/x86_64/EFI/BOOT/ 或者是从iso镜像中解压也行。

3,挂载efi的启动盘

mkdir /mnt/usb  
mount /dev/sda2 /mnt/usb  
cd /mnt/usb  
mkdir image  
cp /boot/initramfs-2.6.32-358.el6.x86_64.img ./image/initrd.img  
cp /boot/vmlinuz-2.6.32-358.el6.x86_64 ./image/vmlinuz  

在efi启动盘的根目录也就是/dev/sda2上面,建一个image文件夹,把装好的cenots内核考过来,我为什么要这么干呢,因为BOOTX64.conf这个文件就是这么干的。

[root@localhost image]# ll /mnt/usb/image/  
总用量 26812  
-rwxr-xr-x. 1 root root 16532286 6月   1 18:11 initrd.img  
-rwxr-xr-x. 1 root root  3089184 6月   1 19:11 initrd.img-arch    //这是arch的,装了三系统  
-rwxr-xr-x. 1 root root  4043888 6月   1 18:10 vmlinuz  
-rwxr-xr-x. 1 root root  3778496 6月   1 19:10 vmlinuz-arch       //这也是arch的,  

4,这一步建redhat目录是多余的,我是按照操作时候的步骤来写这篇博客的

[root@localhost EFI]# mkdir /mnt/usb/EFI/redhat  

为什么要redhat,而不是centos呢,装好的centos,/boot/efi/EFI(注:这个目录在系统的boot下面,不在sda2上面),这个目录下就有redhat,后来我才知道,这个目录没用。

将上面的三个文件BOOTX64.conf  BOOTX64.efi  splash.xpm.gz,copy到/mnt/usb/EFI/redhat目录下面

看一下我的配置:

[root@localhost redhat]# cat BOOTX64.conf  
#debug --graphics  
default=1  
#splashimage=/EFI/BOOT/splash.xpm.gz  
timeout=5  
#hiddenmenu  
title CentOS 6.4  
 kernel /image/vmlinuz ro root=/dev/sda7  
 initrd /image/initrd.img  
title Windows8  
 chainloader /EFI/Microsoft/Boot/win8.efi  
title Archlinux  
 kernel /image/vmlinuz-arch ro root=/dev/sda9  
 initrd /image/initrd.img-arch  

上面的win8.efi是bootmgfw.efi的备份,后来我把bootmgfw.efi也替换了,下面会提到的,这东西启动win8用的。

重启测试
重启F1,进bios,把启动优先级设为efi only,保存重起进grub

grub> configfile /efi/redhat/BOOTX64.conf

注意:grub下面是小定的,linux系统下是大写的,最好是用tab键提示。然后三个启动选项就出现了,我选了一下,都是可以进的,那叫一个激动啊,离成功不远了。

grub> chainloader /efi/Microsoft/Boot/win8.efi
win8也是可以进的

只要启动时能让EFI识别BOOTX64.conf这个文件,并读取,就搞这定了。

然后我就开始把redhat这个目录到处copy,发现不行,我又把BOOTX64.conf  BOOTX64.efi  splash.xpm.gz,这三个文件到处copy,EFI下面的每个目录我都试了。不行。
refind efi启动器

没办法啊,就上google上面找efi启动工具,看了好多,发现The rEFInd Boot Manager还是比较靠谱的。

下载地址:http://sourceforge.net/projects/refind/?source=dlp,这个是二进制版的。

该工具官方地址:http://www.rodsbooks.com/refind/ ,下载,安装,以及使用说明都有。

安装配置地址:http://www.rodsbooks.com/refind/installing.html#linux

下面是我的操作:

cp -r refind /mnt/usb/EFI/
cd /mnt/usb/EFI/refind
rm -rf drivers_ia32
rm -f refind_ia32.efi
rm -rf tools_ia32

[root@localhost boot]# ll /mnt/usb/EFI/refind/   //删除后就是这样子  
总用量 224  
drwxr-xr-x. 2 root root   4096 6月   1 17:52 drivers_x64  
drwxr-xr-x. 2 root root   8192 6月   1 17:52 icons  
-rwxr-xr-x. 1 root root  17774 6月   1 20:55 refind.conf  
-rwxr-xr-x. 1 root root  17911 6月   1 17:52 refind.conf-sample  
-rwxr-xr-x. 1 root root 170824 6月   1 17:52 refind_x64.efi  
drwxr-xr-x. 2 root root   4096 6月   1 17:52 tools_x64  

如果你是64的系统,就把32的删除掉,反之就删64的。

mv refind.conf-sample refind.conf

然后配置refind.conf,我的配置肯定不对,如果要对的话,直接是可以用refind进入centos,win8,arch的。而不是refind去调用grub来启动

http://www.rodsbooks.com/refind/installing.html#linux中的Installing rEFInd Manually Using Linux,安装方法中,6,7这二步,没敢做,我实在无法预测,efibootmgr -c -l \EFI\refind\refind_x64.efi -L rEFInd,执行这个命令到底会有什么后果。

重启后,无法进入refind界面

然后就在仔细阅读文件

rename EFI/BOOT/refind_x64.efi to the name of the boot loader it's replacing—it should become EFI/BOOT/bootx64.efi or EFI/Microsoft/Boot/bootmgfw.efi.

发现有上面的东西,操作如下:

[root@localhost EFI]# cp -r ./Microsoft/Boot/ ./Microsoft/Boot_bak  
[root@localhost EFI]# cp -r ./refind/* ./Microsoft/Boot/  
[root@localhost EFI]# cd ./Microsoft/Boot/  
[root@localhost Boot]# cp bootmgfw.efi win8.efi        //上面提到的win8.efi就是在这儿来的  
[root@localhost Boot]# mv refind_x64.efi bootmgfw.efi  

先把EFI/Microsoft/Boot/这个目录备份,这样我不管怎么配置Boot的目录,我可以还原,进WIN8绝对没问题。efi启动,会默认读取/EFI/Microsoft/Boot/bootmgfw.efi,我的机子是这样子的,规定死了。

重启后,可以进入refind的引导界面,但是没有一个系统能进

refind配置不正确,无法进入任何一个系统,但是我发现refind的第二个引导项读取到了/grub/BOOTX64.conf,并且是默认的centos的BOOTX64.conf,grub是什么时候建的我都忘了,里面是下载的原始的centos的BOOTX64.conf BOOTX64.efi splash.xpm.gz

[root@localhost refind]# cp /mnt/usb/EFI/redhat/* /mnt/usb/EFI/grub  
[root@localhost refind]# cd /mnt/usb/EFI/Microsoft/Boot/  
[root@localhost Boot]# vim refind.conf  
timeout 2  
default_selection 2   //将第二引导项调为默认  

知道refind读取哪个启动文件就好办了,把redhat下面已经配置好的文件copy到grub目录下就搞定了。

就这样我的三系统启动搞定了,不过还有缺点,

第一,引导是分二步的,首先是refind引导,然后refind调用BOOTX64.conf,在通过grub来引导,之后才能进入系统。

第二,内核版本,是copy到了,efi的启动盘上面,升级内核,也用不了,除非在重新将内核copy到sda2上面。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK