CentOS6主机启动流程
流程
一台Linux主机从开机到登录界面提示输入账号密码的时间中进行了好多动作,了解这些动作有助于了解Linux系统的过程,并能够对开机过程出现的故障进行troubleshooting。
主机启动后最先运行的是主板阶段,一旦电源开启,主板进行POST加点自检动作,自检完成后无故障,主板会读取BIOS信息,根据BIOS信息中的BootSequence次序依次尝试引导启动盘。
当找到启动的磁盘后,读取MBR引导分区的MBR信息,MBR中前446字节存放的是BootLoader,CentOS6系统BootLoader程序为GrubLagecy。
BootLoader只有446字节,不能存放完整的GrubLagecy程序,只存放了GrubLagecy的一小部分(grub 1st stage)。grub 1st stage作用是用来寻找grub其余部分。grub有可能存放在主机的根文件系统中,但此时还没有加载根文件系统的驱动,grub 1st stage 不能直接找到所有的grub文件,因此去指向磁盘中的另一段空间grub 1_5 stage。grub 1_5 stage有足够的空间加载文件系统驱动,去找到grub 2nd stage。grub 2nd stage 为grub主体程序,就是我们能看到的Linux选单界面。整个选单的界面的配置信息存储在/boot/grub/grub.conf文件。通过调整该配置文件可以修改grub选单的各种选项,包括:默认选项、延迟时间、是否隐藏选单界面、背景图片、进入编辑状态需要的密码、以及内核的标题。内核的标题中要配置内核的位置,启动该内核需要的initramfs,同时可以配置密码对该标题中的内核进行验证保护。
经过grub程序引导,内存开始加载存储在磁盘的系统的内核。要注意的是现在加载内核的根并不是主机的真正根文件,而是grub的根即/boot。还需要加载真正的根文件系统,通常情况下文件系统的驱动程序不会放入系统内核,还需要通过initramfs加载根文件系统的驱动程序。为防止系统加载根时候出现故障,第一次加载根文件系统是只读(readonly)的。确认根文件系统没有问题后,chroot到主机的根目录下。寻找Linux系统启动后的第一个应用——init。
init程序会读取/etc/inittab和/etc/init/*.conf中的配置文件。运行系统初始化脚本rc.sysinit,系统初始化。对主机做如下操作:
– 设置主机名
– 设置欢迎信息
– 激活udev和selinux
– 挂载/etc/fstab文件中定义的文件系统
– 检测根文件系统,并以读写的方式重新挂载根文件系统
– 设置系统时钟
– 激活swap设备 – 根据/etc/sysctl.conf文件设置内核参数
– 激活lvm和software raid设备
– 加载额外设备的驱动程序
– 清理操作
初始化完成后根据配置文件中的信息运行rc脚本。rc脚本的配置文件存放在/etc/rc文件夹下。通过对模式的选择rc脚本可以控制Linux的服务。原理是依次关闭K开头link文件的脚本,再启动S开头的link文件脚本。服务的关闭和开启由指令chkconfig控制,不同级别的link文件存放在不同目录(/etc/rc.d/rc#.d),实现不同级别分别控制。全部完成后会运行/etc/rc.local。最后启动终端。
示意图
原创文章,作者:easyTang,如若转载,请注明出处:http://www.178linux.com/75349