詳解:Windows8+Centos雙系統安裝與啓動

剛買的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上面。


分享到:


相關文章: