[转]grub rescue模式下启动并修复_马立杰_新浪博客

今天再次遇到grub修复问题,以前也遇到过一次。
我装的ubuntu 10.04和window 7的双系统,默认的系统启动项是Ubuntu。因为第一次装Ubuntu的时候只划了15G(对于长期使用Linux的人来说 o(∩∩)o...知道很小啦),于是就直接在windows系统下把装Ubuntu的那个分区删除了~~这下。。惨了,windows系统启动不起来了~~grub又不会修复,在网上找的东东又不管用。。当时真是无语了,然后就求助别的童鞋。用WINPE修复了grub。
我这个人不知道要求甚解,于是修好了就修好了~~继续玩去了~   
一个跟头不能栽两次,这次我想装meego系统,所以就又给windows分区了,这样由于window分区的碎片和Linux分区碎片不兼容,于是乎~~我再次进入到那个黑框框中~~敲神马命令都是"Unknown Command",除了ls~~列出了一些貌似分区的(hd0),(hd0,8)等等~~(当然啦`这是因为我当时不会嘛,而且grub rescue和grub的命令也不太一样麼)。。但是~~~这次。。我决定自己折腾一下,解决问题。。在网上找到一个所谓的完美解决方案~~但是结果是。。依然不行。。其实人家童鞋的解决方案是对的,只是不适合我的这种情况罢了。还有就是对于我这个对grub命令了解为0的菜鸟来说,照着他给的命令敲也不晓得是神马意思。。。。
不过还好啦,以前有学长给过一些很详细的grub基础教程的pdf,所以我就小学习了一下,如何在rescue模式下启动并修复grub,当然你也可以用当时你安装系统的光盘修复grub,在这里,我只简单的说一下如何在rescue模式下启动并修复呐~~好滴~~进入正题:(我嘚废话好多哈)


由于分区问题,启动时会自动进入grub rescue模式,一般会显示如下内容:
error: unknown filesystemgrub rescue >

一般只要grub核心文件还在分区内,我们就能由rescue模式转换到normal模式下,进而通过命令进入系统。
在rescue模式下,只有一下命令可用(我觉得最让我不解的是为什么木有help命令?为神马?是我不知道麼?):
set---设置变量值(同grub2命令)ls--- 列出当前的所有设备。 e.g:(hd0) (hd0,1) (hd0,8) (hd0,7) and so on这个命令可以有参数:ls / 列出当前设为root的分区下的文件ls (hd0,1)/ 列出(hd0,1)分区根目录的文件insmod --- 加载模块normal --- 进入正常模式(只有模块加载正确了才能进入normal模式)

因为在rescue模式下,木有search命令,所以我们就用ls命令来查看grub2文件处于那个分区
e.g: grub rescue> ls (hd0)/ error: unknown filesystem
我看了很多帖子,嗯,发现大家的grub2核心(core.img)文件都在(hd0,8)分区,不晓得是不是巧合(这个我木有深究阿),反正我的也是在(hd0,8)这个分区


ls (hd0,8)/                ls(hd0,8)/boot/          ls(hd0,8)/boot/gurb/    
这样确定了grub2的核心文件在哪里之后,我们就开始转换工作咯:

grub rescue> set(回车)                  prefix=(hd0,8)/grub                    root=hd0,8                             grub rescue> set root=hd0,8            grub rescue> set prefix=(hd0,8)/boot/grub       grub rescue> set(回车)                 root=hd0,8                            prefix=(hd0,8)/boot/grub              grub rescue> insmod /boot/grub/normal.mod  grub rescue> normal                  

通常情况下,当我们进入到grub启动菜单后,就直接可以选择进入系统。然后更新重建grub。
但是有些人可能会碰到这种情况,虽然进入了normal模式出现启动选择菜单,却依然不能进入系统,这是由于缺少加载内核的Linux命令,直接从菜单不能进入系统。(请直接进入下面操作,因为紧接着我有点跑题咯~如果你急着解决问题的话)
还有一种情况,就是你更新过内核,所以会像我的启动菜单一样会有很多个不同内核的启动项,由于我的本本装的是Ubuntu10.04+win7,默认系统启动项为Ubuntu,这样如果我要进Win7就必须跳过好几个内核启动项,多麻烦阿~~~手疼~~o(∩∩)o...
对此我的解决方法是把/boot/grub/grub.cfg中的其他Ubunut内核启动项用“#”注释掉。但是这样的问题就是一旦你更新了grub,那么其他的内核镜像又会被搜到,于是就又造成了so长的启动项选择菜单。
有学长说,可以用命令移除旧版本的内核镜像,不过这个,现在我暂时还木有去找。等知道了,再补上来~~
好吧,回到我们的进入正常模式加载Linux内核模块问题。我想对于上面我说的多个旧版本的内核镜像,这时候你就可以使用下面的操作,加载指定的内核镜像。

如果不能直接进入系统请继续下面的操作:

进入正常模式后,出现我们熟悉的系统启动项选择菜单,此时需要按c,进入命令行然后加载linux模块
normal grub> insomd /boot/grub/linux.modnormal grub> set root=hd0,8                          normal grub> linux /boot/vmlinuz-* root=/dev/sda8 (注:*是通配符哦,此处可以以tab键查看具体内核版本镜像)                                               normal grub> initrd /boot/initrd.img-* (同上)      normal grub> boot

boot启动系统后,打开终端,执行命令修复grub(建议以root用户登录吧,或者直接切换到root用户,这样操作方便些 )

root@wuyun:~# update-grub                         root@wuyun:~# grub-install /dev/sda              
注:
1.命令grub-install /dev/sda 是将grub装入第一硬盘的mbr,如果要装入第二硬盘的mbr则把sda改为sdb即可,第三第四分别为sdc,sdd等。至于要把grub装到那个硬盘的mbr上,根据自己的实际情况而定,主要是看要设置哪一块硬盘为启动盘,就把grub装到哪个硬盘的mbr上。
2.分区号例(hd0,8)单独使用时可以不加括号,在使用路径时必须加括号;
3.由于我在装Ubuntu 10.04时没有使用/boot单独分区,直接就一个/分区就完了,如果你使用了/boot单独分区了,那么就应该修改路径:
prefix=(hd0,8)/grub
insmod /grub/normal.mod
root=/dev/sda8 也要修改跟分区的分区号


1:1.Ubuntu Grub Rescue 双系统重装 Windows造成grub2被改写的修复
       grub4 Dos0.4.4    在Windows启动项上加上grub4dos启动(不多说了,看置顶贴),重启选择进入grub,在命令行下输入(/boot单独分区的去掉 /boot)
代码:
grub>find --set-root /boot/grub/core.img
grub>kernel /boot/grub/core.img
grub>boot
进入grub2菜单,进入系统后再执行
代码:
sudo grub-install /dev/sd?
Ubuntu Grub Rescue方法二 进入Livecd 后修复
引用:
sudo -i
mount 你的根分区 /mnt
mount 你的/boot 分区 /mnt/boot #如果有的话
#挂载你其他的分区,如果有的话
# 重建grub到sda的mbr
grub-install --root-Directory=/mnt /dev/sda

2:Ubuntu Grub Rescue由于root分区uuid改变造成的不能正常启动,只能进入grub rescue模式的修复
grub rescue>set  grub rescue>prefix=(hd?,?)
/grub  grub rescue>root=hd?,?  
grub rescue>set root=hd?,?  
grub rescue>set prefix=(hd?,?)/boot/grub  
grub rescue>set  
grub rescue>root=hd?,?  
grub rescue>prefix=(hd?,?)/boot/grub  
grub rescue>insmod /boot/grub/normal.mod  
grub rescue>normal  
这时就可以调出 /boot/grub/grub.cfg,修改相应uuid,
改到命令行下
grub>insmod /boot/grub/linux.mod  grub>set root=hd?,?  
grub>linux /boot/vmlinuz-*** root=/dev/sd??  
grub>initrd /boot/initrg.img-****  进入系统
hd?,? 是grub文件所在分区 sda? 是/分区。

3:grub模块和配置文件grub.cfg受损无法启动时修复
Livcd启动进入试用
引用:
sudo -i
mount 你的根分区 /mnt
mount 你的/boot 分区 /mnt/boot #如果有的话
# 挂载你其他的分区,如果有的话
# 重建grub到sda的mbr
grub-install --root-directory=/mnt /dev/sda
# 重建grub.cfg
mount --bind /proc /mnt/proc  
mount --bind /dev /mnt/dev  
mount --bind /sys /mnt/sys  chroot /mnt update-grub  
umount /mnt/sys  
umount /mnt/dev  
umount /mnt/proc



Ok~~Now we have already made it. Enjoy your OS~!

http://www.oschina.net/question/565065_68193
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

马立杰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值