win10 + Ubuntu16.04双系统修复linux grub引导丢失

  • 安装双系统
  • 引导修复
    • 1 在Ubuntu中将引导记录写入 boot
    • 2 一波三折grub中的win10启动项又丢了

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 #更新设置
root@geolike:/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启动项。

你可能感兴趣的:(linux)