手撕开机grub-rescue问题

原文地址:html

http://52sox.com/linux-resolv...linux

在实际折腾Linux的过程当中,遇到grub-rescue问题是件很正常的事情。实际上这个问题,没有什么技术含量,可是要看什么场合。
记得以前教了某个MM玩Linux,主要也是工做须要吧。原本一切都是很美好的,但是下午却被一通电话吵醒了。电话的那头很着急的跟我说,她的电脑启动不了了,电脑启动不了的理由有千万种死法。因而我平静的问她,由什么提示或输出吗?
而后她跟我讲屏幕中出现了grub resuce的字样。对于这样的状况,不用说我都知道,她把某些东西给搞坏了。可是按照网上的教程却没法修复,因而详细询问后就有了这篇文章了。
实话说,grub2主要分为2个部分,一部分通常状况下写在MBR中,而另1部分写在某个分区的/boot/grub目录中。若是grub没有正确的被安装就可能会引起上面的问题。
对于这样的问题,咱们能够经过以下的方式来进行修复:shell

  • 找到Linux安装的分区ui

  • 进行临时grub的关联.net

  • 从新生成grubunix

下面咱们分别来进行说明。
在这里,要修改的Linux为Ubuntu 14.04版本,对于其余的发行版也是相似的。code

找到分区

咱们先在提示符grub rescue>下输入命令ls列出全部的磁盘分区信息,这里假设获得以下的结果:orm

(hd0),(hd0,msdos8),(hd0,msdos7),(hd0,msdos6),....

接着,咱们须要尝试列出某个分区上是否存在/boot/grub这个目录。对于Windows系统的分区来讲,会直接获得1个unknow filesystem的错误提示。换句话说,咱们须要进行以下的操做:htm

ls (hd0,msdosX)/boot/grub

在这里,X表明上面分区中获得的数字,好比msdos8中的数字8。
若是按照这种方式应该是能够找到对应分区的,这也是网上教程的方法,可是因为她的电脑中将boot分区单独进行了分区,所以使用上述的方式会出现1个对应文件不存在的提示。
所以,咱们须要将上述的方式修改成:blog

ls (hd0,msdosX)/grub

在这里,咱们去掉了boot目录,这样就能够搜索到对应的目录了。
对于在使用ls命令时提示文件不存在的状况咱们能够进行以下的操做:

ls (hd0,msdosX)/

进行关联

紧接着,若是找到了正确的grub目录后,咱们须要将其与grub关联起来,在这里,咱们主要经过set命令来进行设置操做,从而临时进行关联操做:

grub resuce> set root=(hd0,msdos6)
grub resuce> set prefix=(hd0,msdos6)

而GRUB的正常启动过程涉及到经过grub-install生成的核心镜像的环境变量prefix。而环境变量root主要用于从前缀中加载normal模块。
在这里,咱们假设正确的分区为(hd0,msdos6),咱们经过set命令设置其root和prefix都为该分区。以后咱们须要进行加载的操做了:

grub resuce> insmod normal
grub resuce> normal

在这里,normal命令会读取/boot/grub/grub.cfg文件并运行菜单。

从新生成grub

经过上述的方式咱们能够现实丢失的grub菜单了。此时不要高兴的太早了,所以这只是临时的关联,若是重启的话,这个问题仍是会再次出现的。为了解决这个问题,咱们须要进入Linux中从新生成grub来进行修改:

cat@cat-pc:~$ sudo update-grub
Generating grub configuration file ...
Found theme: /boot/grub/themes/deepin/theme.txt
Found background image: /boot/grub/themes/deepin/background.png
Found linux image: /boot/vmlinuz-4.4.0-2-deepin-amd64
Found initrd image: /boot/initrd.img-4.4.0-2-deepin-amd64
Found Windows 7 (loader) on /dev/sda1
done
cat@cat-pc:~$ sudo grub-install /dev/sda
Installing for i386-pc platform.
Installation finished. No error reported.

在这里,咱们假设使用的是deepin的发行版,而后使用update-grub从新生成grub菜单。最后再使用grub-install将其安装在硬盘上。
这样,咱们就完美的解决了开机启动时grub rescue致使没法正常启动的问题了。
若是某天某个MM向你咨询这个问题,不要吝惜这样的好机会,由于花不了你10分钟又能够拉近关系。

参考文章:

http://www.gnu.org/software/g...
http://blog.chinaunix.net/uid...

相关文章
相关标签/搜索