首先我们来看下以下别人博客的解决方案:

第一种情况:

是由于grub中的grub.conf文件损坏,开机后直接进入到了grub>命令行模式下。下面将图解此过程

wKiom1MXKoyjpCjVAADEN5fwqXw987.jpg

这时可以使用help看一下grub可支持命令有那些,以便供修复时使用。

wKiom1MXKsbjB6baAAJ1Xc42J9M621.jpg

第二个使用的命令是find (hd0,0)/按tab如果能补全就表示系统在此分区上。

wKiom1MXK36DvDoGAAIbiHuUi88649.jpg

各个参数说明:

wKioL1MXK-eThXRFAAKnDDyJR_Y288.jpg

这时要注意,当你指定内核后,但未指定内核后面的参数(ro root=(此处未指定的话))将无法正常启动,报:请给root参数,一般情况下是系统是可以自动探测到,但这个功能并不靠谱,那么只能靠备份或你的记忆将参数补上(所以定期备份/etc/fstab、与grub.conf、是多么重要的事情,原因你懂的。)注释:root=/dev/sd?  指向的是根目录的挂载分区,这个也我实验中不成功的地方,一定要在系统中备份自己的fstab文件!!

注意:其中initrd 下有两个文件 initramfs -xx.img和initrd-2.XXkdump.img(这个是系统崩溃的是储存机制,不要选取。不是系统文件。本人在这个地方失败多次!!)

如下图:

wKioL1MXLBeizgyoAAKVMterepY227.jpg

而这时就看到你平时的习惯了,备份相当重要

wKioL1MXLJXwsz4nAAEpT8AtNxQ079.jpg

当正常登录系统后,将grub.conf文件重新写就可以了。(上图的完整路径是root=/dev/mapper/vg_www-lv_root,写全了就看不到了,所以在此特别说明)(原作者做了lvm盘。所以他的位置是vg_www_lv_root)

wKiom1MXLYCyjSxIAADAJHyLQUs934.jpg

看到title了吧

wKioL1MXLfOwX7fNAAB9R82I784906.jpg

过了下面这张图就说明系统是可以正常启动了

wKioL1MXLlWAuDu3AAFHH-wWsQo362.jpg

第一种情况顺利解决!a_c

第二种情况:

grub损坏(最明显的提示为:Operating System not found)

如mbr数据损坏(注仅是bootloader损坏,分区表是好的),如果没有重新启动还可能修复,但是如果是重启后发现grub损坏,那么只能挂载光盘进入紧急救援模式。(以下将以挂载光盘说明)

wKiom1MXNcTCmwTFAADsm7LBJOU882.jpg

dd执行之后的景象,是不是好惊悚a_c

wKioL1MXLm3Q_71jAADt30SMzuA822.jpg

挂载光盘进入紧急救援模式,在BIOS中将光盘设置为第一引导设备。

wKiom1MXLsyjvrM6AADCUR4Jh1U127.jpg

在菜单中选择"Rescue installed system"

wKioL1MXLtDBLcnFAAC8ueZ0qjg965.jpg

之后将对:语言----》键盘设置

wKioL1MXLzXg49moAADFHAkco-o077.jpg

是否启用网络(不需要,则No,如果选择了Yes将要求选择获取IP地址的方式)

wKiom1MXL3Ci_1ITAACM0ZGAkIA079.jpg

正式进入救援模式

wKioL1MXMBXh_cz1AAJG4RTs3mM693.jpg

原系统己经挂载的位置,如何切换到原系统下

wKiom1MXMKyyyaEBAAEpg-DTDcs633.jpg

开启一个shell

wKioL1MXMN2RUKWbAACJ4NoiYuc323.jpg

切换到原系统

wKioL1MXMP3iVQdAAADB18Dyz5U401.jpg

这时可以直接输入grub命令进入grub中(这个grub是光盘中的)

wKiom1MXMWnxkwqgAAD40fddNuc703.jpg

直接使用 help  setup会显示setup的使用方法。

设置root(root默认分区)如(hd0,0),此分区一定要root所在的系统分区,之后使用setup安装,命令是setup(hd0)(由于mbr并属于分区,所以将grub安装到hd0设备即可),如果是成功了会有succeeded提示。quit退出即可

wKiom1MXM1TTuJYDAAHdrvIlI_c478.jpg

重启系统,取出光盘,有如下信息就表示修复完成

wKioL1MXM3jTAMqdAADzkCznYyw370.jpg

如果grub目录都损坏,无法正常启动。或者你进入系统了 从别的服务上拷贝了grub.conf 。重启系统是不行的。一定要修改kernel /vmlinuz-XXX.XXX ro root=uuid=中的uuid值 每个值都是不一样的。(用blkid)

一篇的文章也可以借鉴下:

首先来看一下/boot/grub/menu.lst中的内容:

==========================================================

# grub.conf generated by anaconda

#

# Note that you do not have to rerun grub after making changes to this file

# NOTICE: You do not have a /boot partition. This means that

#          all kernel and initrd paths are relative to /, eg.

#          root (hd0,0)

#          kernel /boot/vmlinuz-version ro root=/dev/hda1

#          initrd /boot/initrd-version.img

#boot=/dev/hda

default=0

timeout=5

splashp_w_picpath=(hd0,0)/boot/grub/splash.xpm.gz

hiddenmenu

title Fedora Core (2.6.18-1.2798.fc6)

        root (hd0,0)

        kernel /boot/vmlinuz-2.6.18-1.2798.fc6 ro root=LABEL=/ rhgb quiet

selinux=0

        initrd /boot/initrd-2.6.18-1.2798.fc6.img

title Windows XP

rootnoverify (hd0,3)

chainloader +1

===========================================================

其中:

1,default=0

表示默认启动的第0号的操作系统,在GRUB中,title定义了启动的操作系统,从第1个开

始,GRUB中是0,而第2个是1,依次类推...

2,timeout=5

表示的是出现GRUB界面后,无操作情况下进入default设定的操作系统的时间,如果上下

移动选择,则该选项无效

3,splashp_w_picpath=(hd0,6)/boot/grub/splah.xpm.gz

表示的是允许出现的GRUB背景的path,显然(hd0,6)指定了分区(不知能否这么解释,呵

呵),而后边的则是正常的path(在例子中,用#把它注释,为一可选项)

4,hiddenmenu

表示隐藏GRUB的启动菜单,直接进入由default庙宇的操作系统中去,为一可选项.

linux类

其格式一般为:

title (......)

root (hd[0-n],x)

kernel (......)

initrd (......)

其中:

title行,是定义一个启动操作系统,而后边可以自己随便写上喜欢的名字,呵,当然最起

码你得写得要自己能认出来,没必要把linux写成windows吧?!

root行,指定相应的linux所有的/boot,如果在写分区和挂载时没有单独挂载,那么就和

/在同一个分区中,hd[0-n]表示的是第几个硬盘,而x则表示的是[第几个分区-1],即x比

分区号小1,特别要注意.

kernel行,在这里以kernel 起始,指定Linux的内核的文件所处的绝对路径(通过在终

端输入命令:ls /boot/vmlinuz*来看内核的全名);因为内核是处在/boot目录中的,

而如果/boot是独立的一个分区,则需要把boot省略,因为 /boot所在的分区在root

(hd[0-n],x)中指定了,所以就无需要再指明内核处在哪个分区了;ro 表示只读;

root=LABEL=/ 来表示Linux的根所处的分区。LABEL=/ 这是硬盘分区格式化为相应文

件系统后所加的标签;如果您不了解什么是标签,也可以直接以/dev/hd[a-z]X 或

者/dev/sd[a-z]X来表示;就看您的Linux是根分区是在哪个分区了。比如我的是

在/dev/hda3, 那这里就可以写成root=/dev/hda3;

initrd行,如果是/boot独立一个分区,initrd 一行要把/boot中省略;如果/boot不是

处于一个分区,而是和Linux的/分区处于同一分区,不应该省略;我们通过查看/boot

中的 initrd的文件名到底是什么来写这一行代码,在终端输入:ls /boot/initrd*

很容易能得到initrd文件名,然后写入.

在了解了以上情况之后,我们就很容易地理解另一种写法了:

title (......)

kernel (hd[0-n],y)(/boot)...... ro root=..(根目录的位置)....

initrd (hd[0-n],y)(/boot)......

其实只是省略的root很实在地写在了kernel和initrd行中去了而已

附:

其 实在GRUB启动菜单不能工作的时候,进入GRUB命令行(可按CTRL+C键)后,我们同样可

以一步一步地把系统启动起来,其实在menu.lst中, 除title不是指令外,其余的都是

GRUB指令,我们只要一步步地输入它们(错了要从新开始),中间输入关于kernel和

initrd要利用TAB键补齐写好,最后只要boot一下就行了.

用GRUB指令引导windows:

GRUB> rootnoverify (hd0,0)

GRUB> chainloader +1

GRUB> boot