zoukankan      html  css  js  c++  java
  • Ubuntu 16.04 grub rescue 模式下修复 grub

     
      前几天整理了下电脑的分区,合并并删除一些分区,结果导致 grub 被破坏了,Ubuntu进不去了,启动后直接进入了 rescure 模式。后来又折腾了下,终于修复好了,现总结一下。

      先说一下我的系统环境,我是 Win7 + Ubuntu 16.04 双系统,先安装的 Win7,后安装的 Ubuntu。采用的是 Windows 引导 Ubuntu 的方式,使用的工具是”EasyBCD 2.3 个人版本“。Ubuntu 分区时,"/boot" 是单独分区的。详细分区情况如下:“/boot” 分区, “/” 分区, “swap 交换空间“。

      另外需要说明的,我在安装 Ubuntu 时,“安装启动引导器的设备”选择的是 "/boot" 所在的分区。

      下面正式开始详细说明解决办法:

      进入 Ubuntu 时,画面如下:


      首先,使用 ls 命令,找到 Ubuntu 的分区,执行 ls 命令后的结果如下:
    ls


      此时会看到硬盘上的分区情况,例如(hd0,msdos1),(hd0,msdos2)等等,其中 hd0 中的 0 代表第 1 块硬盘(硬盘号从 0 开始),msdos1 中的 1 代表第 1 个分区。

      然后依次调用如下命令,直到找到 Ubuntu 所在的分区,命令如下:ls (hdx,msdosy)
      其中 x 代表硬盘号,y 代表分区号。
      以我的机器为例,依次查看每个分区情况:
    ls (hd0,msdos1)
    ls (hd0,msdos2)
    ls (hd0,msdos3)
    #......
      执行结果如下:






      执行完之后,发现 (hd0,msdos5)和(hd0,msdos6)是 Ubuntu 的分区。然后分别执行如下命令,确定 grub 所在的分区:
    ls (hd0,msdos5)/grub
    ls (hd0,msdos6)/grub
    # 若 “/boot” 没有单独分区,需要执行如下命令(待验证):
    ls (hd0,msdos5)/boot/grub
    ls (hd0,msdos6)/boot/grub


      执行完之后,发现 (hd0,msdos5) 中,有 grub.cfg 文件。说明 (hd0,msdos5) 是我们要找的引导分区。

      之后,再依次执行如下命令,修复 grub 引导,并进入 grub2 引导画面:
    set root=(hd0,msdos5)
    set prefix=(hd0,msdos5)/grub
    insmod normal
    normal
    # 若 “/boot” 没有单独分区,需要执行如下命令(待验证):
    set root=(hd0,msdos5)
    set prefix=(hd0,msdos5)/boot/grub
    insmod normal
    normal


      执行完上述命令之后,就可以看到 Ubuntu 的 grub2 引导画面,可以正常进入 Ubuntu 了。


      不过你会发现,若重新启动电脑的话,问题依旧。那是因为我们还没有执行 grub 的更新命令。

      重新执行上述的命令,进入 Ubuntu。然后在终端执行如下命令更新 grub:
    sudo update-grub2
    sudo grub-install /dev/sda
      注意: /dev/sda 后面不要加分区号,例如 sda1,sda2 之类的。
      执行结果如下:




      至此,grub 终于的修复完毕。不过,此时若重新电脑的话,你会发现,启动时变成了 Ubuntu 引导 Windows 了。而修复之前是 Windows 引导 Ubuntu。

      为了解决这个问题,我用的方法是先进入 Win7,然后使用 ”EasyBCD“ 重新修复 MBR 从而解决了这个问题。

      操作方法很简单:启动 EasyBCD,选择左侧的 ”BCD部署“,然后选中右侧的 ”在MBR中安装 Windows Vista+的bootloader“,也就是默认的第一项,最后点击 ”编写 MBR“ 按钮。

      到这里,才算是直接的完成了 grub 的修复,并且可以用 Windows 引导 Ubuntu 了。
      ——————————————————————————————————
     
      在一般情况下,有人可能直接修改GRUB配置文件“/boot/grub/grub.cfg”,但使用“sudu vim /boot/grub/grub.cfg”发现提示这个是系统自动生成的文件,不建议直接编辑,而应该到“/etc/grub.d”和“/etc/default/grub”去修改。
      “/etc/grub.d”是操作系统菜单目录,一般由系统生成,我们无需修改,接下来就是修改“/etc/default/grub”文件了。使用“sudo vim /etc/default/grub”命令打开该配置文件。
      其中的“GRUB_DEFAULT=0”就是设置的默认启动项了。GRUB启动项是按照启动菜单依次使用数字进行索引了,起始数字为0。结合前面的系统启动菜单,我们可以看到,Windows8的启动项在第5项,因此这里我们就需要修改为4(因为第一项是从0开始的)
      修改完成,保存退出之后,还需要执行一下“sudo update-grub”来重新生成GRUB启动配置项。(修改GRUB配置之后,注意使用update-grub更新启动程序,否则修改将不会生效。)
  • 相关阅读:
    CSP-S2019游记
    SOJ 一句话题解整理
    CF547E Mike and Friends
    CF506E Mr. Kitayuta's Gift
    在windows环境下安装和使用Python(CPython)
    GeekGame2020_部分WriteUp
    php通过curl传输JSON对象
    Invalid datetime format: 1292 Incorrect datetime value
    解决 select2 开启 tags 不能输入中文的问题
    electerm 设置同步(Setting sync)
  • 原文地址:https://www.cnblogs.com/sddai/p/7214330.html
Copyright © 2011-2022 走看看