启动流程和故障恢复
centos6启动大体分为四部
一、POST加电自检
二、MBR引导
三、GRUB
四、加载内核
其中,MBR引导有三部分组成
- 446个字节为boot loader
- 64个字节为分区表
- 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)个字节进行破坏
1.png破坏一阶段/dev/sda的前446个字节
dd if=/dev/zero of=/dev/sda bs=1 count=446
查看被破坏的二进制的文件
hexdump -C -n 512 /dev/sda
可以看出前446个字节都为0
重新启动centos6就会发现系统无法启动,系统默认是进入光盘模式启动,这时我们需要进入救援模式
2.png进入救援模式后,我们使用df命令发现显示的根(/)不是我们系统原来的根(/),而系统原来的根(/)在/mnt/sysimage/下,需要切根操作,
chroot /mnt/sysimage
而被我们破坏的/dev/sda的前446个字节只需要一个命令就可以修复,那就是重新安装grub
grub-install /dev/sda
查看/dev/sda的前512个字节
hexdump -C -n 512 /dev/sda
发现前446个字节已经有内容了,即修复成功。
重启centos6发现可以启动成功。
实验三:破坏1.5阶段(即跳过/dev/sda的前512个字节之后破坏512个字节)
3.png破坏前/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
4.png重启centos6,无法启动,使用光盘引导,进入救援模式
chroot /mnt/sysimage/ (切根)
grub (使用grub手工引导)
root (hd0,0)(hd0:代表第一个磁盘,后面的0代表第一个分区)
setup (hd0)
quit (退出)
检查修复后的二进制文件
hexdump -C -n 14000 /dev/sda
修复成功,重启
实验四:把/boot/grub/grub.conf文件移除并恢复
5.png把/boot/grub/grub.conf文件移到/app下
mv /boot/grub/grub.conf /app/
重启centos6会发现1阶段和1.5阶段都可以启动,到2阶段是就会卡在grub界面无法启动
6.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(启动)
启动成功即修复完成
实验五:对/boot/grub/文件夹进行删除并修复
7.png删除/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
保存退出
编辑使用vi,而不是vim,编写格式如下
8.png为了确保文件已写入,我们使用命令sync同步一下
在使用exit退出两次进行重启,重启成功即修复完成。