对于linux 运维人员来说清楚Linux启动的过程是非要有必要的,因为只有这样才能在遇到系统不能正常启动的时候对问题进行排查,判断是具体哪个阶段出现问题,从而修复,而不是只能重装系统。在介绍启动流程前,先介绍下内核相关概念:
linux 内核英文叫kernel,提供进程管理、内存管理、网络管理、驱动程序、文件系统、安全功能。
Linux内核特点:
支持模块化: .ko(内核对象)如:文件系统,硬件驱动,网络协议;支持内核模块的动态装载和卸载。
组成部分:
核心文件: /boot/vmlinuz-VERSION-release
ramdisk:辅助的伪根系统
CentOS 5: /boot/initrd-VERSION-release.img
CentOS 6,7: /boot/initramfs-VERSION-release.img
模块文件: /lib/modules/VERSION-release5
现在将开始介绍CentOS6启动流程
一. 第一阶段
1.1 加载BIOS的硬件信息,获取第一个启动设备
POST: Power-On-Self-Test,加电自检,是BIOS功能的一个主要部
分。负责完成对CPU、主板、内存、硬盘子系统、显示子系统、 串并行接
口、键盘、 CD-ROM光驱等硬件情况的检测。
2.读取第一个启动设备MBR的引导加载程序(grub)的启动信息。
MBR总共512字节,前446byte 是bootloader ,之后64byte是硬盘分区表,最后两个字节是55AA 。 bootloader 是第一阶段启动项
二:第二阶段
3.第三阶段
加载核心操作系统的核心信息,核心开始解压缩,并尝试驱动所有的硬件设备;核心执行init程序,并获取默认的运行信息。
4.第四阶段
4.1 init程序执行/etc/rc.d/rc.sysinit文件
4.2 启动核心的外挂模块
4.3 init执行运行的各个批处理文件(scripts)
4.4 init执行/etc/rc.d/rc.local
4.5 执行/bin/login程序,等待用户登录
5.第五阶段
启动完成,用户可以正常登录系统。
6. 启动故障恢复
6.1 模拟MBR故障
[root@Centos6.9 ~]#dd if=/dev/zero of=/dev/sda bs=1 count=512 删除MBR信息
重启之后发现界面是黑色的,这时候我们需要重启机器,进入救援模式会看到以下界面:
图中 chroot /mnt/sysimage/ 是切换到真正的根目下,默认是在/boot下面。
然后执行:grub-install /dev/sda 等待完成后,如果没有报错,重启机器即可。这种方法同样适用于1.5阶段故障。恢复方法总结:重启机器,进入救援模式后,执行 chroot /mnt/sysimage/ 切根,然后 grub-install /dev/sda
,没有报错,重启机器就可以了!
6.2 整个boot 分区都丢失
首先我们看下 boot 下面有哪些东西:
[root@Centos6.9 boot]#ls
config-2.6.32-696.el6.x86_64 symvers-2.6.32-696.el6.x86_64.gz
grub System.map-2.6.32-696.el6.x86_64
initramfs-2.6.32-696.el6.x86_64.img vmlinuz-2.6.32-696.el6.x86_64
[root@Centos6.9 boot]#ls grub/
device.map ffs_stage1_5 jfs_stage1_5 stage1 vstafs_stage1_5
e2fs_stage1_5 grub.conf minix_stage1_5 stage2 xfs_stage1_5
fat_stage1_5 iso9660_stage1_5 reiserfs_stage1_5 ufs2_stage1_5
里面除了grub 文件夹外的文件都是安装kernel 时候自动生成的。
当整个boot 分区丢失后,我们同样先进入救援模式,同样先执行
chroot /mnt/sysimage 命令切换到平时的根目录下,然后挂载光盘,之后安装光盘里的内核文件,命令:rpm -ivh /mnt/Packages/kernel-2.6.32-696.e16x86_64.rpm –force,在执行 grub-install /dev/sda ,ls /boot 会看到如下如所示:
好了,这时候我们快要成功!我们在grub 文件夹下新建grub.conf 文件
[root@Centos6.9 boot]#cat grub/grub.conf
root (hd0,0) 写明/boot分区的位置 hd0 表示第一个硬盘,0 表示第一个分区。
default=0 0表示默认启动
timeout=5 表示5秒后自动运行
title linux1 一个名称,叫什么无所谓,但是要有
kernel /vmlinuz-2.6.32-696.el6.x86_64 root=/dev/sda2
initrd /initramfs-2.6.32-696.el6.x86_64.img
做完之后退出,然后重启机器就可以正常恢复了!