http://teliute.org/fw/win8insu2.html
UEFI啟動模式和傳統的Lagency啟動模式完全不同,因此很有必要先了解一下UEFI BIOS和UEFI啟動模式
1 必須搞清的幾個UEFI問題
(1) UEFI啟動模式 與 legacy啟動模式
legacy啟動模式: 就是這么多年來PC一直在使用的啟動方式(從MBR中加載啟動程序),UEFI BIOS作為一種新的BIOS自然也應該兼容這種老的啟動方式;
UEFI啟動模式: UEFI BIOS下新的啟動技術。如果你的PC在UEFI啟動模式下預裝了Win8,你會發現有兩個很小的隱藏分區。一個叫ESP(EFI系統分區),另一個MSR(Microsoft保留分區,通常為128MB)。MSR是windows要求的。ESP對UEFI啟動模式很重要,UEFI的引導程序是以后綴名為.efi的文件存放在ESP分區中的,ESP分區采用fat32文件系統。此外,可能還存在一個小分區叫WinRE Tools,這個是win8的恢復分區,體積也很小。所以千萬不要手賤把這三個分區刪了。但對我們有意義的是ESP分區,windows下想訪問ESP分區需用分區工具給它分配盤符並取消隱藏;而ubuntu則直接將這個分區掛載到/boot/efi,直接用文件夾瀏覽器進去就可以看到各種.efi文件了。
因此第一個關鍵問題就是確定自己的啟動模式,方法是進入BIOS,然后你會發現有一項叫"boot mode",選中"UEFI boot"就是UEFI啟動模式,選中"Legacy boot"就是Legacy啟動模式。見過吭爹的UEFI BIOS:有着非常華麗的BIOS界面,還能使用鼠標,但卻只支持Legacy boot。
(2) UEFI啟動模式只支持64位的系統,所以預裝的win8是64位的,ubuntu(kylin)也需要64位的。
(3) UEFI BIOS 和 Legacy BIOS
我們都知道可以在傳統的bios中調整設備的啟動優先級,UEFI BIOS在UEFI啟動模式下不但可以調整設備的優先級,還可以調整設備中引導程序的優先級,安裝完ubuntu之后,你再進BIOS就會發現多了一個可選擇的啟動項叫ubuntu。此外,UEFI BIOS也引入了一些新的技術,例如Fast boot和secure boot,當然后面一項完全是用來坑爹的。
(4) UEFI啟動模式下如何從u盤或移動硬盤引導
只要u盤或移動硬盤上有一個fat32的分區,分區的根目錄下有個文件夾叫EFI,UEFI就會自動去查找相應的啟動文件(.efi)
如果你剛制作了ubuntu(kylin)-13.04-64位的啟動u盤,可以打開它,你會發現分區的文件系統是fat32,確實有一個EFI文件夾,進去看看就是各種.efi引導文件(這里再次強調64位,32位下你是找不到這個文件夾的)。因此現在想制作可啟動的u盤或移動硬盤就簡單了,只需要復制粘貼就行了。
部分UEFI BIOS還支持從NTFS分區中查找啟動文件。
2 安裝常見問題
(1) PC買來時預裝了Win8,可是怎么按快捷鍵也進不了BIOS
這個是Win8的啟動技術造成的,解決方法有二:
<1> 將鼠標移動到屏幕右上角,在彈出的邊框中選"設置" → "電源",然后按住shift鍵選"重啟",等待一會,會彈出一個界面,選"疑難解答" → "高級選項" → "UEFI固件設置" → "重啟"
等待片刻就來到BIOS。
<2> 徹底關閉Win8的快速啟動,方法是按"win鍵"+x,選擇帶管理員權限的命令提示符,輸入命令powercfg -h off。這樣Win8的關機就不再是假關機了,重啟就可以按快捷鍵進BIOS了。然后在BIOS中將fast boot設為disable。
我個人使用的是方法二,原因有二:一,如果開啟了BIOS中的fast boot,啟動時外接USB鍵盤不可用,因此也無法在grub啟動菜單中選擇進哪個系統,當然,筆記本內建的鍵盤是可用的,可是我經常懶得將筆記本打開,直接以平板模式放支架上工作,內置鍵盤是用不了的。二,Win8快速啟動是建立在休眠功能上的,休眠功能會額外占用75%左右內存容量的空間,8G內存就是6G多了,對於我128G的SSD太多了點,更何況我裝的還是雙系統。
(2) 關閉secure boot
這個坑爹的技術曾引發全世界范圍內對微軟的吐槽,如果你的BIOS不能disable,那很多Linux發行版你都無法安裝。據說ubuntu是買了微軟的key的,但是我安裝完ubuntukylin13.04-64位后同樣被這一坑爹技術華麗麗地阻止啟動。當然我的BIOS是可以關閉它的。
(3) 安裝完成后如何啟動ubuntu
安裝過程和以前完全沒有差異。但是安裝完成后拔掉u盤重啟,不出意外的話,會直接進win8。還記得1中提到的UEFI BIOS可以設置設備中系統的優先級嗎?這里Win8是第一優先級,當然很自然地就進win8了,進BIOS你會發現啟動項多了一個ubuntu,放在最前面就OK了。當然,還有一個辦法,啟動時按快捷鍵調出BIOS的啟動菜單,選擇ubuntu就可以進ubuntu系統了。
(4) 像以前一樣從grub啟動windows
切換系統時每次都要進BIOS或則調出BIOS啟動菜單,非常不方便,有沒有辦法像以前一樣可以從grub啟動菜單中進win8呢?答案是肯定的,只是步驟稍微有點長:
<1> 先讓grub啟動菜單顯示出來
不出意外的話,你啟動ubuntu時是看不到grub啟動菜單的。輸入下面命令打開/etc/default/grub
sudo gedit /etc/default/grub
把"GRUB_HIDDEN_TIMEOUT=0"這一行注釋掉(這一行的最前面增加"# "),變成這樣:
# GRUB_HIDDEN_TIMEOUT=0
此外"GRUB_TIMEOUT=10"控制着grub菜單的讀秒時間,這里是10秒,可以根據需要修改成其他值。
<2> 增加win8的啟動項
還記得剛才我們說的ESP分區嗎,現在安裝完了,也啟動了,你可以去/boot/efi下看看這個分區里面都有什么。你會發現這樣一個文件"/boot/efi/EFI/Microsoft/Boot/bootmgfw.efi",它就是win8的引導文件,所以增加的啟動項的方法就是去加載這個文件。
首先,確定我們ESP分區的UUID是什么,先輸入下面命令。
sudo grub-probe --target=fs_uuid /boot/efi/EFI/Microsoft/Boot/bootmgfw.efi
返回結果:8AA5-3B52
當然這個"8AA5-3B52"是我的ESP分區的UUID,別的電腦就會變成其他值了。分區的UUID在你的PC中的是獨一無二,也不會發生改變,因此經常用它來代表一個分區。
用下面命令打開"/etc/grub.d/40_custom"
sudo gedit /etc/grub.d/40_custom
然后在最后面增加:
#### #### #### #### #### #### #### ####
menuentry "Windows x86_64 UEFI-GPT" {
search --fs-uuid --no-floppy --set=root 8AA5-3B52
chainloader (${root})/EFI/Microsoft/Boot/bootmgfw.efi
}
#### #### #### #### #### #### #### ####
需要注意,8AA5-3B52要修改成你剛才得到的UUID哦。
<3>改完之后記得讓修改生效
sudo update-grub2
此時重啟,看看是不是已經有grub啟動菜單了,而且還可以選擇進入win8。
3 在移動硬盤或u盤中安裝ubuntu
后來我又在移動硬盤中安裝了ubuntu12.04 64位,這里遇到了一個問題:
SSD中的安裝ubuntu(kylin)-13.04 64位在UEFI BIOS出現的啟動項名稱是"ubuntu",對應的引導文件是"ESP分區/EFI/ubuntu/grubx64.efi"
而如果再安裝一個ubuntu-12.04 64位,哪怕是安裝到移動硬盤或u盤中,也會在你的主硬盤的ESP分區中建立引導文件,而且這個引導文件同樣是"ESP分區/EFI/ubuntu/grubx64.efi"。這會把原先ubuntu(kylin)-13.04的引導文件給覆蓋掉。注意,安裝過程中選擇從哪個設備建立引導是無效的,無論你選什么,引導文件都會被安裝到主硬盤ESP分區中。因此安裝之前需要做點工作。
(1) 修改SSD中ubuntu系統的引導文件路徑
為了解決上述問題,可以嘗試修改路徑。
sudo gedit /etc/default/grub
找到這一行"GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`"
在最前面加# 注釋掉,然后在它下面增加一句,修改后成這樣:
# GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_DISTRIBUTOR=ubuntukylin
因為我裝的是ubuntukylin,所以我改成了ubuntukylin,你可以按自己的喜好修改成其他名字。
修改完后
sudo update-grub2
sudo grub-install
完成后,可以去/boot/efi/EFI下看看是不是產生了一個ubuntukylin的文件夾,同時里面也有一個文件"ESP分區/EFI/ubuntukylin/grubx64.efi",BIOS中也會出現一個啟動項叫ubuntukylin,別忘了進去設成第一啟動項。當然舊的ubuntu啟動項還是在的,此時你從ubuntukylin或ubuntu啟動的結果都是一樣的。所以此時我們可以把ubuntu這一項廢棄了。
(2) 安裝
按照1的描述,安裝前記得先給移動硬盤或U盤分區,其中一個分區是FAT32文件系統,然后安裝ubuntu到u盤或移動硬盤,安裝方法沒什么獨特,只是在選文件系統時掛載到u盤或移動硬盤的分區中就可以了。完成后,"/boot/efi/EFI/ubuntu/grubx64.efi"已經變成ubuntu12.04的引導文件了。此時我們只需要將這個文件搬到移動硬盤或u盤中的fat32分區中,方法如下:
先將你的ubuntu-12.04 64位的啟動u盤(LiveUSB)打開,復制里面的EFI文件夾(或者到iso中去提取)到移動硬盤或u盤的FAT32分區中。再進到"/boot/efi/EFI/ubuntu/"中,用grubx64.efi覆蓋"EFI/BOOT/"下的文件。完成,是的,僅需復制粘貼就可建立移動設備上的引導了。
(3) 刪除BIOS中殘留的啟動項
步驟(2)完成后,移動硬盤或u盤就是可啟動的了,但會在BIOS中殘留啟動項"ubuntu"。可以使用工具efibootmgr刪除。
首先,將引導文件刪除:
sudo rm -r /boot/efi/EFI/ubuntu
然后使用工具efibootmgr來查看我們需要刪除哪一項
sudo efibootmgr
你會得到類似下面這樣的信息
BootCurrent: 0002
Timeout: 0 seconds
BootOrder: 0002,0000,0001,0006,0005
Boot0000* Windows Boot Manager
Boot0001* ubuntu
Boot0002* ubuntukylin
Boot0005* UEFI: IP4 Realtek PCIe GBE Family Controller
Boot0006* UEFI: IP6 Realtek PCIe GBE Family Controller
從信息中我們知道windows是第0項,ubuntu是第1項,顯然是將第1項刪除
所以刪除命令是
sudo efibootmgr -b 1 -B
windows下也有類似工具EasyUEFI。
其實,在UEFI啟動模式下,grub-install命令就用"efibootmgr -c"來為BIOS建立一個新的啟動項。新手建議別碰這個命令,有實力的玩家可以看看它的man手冊。
UEFI很強大,可以在UEFI下開啟一個像Linux一樣的終端,然后運行命令:例如截屏工具等等。只需要你去下載一個UEFI shell的.efi文件,放入ESP分區中,用efibootmgr建立啟動項就可以進入了。