共计 5062 个字符,预计需要花费 13 分钟才能阅读完成。
刚买的 thinkpad t430u 64 位的笔记本,发现装 Linux 是一件非常麻烦的事,以前装个 linux 系统, 配置双启,1 个小时就能搞定,而这一次我连装 centos6.4 带配置双启,花了三个星期。双启后成功后又装了 Arch,现在笔记本是三系统,三周的时间里,笔记本重启不下 300 次。我也不知道能不能成功,所以事先,并没有做详细的笔记。所以下面,只是大致的记录。
开机按 F1 进入 bios=>security=>secure boot
笔记本不同,可能 secure boot 的配置不同,将其 disabled 掉,要不然,选择 U 盘启动,光盘启动都无效,报没有权限。
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 实现双启根本不可能,大家就不要浪费时间了。网上有说 easybcd2.2 可以实现,我试过无数次不行。
在启动优先级里面选择,legacy only,保存重启,久违的 centos 界面出现了,那叫一个激动。下方向键选择 others,windows 进不去。总之还是有点高兴的,centos 装成功了,我信心大增,通过 grub1,我想能启动 win8,然后我就开始尝试用 grub1 启动 win8,又试了不知道多少次不行。我想完全靠 grub1 启动是不可能了
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 下面的每个目录我都试了。不行。
没办法啊,就上 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,执行这个命令到底会有什么后果。
然后就在仔细阅读文件
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 的第二个引导项读取到了 /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 上面。