CentOS6 的启动流程以及 系统启动时常见故障及修复方法
CentOS6启动流程
POST --> Boot Sequence(BIOS) --> Boot Loader -->Kernel(ramdisk) --> rootfs --> switchroot --> /sbin/init-->(/etc/inittab, /etc/init/*.conf) --> 设定默认运行级别 --> 系统初始化脚本rc.sysinit--> 关闭或启动对应级别的服务 --> 启动终端
1 post 加电自检 检查硬件环境
2 读取第一个启动设备MBR的引导加载程序,启动grubstage 1 --grub加载完毕运行内核,内核运行完之后通过grub文件读取内核加载的根分区
3 grub stage1.5 存放在mbr后续的27个扇区 加载/boot 分区 加载分区文件系统驱动
4 grub stage2 存放在boot分区上 /boot/grub/grub.conf 定义了内核的路径,告诉我们内核文件在哪,下一步就开始加载内核了
5通过 vmlinuz内核文件 配合//boot/initramfs.xxx.img (识别根文件系统的驱动) 开始加载根
6 加载根后运行第一个进程/sbin/init 通过读取/etc/inittab这个文件决定系统的运行模式
7 使用 rc.sysinit进行系统的初始化
8 系统初始化完成之后根据系统默认的运行模式运行对应文件夹(/etcrc3.d/)下面的很多脚本去启动各项服务--/etc/rc3.d/S,Kxxx --> /etc/init.d/xxx
(运行模式:不同服务的各种组合)
9.启动终端开启一个应用程序 login
一:grub 三个阶段 损坏应该怎么恢复
1.GRUB阶段故障
grub stage1 存放在MBR前 446个字节 如果第一阶段破坏 系统中的硬盘就不具有启动功能。直接进入下一引导的启动设备
//(hexdump -C-n 512 /dev/sda查看;dd if=/dev/sda of=/data/mbr bs=1 count=512备份;sz /data/mbr上传;dd if=/dev/zero of=/dev/sda bs=1count=446) 模拟破坏grub stage1
grub stage1.5 加载boot 分区文件系统。
//hexdump -C /dev/sda -n 13824 -v ;dd if=/dev/zero of=/dev/sda bs=1 count=10000 skip=512 seek=512 模拟破坏grub stage1.5
grub stage2 加载boot分区的配置文件。
2:故障现象
3)grub stage2 故障 grub第2阶段是提供了grub菜单界面,如果损坏了和1.5相似,也是无法看到grub启动界面
3:解决方法
1)用安装光盘启动,在安装界面选择Recuseinstalled system 进入救援模式.
2)根据提示选择 ok
3)选择是否配置网卡,选择no
6)执行完grub命令 最好使用sync命令写入磁盘。最后重启系统修复成功。
二:grub配置文件损坏 /boot/grub/grub.conf
2.解决方法
2)输入boot回车,系统就可以正常启动了
3)系统启动成功后再去编辑完善 /boot/grub/grub.conf文件
三、boot分区下的两个核心文件(内核:vmlinuz;虚拟根文件系统:initramfs)遭到损坏 ,恢复方法
2.解决方法 安装包的方法
1)进救援模式,开启shell步骤和上面一样
3)#rpm命令安装包,最后再查看以下文件已生成,重启
四:配置文件/etc/fstab 和boot下所有文件都被损坏(rm -f /etc/fstab;rm -f /boot/*)修复方法
2.解决方法:
1)和之前一样进救援模式
2)下图告诉我们系统正在尝试去找根,并且正在尝试挂载到/mnt/sysimage/,继续会提示,你没有任何linux分区,然后敲回车,开启一个shell
3)找到文件系统所在的根分区
#fdisk -l //查看所有分区 找到根分区方法(新建一个文件夹/mnt/rootfs,将分区挨个挂载一下,查看哪个是根分区)
#mkdir /mnt/rootfs
#mount /dev/sda1 /mnt/rootfs //挂上
#mount /dev/sda2 /mnt/rootfs
4)#vi /mnt/rootfs/etc/fstab //因为文件已删除所以手动编辑fstab文件 系统就可以启动了,启动之后再去完善fstab文件
5)重新进救援模式 让系统自动识别根,自动挂载。修复boot--重复实验三步骤
五:/sbin/init文件损坏。修复方法
2.解决方法
1)救援模式
3)重启