win10 + Ubuntu16.04雙系統修復linux grub引導丟失
1. 安裝雙系統
win10 + Ubuntu16.04 雙系統安裝流程:
- 首先安裝windows10;
- 安裝Ubuntu16.04 ,注意boot loader 選擇和win10的引導目錄;
- grub引導丟失:
問題描述:
st=>start: Win10安裝完畢
while:
op1=>operation: 當Ubuntu系統安裝完畢之後,重啟電腦
op2=>operation: 重啟電腦 順利進入grub引導
op3=>operation: 重啟電腦 選擇進入Windows10
ex=>exception: 順利開機之後重啟電腦 然後問題來了:“grub引導介面不見了,竟然直接開啟win10”。
if exception solved:
break
else:
continue
e=>end: 結束
進入BIOS之後,發現Boot Order中的Ubuntu不見了,只剩下一個Windows Boot Manager(WBM)。上面的迴圈,進行了好幾次(汗)。
我這個桌上型電腦是惠普的,Product No. QV9999AV, BIOS版本是(K01,V02.90)
這個版本的BIOS很奇怪哦,跟別人的不太一樣,好幾個別人解決問題的功能(比如,選擇檔案新增EFI啟動項)他都沒有,略顯寒酸。還有一點要說明的是,我的硬碟分割槽表是GPT格式的,引導方式是EFI,不是MBR分割槽,不能用Legacy引導。所以不能用EasyBCD從在WBM中新增grub,因為EasyECD針對linux的引導方式是legacy的。
(這隻在這一種情況下適用,其他情況自行嘗試)
2. 引導修復
這個主機板的BIOS有一個功能可以從安裝的引導目錄中選取一個efi引導檔案進行啟動。
這樣就可以把linux順利找回來了。哈哈,當然沒有這麼簡單。在進入一次win10,再一次丟引導是分分鐘的事。
歷經千辛萬苦找到了解決方案:
2.1. 在Ubuntu中將引導記錄寫入 boot
這樣比在Windows中好操作,就是好操作,不解釋。
$ sudo efibootmgr -c -d /dev/sda/ -p 1 -L Ubuntu -l /EFI/ubuntu/grubx64.efi
-d /dev/sda -p 1 :表示的是引導分割槽所在的盤,我的是sda1, 可以通過fdisk檢視
-L Ubuntu :要新增的引導記錄的名字,這裡寫成Ubuntu
-l /EFI/ubuntu/grubx64.efi: 載入程式的location,linux一般使用grubx64.efi
這樣就順利在BIOS中添加了一條引導記錄。YEAH!完成!
檢視現有的啟動項:
$ sudo efibootmgr -v #每個啟動項都有一個序號
修改啟動項的順序,即Boot Order
$ sudo efibootmgr -o 0003,0001,... ... # 調整序號的順序就行
2.2. 一波三折,grub中的win10啟動項又丟了!
千辛萬苦找回了Ubuntu的入口grub,一不小心,不知道怎麼,又把grub中的win10給丟了。
在grub中新增win10的啟動項
$ sudo grub-install /dev/sda1
$ cd /etc/grub.d/
$ gedit 40_custom #在檔案中加入下面的內容
$ sudo update-grub #更新設定
[email protected]:/home/like# cat /etc/grub.d/40_custom
#!/bin/sh
exec tail -n +3 $0
# This file provides an easy way to add custom menu entries. Simply type the
# menu entries you want to add after this comment. Be careful not to change
# the 'exec tail' line above.
menuentry "Windows 10" {
set root='(hd0,1)' # 同樣的這裡的 (hd0,1)也表示引導分割槽所在的碟符
chainloader (${root})/EFI/Microsoft/Boot/bootmgfw.efi
}
重啟可以看到新加入的win10啟動項。