Whirl_tech

  • 首页
  • 随笔
  • 技术分享
  • 关于我
Whirl Blog
Don't wait for inspiration Become it.
  1. 首页
  2. 技术分享
  3. 正文

Win10+Ubuntu18启动后一直进入grub命令行的问题(双硬盘,添加启动项后重启失效)

2019年7月19日 3216点热度 10人点赞 1条评论

说明

这是之前在简书写的一篇文章,由于最近博客刚刚建立,将此文章搬运过来。

前言

最近这段时间又有兴趣开始使用Ubuntu系统了,但之前为了和某些学长项目统一,使用的是Ubuntu14.04。最近Ubuntu18.04出了之后,就想着重新装一个Ubuntu系统(其实也是之前ubuntu14是刚接触ubuntu时安装的,配置很乱想重新开始),但在安装完后遇到了启动就进入grub命令行的问题。按照一些网上的教程安装Win10,ubuntu16.04 LTS双系统 莫名进入grub命令行 - CSDN博客,我成功进入了ubuntu系统,但重启之后发现又出现了命令行,这与教程中的结果不一致。后来研究了一下,发现了我的问题,记录在此,可能会对一些人有帮助。

安装过程简介

我是采用rufus制作的启动盘,因为我的BIOS中选择boot启动项时,只能添加.efi文件作为启动项,因此说明主板是支持BIOS的,所以rufus中的分区方案选择的是支持GPT分区。因为我的笔记本是SSD+机械硬盘,所以我在机械硬盘上预留了80G的空间用来安装ubuntu。然后就是照常进行安装,挂载分区有/,/home,/boot,交换空间,这些具体大小按照个人喜好来分配,网上也有很多教程(这步的教程还算靠谱)。然后在分配完后,最底下会提示安装启动引导器的设备:

(这并不是我安装时的画面,是我在网上找的,关键在最底下这行)

在这里,为了防止我以前的windows启动项被刷掉,我选择了安装在挂载/boot的设备下,但与上面这幅图不同的是,因为我是将ubuntu安装在机械硬盘下,所以/boot分区也会在机械硬盘中,但它并不是efi类型的分区,然而grub因为选择了是UEFI引导,就会安装到efi分区,因此就出现了grub安装与boot启动分离的原因,进而grub无法找到启动项。

问题分析

首先要知道为什么会出现这个问题,否则就会像我一样在网上找了很多教程结果却没有任何效果。根据安装过程我们可以知道,问题大概就出在我的硬盘并不能够支持efi启动,但我却安装了efi启动的ubuntu导致。我在安装之前就想到了这个问题。

根据Windows10+Ubuntu18.04双系统安装成功心得(理清网上杂乱无章的教程) - CSDN博客,可以先对自己的硬盘有初步的印象。我硬盘的情况如下:

磁盘0为SSD,磁盘1为机械硬盘,可用指的是没有被分配的空间

可以看到只有SSD才是GPT分区,因此我需要把ubuntu启动项安装在此。进入BIOS后也发现了boot启动项只能在SSD的范围内找到。所以最简单的解决办法就是给SSD中分配一个单独的空间,作为ubuntu启动点,但很可惜我电脑中对C盘的可压缩空间为0。

那么现在就应该能够理清问题了:

1.BIOS中需要UEFI启动,并且启动项只能够在磁盘0(SSD)中

2.ubuntu安装在机械硬盘中,/boot也被安装在机械硬盘中

3.ubuntu自动安装grub到了efi分区中,也就是磁盘0,grub无法再磁盘0中找到相应启动项,因此会进入rescue模式

那为什么在rescue中输入命令就能够正常启动ubuntu呢?这是因为人为的指定了启动路径,这样grub就能够找到启动点。

那么问题又来了,为什么重启之后就又会重新进入rescue模式呢?

这就要理解教程每一步的意义了。在最后两步,我们运行了

sudo update-grub

...

sudo grub-install /dev/sdb7

因为我将boot挂载在/dev/sdb7中,所以把grub安装在此。但是这其实并没有更新grub,因为刚刚说到了,BIOS只会找SSD(磁盘0,ubuntu中为sda)中的启动项,而sdb是磁盘1,也就是在机械硬盘中,就算写出花来,BIOS还是找不到改正后的grub.efi,而还是会启动最原始的存在磁盘0的那个grub,然后报错找不到。

问题解决

知道了问题所在,那解决起来就很简单了,只要把SSD中的grub.efi换成更新后的efi不就ok了吗?事实也正是如此。不过还是有两个坑。

1.efi启动分区受系统保护,需要使用root挂载这个分区

2.修改grub.cfg这个文件

先说第一个问题。这个问题很简单,先用sudo passwd命令更改当前密码,这样root密码就和改后密码一致,然后su root进入root用户,强制挂载efi启动分区。我的电脑中,是

mount /dev/sdb1 /boot/efi(某个文件夹)

注意这个挂载到哪是无所谓的,不一定非要挂载在/boot下,完全看个人喜好。进入到挂载路径后,应该能看到一个文件夹叫做EFI,再打开后:

会看到类似于上面的启动项,那个Microsoft就是win10的启动项,ubuntu是我自己建的目录,那个最原始的就是grub文件夹,为了保险,我没有删除原来的,而是在自己建的目录下把原本在/dev/sdb7中更新过的文件拷贝过来:

 

在执行了grub-install后,就会出现x86-64-efi这个文件夹

把x86-64-efi文件夹中与efi启动有关的项目拷贝到刚刚说的ubuntu文件夹中,这样更新后的文件就能够被BIOS找到了,然后只要在BIOS中添加了这个启动项(如何在BIOS中添加启动项每个电脑具体操作不同,所以不提供教程),再重启后就能正常引导了!

但等等,为什么有些人还是不能够成功?这就是我刚说了还有第二个问题,我个人觉得比较奇葩,应该比较难遇到。那就是在更新了grub.cfg后(运行sudo update-grub就会更新),我打开看了一下其中的内容

 

grub.cfg

这是就是grub可视化菜单的代码表示,注意set root='hd2,msdos7'这行,上图是我更改后的结果。在之前默认的是'hd1,msdos7',但是根据教程安装Win10,ubuntu16.04 LTS双系统 莫名进入grub命令行 - CSDN博客,进行查询后,只有hd2有第七个分区,说明我的/boot分区也就是/dev/sdb7在grub中显示的是(hd2,msdos7),所以需要把grub.cfg中与ubuntu引导有关的都改成hd2,msdos7。注意你应该用ls命令查到自己/boot对应的是哪个分区,然后看是否与grub.cfg中设置一致。

至此,就解决了所有问题,我第一次写博客,可能会写的不清楚,如果有疑问或者我写的不对的地方,可以写到评论中,也可以直接给我发邮件:1225775433@qq.com

欢迎光临Whirl的赛博寒舍!

填写下方的邮箱地址,将在有新文章时进行邮件通知

可以随时通过邮件管理取消订阅

检查您的收件箱或垃圾邮件文件夹以确认您的订阅。

标签: Ubuntu
最后更新:2020年8月13日

whirlhack

欢迎光临赛博寒舍!

打赏 点赞
下一篇 >

文章评论

  • RY

    :huaji2:

    2019年7月19日
    回复
  • razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
    回复 RY 取消回复

    最新 热点 随机
    最新 热点 随机
    「世界作为参考答案」摘抄 「大同」2025-清明 2024旅行-旧金山 2024国内旅行 「底特律Detroit」新年旅行 vol.2 「土耳其Turkey」新年旅行 vol.1
    「世界作为参考答案」摘抄
    「世界作为参考答案」摘抄 「西藏」vol.4-Lhasa CityWalk 「西藏」vol.2-林芝 「Paper Flash」2021年11月(上) 「Paper Flash」2021年9月(试运行) 《刘擎西方现代思想讲义》

    COPYRIGHT © 2024 Whirl_tech. ALL RIGHTS RESERVED.

    Theme Kratos Made By Seaton Jiang

    京ICP备17009918号

    京公网安备 11010802029426号