Win10+Ubuntu双系统UEFI启动方式下GRUB消失直接进入Windows以及重装时grub-install致命错误解决方法

来源:互联网 发布:python 图片相似度 编辑:程序博客网 时间:2024/05/17 03:47

问题描述:

  双系统安装十分顺利,我是先装Windows再装Ubuntu,成功后开机可以看到Grub引导程序,看似已经成功但是进入Windows后再开机就看不见Grub引导程序,无论是你重启还是关机。重装Ubuntu发现一到安装grub-install时就fatal error,很多网上的解决方法几乎没用,自己摸索了下终于是解决了。

查阅了一些资料,首先确定两点:

1、Ubuntu在11.0后便已经支持UEFI启动

2、新版本的Ubuntu在Secure Boot开启的情况下也可以进入,但是最好把这关掉


原因分析:

  UEFI启动时需要有一个ESP分区(EFI 系统分区),这个分区的EFI目录下有三个目录(安装Ubuntu后),一个是BOOT目录,一个是Microsoft目录还有一个是Ubuntu目录。在windows下通过mountvol挂载ESP分区,就能看到此分区内容。UEFI方式时会找到BOOT目录下的bootx64.efi启动文件并运行。而Microsoft目录下有一个bootmgfw.efi,对比发现这两文件一样的,也就是说UEFI找到的bootx64.efi就是Microsoft下的efi文件,也就直接启动了windows而忽略了ubuntu。那ubuntu目录下有什么?cd后提示文件已损坏,无法在这里创建和拷贝文件,这就是ubuntu重装时一到grub-install就失败的原因,这片区域早已损坏!efi启动文件都找不到了,哪里还能启动grub?


解决方法:

  主要思路,找到grub启动程序,grubx64.efi,放到ESP分区的ubuntu目录下即可。


解决过程:

  先使用fdisk进行修复,修复后ubuntu目录下啥都没有了,但是可以正常建立、复制文件。

  ubuntu的启动靠grub,而咱们的ubuntu系统虽然启动不了,但是系统文件以及boot目录并没有损失,启动文件就在boot目录下。我们只需要利用u盘使用try ubuntu widthout install进入试用模式(Live CD模式,因为硬盘上的ubuntu已经不能启动了),通过终端的fdisk查看你的分区情况,找到你的boot分区位置和系统根目录位置,通过mount命令挂载到试用系统的mnt下,然后再将硬盘的ESP分区(在安装Windows时建立)也进行挂载,挂载的目的是进行访问以复制缺失的文件。

  在boot目录下的grub目录中有我们需要的一切,把x86_64-efi目录下的所有文件复制到ESP分区的ubuntu目录下即可,这样相当于添加了一个启动项。在开机时选择启动项时选择ubuntu启动项即可,当然你也可以通过其他方式将启动项默认设置为grub。注意该x86_64-efi目录下有一个后缀名为efi的文件,但名称不是grubx64这没关系,UEFI识别.efi不识别名称,你可以自己改成grubx64,这也是ubuntu安装时所做的。


总结:

  之所以直接进入Windows是因为ESP分区下的ubuntu目录损坏,为何损坏我也不知道,这也导致了重装ubuntu始终会在grub-install时出错。只需将装好的系统的boot/grub下的x86_64-efi下左右文件复制过去即可。

2 0