天天看点

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

系统启动恢复正常。

继续阅读