win7 +v Ubuntu 16.04 grub rescue 模式下修复 grub

时间:2022-06-17 07:01:36

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

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

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

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

  进入 Ubuntu 时,画面如下: 

win7 +v Ubuntu 16.04 grub rescue 模式下修复 grub



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

Shell代码  

ls  



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

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

Shell代码  

ls (hd0,msdos1)  

ls (hd0,msdos2)  

ls (hd0,msdos3)  

#......  

  执行结果如下: 
 

 

 

  执行完之后,发现 (hd0,msdos5)和(hd0,msdos6)是 Ubuntu 的分区。然后分别执行如下命令,确定 grub 所在的分区: 

Shell代码  

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 引导画面: 

Shell代码  

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  

win7 +v Ubuntu 16.04 grub rescue 模式下修复 grub



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

win7 +v Ubuntu 16.04 grub rescue 模式下修复 grub



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

  重新执行上述的命令,进入 Ubuntu。然后在终端执行如下命令更新 grub: 

Shell代码  

sudo update-grub2