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

相关推荐

  • drbd+corosync+pacemaker

    存储分类: DAS:直接附加存储;例如ide,sata,scsi,sas等 NAS:网络附加存储;即文件级别共享存储;例如nfs等 SAN:存储区域网络;即块级别共享存储;例如ip-san,fc-san   共享存储选型比较: SAN性能优良,价格昂贵; NAS性能基于文件系统级别,性能低下; 因此,另一个DRBD诞生,全称为分布式复制块设备,Di…

    Linux干货 2017-11-13
  • LINUX 下正确关机方法

    Linux下正确关机方法 Table of Contents 1关机前 1.1观察系统使用 1.2通知在线使用者关机 2关机 2.1 sy 2.2 shutdo 2.3 rebo 2.4 ha 2.5 powero 3执行 3.1等级 3.2等级 1关机前准备 1.1观察系统使用状态 谁在线:who 联网状态:netstat -a 后台执行的程序:ps -a…

    Linux干货 2017-08-21
  • linux中的几种压缩工具

    文件压缩 compress 不能自动补齐 .Z -d 解压缩 uncompress zcat X.Z > X -c 将结果打印到屏幕上,配合重定向,不会覆盖原文件,但权限会变。 -f 默认不对硬链接数为2及以上的文件压缩,加上f,强制压缩指定文件,而其他同inode的文件硬链接数减1. -v 显示详细过程。 ———&…

    2017-08-11
  • N21天天第十二周课程练习

    1、请描述一次完整的http请求处理过程; 1、建立TCP连接 2、Web浏览器向Web服务器发送请求 3、Web浏览器发送请求头信息   建立连接后,客户机发送一个请求给服务器,请求方式的格式为:统一资源标识符(URL)、协议版本号,后边是MIME   信息包括请求修饰符、客户机信息和可能的内容 4、Web服务器应答…

    Linux干货 2016-10-31
  • N21沉舟11周作业

    1、请描述一次完整的http请求处理过程; (1) 建立或处理连接:接收请求或拒绝请求 (2) 接收请求: (3) 处理请求:对请求报文进行解析,并获取请求的资源及请求方法等相关信息 (4) 访问资源:获取请求报文中请求的资源 (5) 构建响应报文 (6) 发送响应报文 (7) 记录日志 …

    Linux干货 2016-09-26
  • shell脚本编程基础

    ★ 编程基础★ 脚本基本格式★ 变量★ 运算★ 条件测试★ 配置用户环境一.编程基础  程序:指令+数据  程序编程风格:      过程式:以指令为中心,数据服务于指令      对象式:以数据为中心,指令服务于数据  shell程序:提供了编程能力,解释执行&nbs…

    Linux干货 2017-03-28