1. 程式人生 > >win10 + Ubuntu16.04雙系統修復linux grub引導丟失

win10 + Ubuntu16.04雙系統修復linux grub引導丟失

1. 安裝雙系統

win10 + Ubuntu16.04 雙系統安裝流程:

  1. 首先安裝windows10;
  2. 安裝Ubuntu16.04 ,注意boot loader 選擇和win10的引導目錄;
  3. grub引導丟失:
    問題描述:
st=>start: Win10安裝完畢
while:
op1=>operation: 當Ubuntu系統安裝完畢之後,重啟電腦 
op2=>operation: 重啟電腦 順利進入grub引導
op3=>operation: 重啟電腦  選擇進入Windows10
ex=>exception: 順利開機之後重啟電腦 然後問題來了:“grub引導介面不見了,竟然直接開啟win10”。
if
exception solved: break elsecontinue 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啟動項。