CentOS6启动流程和故障修复实验

CentOS6启动流程和故障修复实验

一、启动流程概述

1、上电POST自检,加载BIOS的硬件信息,获取第一个启动设备
2、读取第一个启动设备MBR里的引导加载程序(grub)的启动信息
3、加载核心操作系统的核心信息,核心开始解压缩,并尝试驱动所有的硬件设备
4、核心执行init程序,并获取默认的运行信息
5、init程序执行/etc/rc.d/rc.sysinit文件
6、启动核心的外挂模块
7、init执行运行的各个批处理文件(scripts)
8、init执行/etc/rc.d/rc.local
9、执行/bin/login程序,等待一会登录

简单流程:

POST (Power ON Self Test,加电自检)---->Boot Sequesce(BIOS,找到第一启动设备)---->Boot Loader(加载引导程序到内存中)---->Kernel (ramdisk,加载内核和虚拟磁盘映像文件)---->rootfs(挂载临时根)---->switchroot(切换临时根为系统根目录)---->/sbin/init(开机后第一个读取的文件)---->配置文件(/etc/inittab,/etc/init/*.conf)---->设定默认运行
级别---->系统初始化脚本rc.sysinit---->关闭或启动对应级别的服务---->启动终端

二、删除centos6系统的grub.conf⽂件,⼿动启动系统

目的:掌握centos6系统中的启动时grub.conf文件的作用是提供启动菜单,删除该文件后,需要
手动指定启动内核等参数。

实验步骤
1、删除grub.conf⽂件前,要知道该⽂件中kernel⾏root指定位置

root=/dev/mapper/vg_CentOS-lv_root

2、删除了/boot/grub/grub.conf启动菜单⽂件

[[email protected] ~]# rm /boot/grub/grub.conf -f

3、reboot重启

[[email protected] ~]# reboot

4、进⼊grub界⾯,⼿动指定内核等参数

CentOS6启动流程和故障修复实验
重启后出现的grub>提⽰符界⾯,⼿动指定内核及参数才能启动系统。
(1)先指定根路径:
grub> root (hd0,0)
注意:此时可使⽤Tab键补全可选的命令。
CentOS6启动流程和故障修复实验
(2)再指定内核及参数
grub> kernel /vmlinuz-2.6.32-696.el6.x86_64 ro
root=/dev/mapper/vg_CentOS-lv_root
CentOS6启动流程和故障修复实验
(3)指定虚拟磁盘映像⽂件
grub> initrd /
CentOS6启动流程和故障修复实验
(4)boot启动
grub> boot
CentOS6启动流程和故障修复实验
最后启动成功输⼊⽤户名和密码登录系统:
CentOS6启动流程和故障修复实验
(5)⼿动编写恢复grub.conf⽂件
CentOS6启动流程和故障修复实验

CentOS6启动流程和故障修复实验重启后通过⼿动创建的grub.conf成功进⼊系统:
CentOS6启动流程和故障修复实验

三、破坏grub1阶段并修复

实验步骤
1、删除/boot/grub⽬录下的各的stage⽂件启动不受影响

在/boot/grub/⽬录下,除保留grub.conf引导菜单⽂件以外,其它⽂件都删除,不影响系统启动。
[[email protected] grub]# mv grub.conf …/
[[email protected] grub]# rm -rf *
[[email protected] grub]# ls
[[email protected] grub]# mv …/grub.conf .
[[email protected] grub]# ls grub.conf
[[email protected] grub]#reboot
CentOS6启动流程和故障修复实验
进⼊此grub菜单界⾯,就说明grub的stage1第⼀阶段和stage1.5阶段已经通过了,正在读取stage2阶段。

2、破坏grub的stage1第⼀阶段并恢复系统启动

前提系统安装光盘已经放在光驱⾥。
[[email protected] ~]# dd if=/dev/zero of=/dev/sda bs=1 count=446
[[email protected] ~]# reboot
重启后,系统⽆法进⼊正常的原来系统,启动时按F2键,进⼊BIOS设置第⼀启动设备为CD-ROOM设备。或直接在关机状 态使⽤虚拟机开机进⼊固件的功能:
CentOS6启动流程和故障修复实验
光盘启动界⾯:
CentOS6启动流程和故障修复实验
选择救援模式即第3⾏,回车确定:
CentOS6启动流程和故障修复实验
选择语⾔,选择ok,回车确定:
CentOS6启动流程和故障修复实验
选择键盘类型,选择ok,回车确定:
CentOS6启动流程和故障修复实验
选择不启⽤⽹络即选择No,回车确定:
CentOS6启动流程和故障修复实验
尝试挂载损坏引导的系统中的根,选择Continue,回车确定:
CentOS6启动流程和故障修复实验
已经挂载损坏系统上的根,回车确定
CentOS6启动流程和故障修复实验
确认把损坏引导系统的根挂载在/mnt/sysimage⽬录下,回车确定
CentOS6启动流程和故障修复实验
进⼊shell,选择第1⾏后,选择Ok,回车确定:
CentOS6启动流程和故障修复实验
查看磁盘分区:
bash-4.1# df
CentOS6启动流程和故障修复实验
切换损坏引导的系统上的真正的根:
bash-4.1#chroot/mnt/sysimage
CentOS6启动流程和故障修复实验
验证切换真正的根后,查看磁盘分区:
sh-4.1# df
CentOS6启动流程和故障修复实验
下⾯在真正的根下安装grub,安装前查看第⼀启动磁盘分区的第⼀个扇区即MBR的前446字节:
hexdump -C -n 446 -v /dev/sda
CentOS6启动流程和故障修复实验
此时观察MBR当前446字节是⽆内容的。
安装grub:
sh-4.1# grub-install /dev/sda

CentOS6启动流程和故障修复实验
再次查看MBR的前446字节
CentOS6启动流程和故障修复实验
看/boot/grub目录下,生成了此前删除的各文件:
CentOS6启动流程和故障修复实验
grub所需的⽂件,能正常启动,编辑/boot/grub/grub.conf:
sh-4.1# vim /boot/grub/grub.conf
在kernel所在的⾏,尾部添加selinux=0即可。
CentOS6启动流程和故障修复实验
或者编辑/etc/selinux/config,修改为SELINUX=disabled也能实现同样的功能,还有⼀种⽅法是在启动时,中⽌启动进 ⼊gurb菜单,在kernel⾏的内核参数最后写上selinux=0完全可实现相同的功能。
退出chroot环境:
sh-4.1# exit
重启系统:
bash-4.1# reboot
CentOS6启动流程和故障修复实验
重启后,系统成功修改grub引导⽂件。
CentOS6启动流程和故障修复实验

四、破坏grub1.5阶段并恢复

实验步骤
1、删除grub1.5阶段

查看包含grub1.5阶段的内容:
[[email protected] ~]# hexdump -C -n 10240 -v /dev/sda
删除grub1.5阶段即MBR的512字节之后的部分:
[[email protected] ~]# dd if=/dev/zero of=/dev/sda bs=1 count=10240 seek=512
再次查看包含grub1.5阶段的内容:
[[email protected] ~]# hexdump -C -n 10240 -v /dev/sda
重启:
[[email protected] ~]# reboot
设置光盘开机启动项,显⽰如下界⾯,迅速按F2键进⼊BIOS设置界⾯:
CentOS6启动流程和故障修复实验
选择Boot菜单,设置CD-ROM第⼀启动:
CentOS6启动流程和故障修复实验
选择CD-ROM Drive,⽤组合键Shift+加号(+)把该项移动到第⼀项即可,按F10保存退出,重新启动。
选择救援模式即第3⾏,回车确定:
CentOS6启动流程和故障修复实验
选择语⾔,选择ok,回车确定:
CentOS6启动流程和故障修复实验
选择键盘类型,选择ok,回车确定:
CentOS6启动流程和故障修复实验
选择不启⽤⽹络即选择No,回车确定:
CentOS6启动流程和故障修复实验
尝试挂载损坏引导的系统中的根,选择Continue,回车确定:
CentOS6启动流程和故障修复实验
已经挂载损坏系统上的根,回车确定:
CentOS6启动流程和故障修复实验
确认把损坏引导系统的根挂载在/mnt/sysimage⽬录下,回车确定:
CentOS6启动流程和故障修复实验
进⼊shell,选择第1⾏后,选择Ok,回车确定:CentOS6启动流程和故障修复实验
查看磁盘分区:
bash-4.1# df
CentOS6启动流程和故障修复实验
切换根:
bash-4.1# chroot /mnt/sysimage/
进⼊grub命令⾏:
bash-4.1# grub
重新写⼊/boot/grub/⽬录下grub所需的⽂件⾥:
grub> root (hd0,0)
grub> setup (hd0)
CentOS6启动流程和故障修复实验
退出grub界⾯、退出切换根:
grub> quit sh-4.1# exit
重启系统:
bash-4.1# reboot
CentOS6启动流程和故障修复实验
把第⼀启动项,修改为硬盘启动即可,成功恢复grub1.5阶段,正常启动系统。
注意:此例模拟破坏grub1.5问题解决⽅法,有⼀个前提,就是必须保证/boot/grub/⽬录下,有stage1、stage1_5、 stage2等类似的⽂件,因为修复时,会把破坏的内容写到这些⽂件⾥,所以,如果这些⽂件不存在,是⽆法写⼊⽂件的, 也就是⽆法修复成功。

五、破坏grub2阶段即删除/boot/⽬录下所有⽂件

实验步骤
1、删除/boot/⽬录下所有⽂件

[[email protected] ~]# rm -rf /boot/* [[email protected] ~]# reboot

2、使⽤光盘启动,进⼊救援模式

在启动刚开始界⾯,迅速按⽅向键上下键,进⼊BIOS设置界⾯。
CentOS6启动流程和故障修复实验
进⼊BIOS,设置光盘启动:
CentOS6启动流程和故障修复实验
按F10,保存退出即可。
CentOS6启动流程和故障修复实验
启动后,直接选择进⼊救援模式即可。
CentOS6启动流程和故障修复实验

3、切根后安装grub

选择语⾔,选择ok,回车确定:
CentOS6启动流程和故障修复实验
选择键盘类型,选择ok,回车确定:
CentOS6启动流程和故障修复实验
选择不启⽤⽹络即选择No,回车确定:
CentOS6启动流程和故障修复实验
尝试挂载损坏引导的系统中的根,选择Continue,回车确定:
CentOS6启动流程和故障修复实验
已经挂载损坏系统上的根,回车确定:
CentOS6启动流程和故障修复实验
确认把损坏引导系统的根挂载在/mnt/sysimage⽬录下,回车确定:
CentOS6启动流程和故障修复实验
进⼊shell,选择第1⾏后,选择Ok,回车确定:
CentOS6启动流程和故障修复实验
查看磁盘分区:
bash-4.1# df
CentOS6启动流程和故障修复实验
切换根:
bash-4.1# chroot /mnt/sysimage/
安装grub:
sh-4.1# cd /boot/ sh-4.1# grub-install /dev/sda
CentOS6启动流程和故障修复实验

4、复制vmlinuz内核⽂件

挂载磁盘并拷贝vmlinuz内核⽂件:
sh-4.1# mount /dev/cdrom /media sh-4.1# cp /media/isolinux/vmlinuz /boot/
注意:拷贝内核⽂件vmlinuz时,除了 /media/isolinux/vmlinuz所在的路径是内核⽂件,还有⼀个存放位置 是/mnt/Packages/kernel-2.6.32-696.el6.x86_64.rpm,只需把该⽂件解压即可,最后再介绍如何解压这个rpm内核 ⽂件。
CentOS6启动流程和故障修复实验

5、创建虚拟磁盘映像⽂件

sh-4.1# mkinitrd /boot/initramfs-$(uname -r).img $(uname -r)

6、创建grub.conf⽂件

查看根⽬录在grub.conf应该写⼊的位置:
sh-4.1# df
或:
sh-4.1# blkid
在这里插入图片描述
这⾥查到root指定位置为/dev/mapper/vg_CentOS-lv_root,当然也可⽤UUID代替其写为root=UUID=938fa34fd04a-41d5-a6a9-888eeccd26b2。
sh-4.1# vim /boot/grub/grub.conf
内容为:
default=0
timeout=5
title redhat
root (hd0,0)
kernel /vmlinuz ro root=/dev/mapper/vg_CentOS-lv_root rhgb quiet initrd /initramfs-2.6.32-696.el6.x86_64.img

7、重启reboot

sh-4.1# exit bash-4.1# reboot
系统启动恢复正常。