linux中grub文件丢失或者错误解决方法
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux中grub文件丢失或者错误解决方法相关的知识,希望对你有一定的参考价值。
首先我们来看下以下别人博客的解决方案:
第一种情况:
是由于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/hda
default=0
timeout=5
splashimage=(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,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 +1
GRUB> boot
以上是关于linux中grub文件丢失或者错误解决方法的主要内容,如果未能解决你的问题,请参考以下文章