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 22:47
下一篇 2017-09-03 22:56

相关推荐

  • 免费翻墙 [精]

    本人在hostus上买了一个国外的vps,花了一上午把Google给做好,可以访问g.abcdocker.com进行搜索,因为是使用nginx代理进行翻墙。网上的文章也很乱,很不好整理。 可以可以使用g.abcdocker.com上Google查阅资料。(无法观看视频) www.abcdocker.com

    2017-06-17
  • 文件的元数据有那些,怎么样查看和修改文件时间戳

    数据(Metadata),又称中介数据、中继数据,为描述数据的数据(data about data), 主要是描述数据属性(property)的信息,用来支持如指示存储位置、历史数据、资源查找、文件记录等功能。 元数据算是一种电子式目录,为了达到编制目录的目的,必须在描述并收藏数据的内容或特色, 进而达成协助数据检索的目的。元数据就是数据的数据。任何文件系统…

    Linux干货 2017-08-28
  • Linux之磁盘管理

    Linux之磁盘管理       linux系统中, 一切都是文件, 而这些文件都是存储在磁盘中, 因此对于磁盘的管理是非常重要的, Linux磁盘管理的好坏, 直接关系到整个系统的性能问题, 本文主要介绍了磁盘结构, 分区类型, 管理分区, 管理文件系统, 挂载设备, 管理虚拟内存这几大项的内容.    &…

    Linux干货 2016-08-29
  • 【N25第五周作业】find命令以及相关练习

    find: 实时查找工具,通过遍历指定起始路径下文件系统层级结构完成文件查找; 工作特性: 查找速度略慢; 精确查找; 实时查找; 用法: find [OPTIONS]  [查找起始路径]  [查找条件]  [处理动作] 查找起始路径:指定具体搜索目标起始路径;默认为当前目录; 查找条件:…

    Linux干货 2016-12-27
  • HTTP响应连接介绍

    HTTP即超文本传输协议,web站点的实现就是基于HTTP协议得以实现。本文将详细讨论HTTP。 1. HTTP协议版本: HTTP从诞生到现在一共有如下几个版本: HTTP 0.9:是最早的版本,为HTTP的原型版本,其功能非常简陋; HTTP 1.0:此版本增加了很多新特性,如cache,method,MIME等,MIME的出现让网页不再是单纯的纯文本界…

    2017-05-31
  • Mysql之主从复制

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

    Linux干货 2016-07-19