您的位置:首页 > 运维架构 > Linux

linux中grub文件丢失或者错误解决方法

2016-03-09 23:54 411 查看
首先我们来看下以下别人博客的解决方案:
第一种情况:是由于grub中的grub.conf文件损坏,开机后直接进入到了grub>命令行模式下。下面将图解此过程

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

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

各个参数说明:

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

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

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

看到title了吧

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

第一种情况顺利解决!a_c第二种情况:grub损坏(最明显的提示为:Operating System not found)如mbr数据损坏(注仅是bootloader损坏,分区表是好的),如果没有重新启动还可能修复,但是如果是重启后发现grub损坏,那么只能挂载光盘进入紧急救援模式。(以下将以挂载光盘说明)

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

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

在菜单中选择"Rescue installed system"

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

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

正式进入救援模式

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

开启一个shell

切换到原系统

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

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

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

如果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/hdadefault=0timeout=5splashimage=(hd0,0)/boot/grub/splash.xpm.gzhiddenmenutitle Fedora Core (2.6.18-1.2798.fc6) root (hd0,0) kernel /boot/vmlinuz-2.6.18-1.2798.fc6 ro root=LABEL=/ rhgb quietselinux=0 initrd /boot/initrd-2.6.18-1.2798.fc6.imgtitle Windows XProotnoverify (hd0,3)chainloader +1===========================================================其中:1,default=0表示默认启动的第0号的操作系统,在GRUB中,title定义了启动的操作系统,从第1个开始,GRUB中是0,而第2个是1,依次类推...2,timeout=5表示的是出现GRUB界面后,无操作情况下进入default设定的操作系统的时间,如果上下移动选择,则该选项无效3,splashimage=(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 +1GRUB> boot
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: