Linux系统启动过程中grub故障与修复(一)

   GRUB 是引导装入器 -- 它负责装入内核并引导 Linux 系统。GRUB 可以引导多种操作系统,如Linux、 DOS、 Windows 。
   GRUB共分为三个阶段:stage1主要负责BIOS和GRUB之间的交接,载入存放于各个分区中的开机文件;stage1.5是连接stage1和stage2之间的通道,起着过渡的作用,负责识别stage2所在/boot分区的文件系统,以便进入stage2;stage2是grub的核心部分,在这个阶段完成加载内核、加载根文件系统驱动、挂载根等工作。

1 破坏grub第1阶段

这里写图片描述

如图所示,用hexdump命令查看/dev/sda的mbr,即/dev/sda的前512个字节。mbr的前446个字节保存了与启动相关的信息,即grub的第一阶段。

这里写图片描述

使用dd命令将mbr的前446个字节清0,dd命令用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转换:
if=[STDIN],即输入设备或文件
of=[STDOUT] ,即输出设备或文件
bs指定每个块的大小,默认以字节为单位
count指定块的个数
skip指定跳过多少个块之后再输入
seek指定跳过多少个块之后再输出
dd if=/dev/zero of=/dev/sda bs=1 count=512表示用0设备将/dev/sda的前512个字节覆盖,即清0。
    清0后用hexdump命令确认,如上图,前446个字节已全部为0,清0后重启。

这里写图片描述

这里写图片描述

由于破坏了第一阶段需要用到的mbr前446个字节,所以系统认为硬盘已经不具备引导功能了,就不用硬盘启动了,而是直接进入到光盘启动界面。为了修复被破坏的第一阶段,需要进入光盘救援模式,即Rescue installed system。

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

此步骤是在询问是否同意将系统挂载到/mnt/sysimage,选择continue即可

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

开启shell,如图所示。此时/mnt/sysimage是系统的根,进入/mnt/sysimage下就可以看到原来硬盘的根下的内容。接下来使用grub install命令进行修复。

这里写图片描述

直接执行grub install报错,是因为在救援模式的/mnt/sysimage下没有grub相关命令,需要使用chroot命令切根,切根后使用操作系统自带的grub命令进行修复。

这里写图片描述

这里写图片描述

grub install /dev/sda 开始进行修复,修复过程中可能会报错:Unknown parttition table signature 未知的分区表签名,忽略即可,不影响修复结果。
    注意:grub install命令后需跟某个硬盘,不能跟具体的分区,因为mbr在硬盘的第一个扇区,不属于任何一个分区。

这里写图片描述

如图,修复成功。修复完成后,用sync将操作同步到磁盘。

这里写图片描述

用hexdump查看mbr,可发现前446个字节已写入了新的内容。

这里写图片描述

grub install不仅能够修复第1阶段的相关内容,也可以修复第1.5阶段和第2阶段的内容,如图所示,在/boot/grub下产生了第1.5阶段和第2阶段的相关配置文件。修复完成后重启即可。

2 破坏第1.5阶段

这里写图片描述

第1.5阶段位于mbr后硬盘上的一小段空间,也不属于任何分区。同样可以使用dd命令将1.5阶段清0,为了不破坏第一阶段,需要跳过第一阶段所处的前512个字节,清0后使用hexdump命令进行确认。

然后重启,观察能否启动。 
这里写图片描述

这里写图片描述

如上图,可以发现,与破坏1阶段后的启动界面不同,刚才破坏了1阶段后,直接进入到了光盘启动界面,因为系统认为硬盘没有启动功能了,不可引导了,所以直接用光盘启动了,而这一次由于并没有破坏第一阶段,所以系统认为硬盘仍然可引导,就用硬盘进行引导,但由于1.5阶段被破坏了,所以就卡在这个地方,无法进入到2阶段。修复1.5阶段仍然需要进入到光盘救援模式,按任意键进入下面的界面。

这里写图片描述

按ESC进入Boot Menu,以进入到救援模式中。

这里写图片描述

这里写图片描述

进入救援模式的过程与第1阶段类似,此处不再赘述。
  开启shell后,使用grub命令进行修复,同样需要切根。

这里写图片描述

这里写图片描述

grub是交互式命令,输入grub后进入交互模式,使用root(hd0,0)和setup(hd0)即可完成修复。
   root(hd#,#)hd#表示boot分区所在硬盘是系统的第几块硬盘,hd即hard disk硬盘,hd0表示第一块硬盘(之前用sda表示第一块硬盘);第二个#表示boot分区在该硬盘上的第几个分区;
   setup(hd#)表示将grub安装在哪个分区上。
   注意:此操作需依赖/boot/grub下的一些文件,若没有这些文件,会导致修复失败。

这里写图片描述

修复完成后,用hexdump命令可以看到mbr后1.5阶段已不再为0,即已经写入了有效内容。

这里写图片描述

修复完成后重启即可。

原创文章,作者:以梦为马,如若转载,请注明出处:http://www.178linux.com/86167

(1)
以梦为马以梦为马
上一篇 2017-09-03
下一篇 2017-09-03

相关推荐

  • 跟着vimtutor走来认识vim

        一、前言        VIM是一款在vi上进行改进的功能性强大的,开源的文本编辑器。     二、vim的设计理念     vim的设计理念是组合;       命令组合:类似于linux的由一个个单一功能的程…

    Linux干货 2016-05-13
  • 系统进程管理

    ps 查看系统进程命令 启动进程的方式:     系统启动过程中自动启动:与终端无关的进程;     用户通过终端启动:与终端相关的进程; 选项:         a:所有与终端相关的进程; &nbs…

    Linux干货 2016-09-06
  • Mysql之主从复制

    Mysql之主从复制 节点一 修改配置文件设置唯一ID开起二进制日志 [root@node1 ~]# vim /etc/my.cnf 增加以下内容     [mysqld]     log-bin=master_bin &nbsp…

    Linux干货 2016-07-19
  • 马哥教育网络班22期+第三周课程练习

    1、列出当前系统上所有已经登录的用户的用户名,注意:同一个用户登录多次,则只显示一次即可。 [xw@localhost ~]$ who | cut -d' ' -f1 | uniq xw root 2、取出最后登录到当前系统的用户的相关信息。 [xw…

    Linux干货 2016-09-01
  • Elasticsearch 5.0 集群

    IT运维 www.chinasa.net 下载地址:https://www.elastic.co/downloads/elasticsearch 1、JDK 安装略过 node1 部署 2、Elasticsearch安装 #tar zxvf elasticsearch-5.0.0.tar.gz -C /opt/ #cd /opt #mv elast…

    系统运维 2016-12-27
  • 玩转Nginx之一:基础概念

    Nginx web服务器:http协议 http协议:html,MIME(多用途互联网邮件拓展) major/minor text/html,text/plain,image/jpeg web资源:URL(scheme://server:port/path/to/source) 方法:GET,HEAD(相应首部)读取资源 POST提交表单 PUT上传数据 D…

    Linux干货 2016-10-29