现在的位置: 首页 > 综合 > 正文

修复”The symbol grub xputs not found”问题

2014年02月12日 ⁄ 综合 ⁄ 共 2193字 ⁄ 字号 评论关闭

 

闲来无事,把自己的ubuntu系统从10.04升级到了10.10。升级的过程非常的顺利,一切就绪后重启,杯具了,启动到Grub界面的时候黑了,出现了一行 "The symbol grub xputs not found", 紧接着就是 "grub rescue>" 和一闪一闪的光标,提示着系统进不去鸟。

我当时就傻了,grub在我毫无反应的情况下挂了。可是想想不对啊,自己前不久才将公司的机器升级,怎么自己的电脑就杯具了呢?想来想去,公司和家里的电脑唯一的区别就是grub版本不同。公司的是grub,而家里的则是grub 2。看来,问题是出在grub 2上了。

可能很多人已经听说过grub 2的大名。一个引导程序,现在已经像一门语言了。自打把它升级之后就从来没有认真的研究过,看来这家伙是要给我来个下马威了。不行,系统还是要进的,所以立刻用另外的电脑上网,google。一个小时之后,问题解决(本来差不多20分钟左右就可以,可惜绕弯路了)。下面把这次的问题解决办法记下来,万一下次需要呢。

我使用的方法是从LiveCD重新安装Grub 2。当然这个方法需要你手中有LiveCD,否则的话,待会儿再说。

  • 利用LiveCD启动电脑,选择Try it 。。。 那个选项进入光盘上提供的那个系统。
  • 启动终端(控制台),就是那个背景是黑黑的,可以输入命令的那个。
  • 这一步是用来寻找你的系统分区的。如果你知道的话,这步可以跳过:
输入 "fdisk -l" (是L的小写,不是1),找格式是ext3/ext4的,这个就是你的Linux分区。然后看着它的block大小来回忆,那个是你的根节点(就是 "/" 挂载点)。
特别注意:回想一下你是否当年在安装系统的时候单独分出了/boot节点,判断这个的方法有两个,第一是回忆当年安装系统的时候,在分区时是否专门设置过 "/boot" 挂载点;第二,就是看看刚才查询的结果中是不是有一个100M左右大小的ext3/ext4的block,如果有的话,很有可能就是了。
  • 挂载我们找到的分区:
sudo mount /dev/sdXY /mnt
解释一下上面的sdXY,这里X代表a,b,。。。而Y代表1,2,。。。合在一起就是代表sda1,sda2,sdb3,。。。。,这个是根据你上一步中找到的根节点而定的。
另外,还有一个重要问题就是,如果在上一步中,你想起了你的 "/boot" 单独创建过的话,那么你还需要将它挂在上来:

sudo mount /dev/sdXY /mnt/boot
这里sdXY是指你的/boot分区,别搞混了。

  • 挂载完之后,打开你的/mnt和/mnt/boot看一下,是不是你的系统,不是就老老实实的在回想回想。是的话就下一步。
  • 执行下面的语句重装grub 2:
sudo grub-install --root-directory=/mnt /dev/sdX
再解释一下,这里sdX的X是指a,b,。。。如果你的引导盘是sda的话,那么上面就是sda,以此类推。

  • 最后卸载我们上面的挂载点:
sudo umount /mnt/boot                   //如果你执行/mnt/boot的挂载了,那么先卸载它
sudo umount /mnt

  • 重启

执行完上面这些之后,我的电脑可以正常引导了。我希望你的也是,祝你好运。

接下来就说说我那该死的弯路。当年装系统的时候(貌似是还是7.10的时候吧,谁让Linux系统这么健壮来着,要是windows我早重装好几遍了,也不至于记不住)我单独创建了/boot,但是在执行上面的步骤时我给忘了,结果在没有挂在/boot的情况下执行了grub-install,结果就是 "/dev/sda does not have any corresponding BIOS drive"。再重启时,"grub rescue>" 没有了,只剩下了 "grub",彻底不能引导了。

如果各位有谁和我一样,那么今天你是来着了,这里附带了这个问题的解决方法:

  • 依然用LiveCD启动电脑,还是选择Try it。。。那个进入光盘提供的系统。(这里看到LiveCD的强大了,所以随手备一张,就是重装也有办法阿)
  • 依旧打开终端(控制台)。
  • 输入:
sudo grub
这时终端上应该提示 "grub>" ,这样我们就进入了grub。
  • 寻找我们的mbr装在了什么地方。
find /boot/grub/stage1
(hd0,3)                                               //这是我的执行结果,你们的可能不一样

  • 利用上一步找到的结果来设置mbr。
root (hd0,3)
强调一下,root后面括号里的东西要看你上一步执行的结果,千万别搞错了。如果搞错了,就白整了。
  • 最后写入mbr。
setup (hd0)
注意,这里写入的是整个硬盘,不需要加入分割表。
  • 重启

这就是我折腾了一个小时的结果。在网上查找的时候,貌似不用LiveCD,直接在 "grub rescue>" 下修复的方法也有,但是我没有成功,所以我也就不好瞎编了。

Linux是个好东西,尤其是它的发行版Ubuntu,真的非常棒。可惜往往就是这些不起眼的小毛病吓跑了一群人,希望这个文章不但对我的将来有用,也会对各位有问题的人们起到一定的参考作用。

衷心感谢每一个为Ubunt和Linux社区做贡献的人们,尤其是一下的几篇文章,感谢作者,是你们的无私分享才能让我解决问题。

以下是参考文章:

  1. The Grub 2 Guide
  2. Grub2
  3. 修护 grub(mbr)

 

抱歉!评论已关闭.