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文件丢失或者错误解决方法的主要内容,如果未能解决你的问题,请参考以下文章

linux开机故障解决方法

/boot/grub/grub.conf丢失或错误造成的影响及修复

centos8内核文件和grub文件丢失或者损坏恢复

ARMv8 Linux内核错误处理过程分析怎么解决

centos7内核文件和grub文件丢失或者损坏恢复

CentOS7 修复GRUB 引导故障