启动流程和故障恢复

2017-09-03  本文已影响0人  王永清88

centos6启动大体分为四部

一、POST加电自检
二、MBR引导
三、GRUB
四、加载内核
其中,MBR引导有三部分组成

  1. 446个字节为boot loader
  2. 64个字节为分区表
  3. 2个字节为标记位 即 (55 aa)
实验一:我们模拟对/boot/grub/*进行转移

把/boot/grub/移动到/app下
mv /boot/grub/
/app
把/app/grub.conf文件移动回/boot/grub/下
mv /app/grub.conf /boot/grub/
重启centos 6,我们发现系统可以正常启动。

由此证明:系统启动二阶段只有一个grub.conf文件是可以启动的

实验二:对系统启动第一阶段/dev/sda的前446(即boot loader)个字节进行破坏

破坏一阶段/dev/sda的前446个字节
dd if=/dev/zero of=/dev/sda bs=1 count=446
查看被破坏的二进制的文件
hexdump -C -n 512 /dev/sda
可以看出前446个字节都为0

1.png

重新启动centos6就会发现系统无法启动,系统默认是进入光盘模式启动,这时我们需要进入救援模式

进入救援模式后,我们使用df命令发现显示的根(/)不是我们系统原来的根(/),而系统原来的根(/)在/mnt/sysimage/下,需要切根操作,
chroot /mnt/sysimage
而被我们破坏的/dev/sda的前446个字节只需要一个命令就可以修复,那就是重新安装grub
grub-install /dev/sda
查看/dev/sda的前512个字节
hexdump -C -n 512 /dev/sda
发现前446个字节已经有内容了,即修复成功。

2.png

重启centos6发现可以启动成功。

实验三:破坏1.5阶段(即跳过/dev/sda的前512个字节之后破坏512个字节)

破坏前/dev/sda的前512个字节
dd if=/dev/zero of=/dev/sda bs=1 count=10240 skip=512 seek=512
查看破坏后的二进制文件
hexdump -C -n 1024 /dev/sda
发现从标记位(55 aa)之后为0

3.png

重启centos6,无法启动,使用光盘引导,进入救援模式
chroot /mnt/sysimage/ (切根)
grub (使用grub手工引导)
root (hd0,0)(hd0:代表第一个磁盘,后面的0代表第一个分区)
setup (hd0)
quit (退出)
检查修复后的二进制文件
hexdump -C -n 14000 /dev/sda
修复成功,重启

4.png
实验四:把/boot/grub/grub.conf文件移除并恢复

把/boot/grub/grub.conf文件移到/app下
mv /boot/grub/grub.conf /app/
重启centos6会发现1阶段和1.5阶段都可以启动,到2阶段是就会卡在grub界面无法启动

5.png

这里我们需要手工输入来引导系统启动
grub>root (hd0,0)
grub>kernel /vmlinuz-2.6.32-696.e16.x86_64 root=/dev/sda2
grub>initrd /initramfs-2.6.32-696.e16.x86_64.img
grub>boor(启动)

6.png

启动成功即修复完成

实验五:对/boot/grub/文件夹进行删除并修复

删除/boot/grub/文件夹
rm -rf /boot/grub
启用光盘救援模式,进入光盘救援模式后,切根(/)
chroot /mnt/sysimage
重新安装grub
grub-install /dev/sda
安装完成以后,需要我们在/boot/grub/下手工编写一个grub.conf文件
vim /boot/grub/grub.conf
格式如下:

default=0
timeout=3
root (hd0,0)
title wanglinux
kernel /vmlinuz-2.6.32-696.e16.x86_64 root=/dev/sda2
initrd /initramfs-2.6.32-696.e16.x86_64.img
保存退出

7.png

编辑使用vi,而不是vim,编写格式如下

8.png

为了确保文件已写入,我们使用命令sync同步一下
在使用exit退出两次进行重启,重启成功即修复完成。

上一篇下一篇

猜你喜欢

热点阅读