前言

每次在虚拟机里点击开启虚拟机后会看到屏幕不停地出现很多代码,后面有些跟着【ok】,有些代码后面跟着红色的【failed】。那么问题来了,为啥有些启动服务都失败了,系统还是进去了呢?本文就此给大家详细介绍一下,centos5和6 的启动流程。以后遇到系统无法启动,可以做到心中有数。

一、加电自检POST,通过BIOS读取cmos上的配置信息,读取硬件的信息。并检测能否正常运行,硬件设备初始化。

二、选择启动顺序

    1、加载MBR,存在于0磁道0扇区前446字节;

    2、读取位于MBR中存放的bootloader,功能是:识别、加载操作系统中的核心文件,交给内存。提供菜单信息和用户选择加载不同的操作系统,告诉下一阶段去×××系统和grub引导。

    3、为了打破MBR中只有446Byte存放bootloader,grub分为三个阶段

           stage1:存放于MBR中,用于加载stage1_5阶段,目的是为了识别并驱动stage2所在分区文件系统。

           stage1_5: 存放于MBR之后的扇区,让stage1中的bootloader能识别stage2所在分区的文件系统

           stage2:存放于磁盘分区上(/boot/grub),用于加载临时根文件ramdisk和加载内核文件

                        功能:(1)提供启动菜单、并提供交互式接口

                                        a:内核参数

                                        e:编辑模式、用于编辑菜单

                                        c:命令模式,交互式接口

                                  (2)加载用户选择的内核或操作系统

                                       允许传递参数给内核

                                        可隐藏启动菜单

                                  (3)为菜单提供了保护机制

                                      为编辑启动菜单进行认证

                                      为启用内核或操作系统进行认证

            总结:stage1_5就是向grub提供文件系统的驱动的,这样stage1就能访问stage2及内核所在分区(/boot)

            grub的配置:/etc/grub.conf,读取此文件的参数,准备启动内核

三、加载系统内核kernel,执行系统初始化信息

内核存放在/boot下,是一个vmlinuz的文件,通过initramfs文件(ramdisk)虚拟一个根文件系统在内存中,来加载合适的驱动程序,并以只读方式加载真正的根文件系统,然后运行用户空间的第一个应用程序/sbin/init

    ramdisk:centos 5 iniCentOS 5: initrd
                                工具程序:mkinitrd
                 CentOS 6,7: initramfs
                                工具程序:mkinitrd, dracut

    制作ramdisk文件的制作:

                                (1) mkinitrd命令
                                        为当前正在使用的内核重新制作ramdisk文件
                                        mkinitrd   /boot/initramfs-$(uname-r).img   $(uname-r)
                                (2) dracut命令
                                         为当前正在使用的内核重新制作ramdisk文件
                                          dracut   /boot/initramfs-$(uname-r).img   $(uname-r)

四、启动/sbin/init

   1、 init的程序的类型:

        SysV: init, CentOS 5之前            配置文件:/etc/inittab
        Upstart: init,CentOS6                 配置文件:/etc/inittab————————-仅设置设置默认运行级别

                                                            /etc/init/*.conf   ——————-Upstart将配置文件拆分存放于/etc/init下以.conf结尾
        Systemd:systemd, CentOS 7     配置文件:/usr/lib/systemd/system、/etc/systemd/system

   2、流程

        (1)初始运行级别

        (2)系统初始化脚本————–/etc/rc.d/rc.sysinit:a、设置主机名(/etc/sysconfig/network中的HOSTNAME)

                                                                                         b、欢迎信息

                                                                                         c、激活udev和selinux

                                                                                         d、 挂载/etc/fstab定义的文件系统

                                                                                         e、挂载根文件系统(读写方式)

                                                                                         f 、系统时钟

                                                                                         g、根据/etc/sysctl.conf文件设置内核参数

                                                                                         h、激活swap

                                                                                         i、激活LVM和software RAID设备

                                                                                         j、加载额外的驱动程序

                                                                                         k、清理操作       

        (3)对应运行级别的脚本目录   

                  centos 5 的/etc/inittab有类似的几行: 13:3:wait:/etc/rc.d/rc 3 ————–读取/etc/rc.d/rc3.d的链接文件来决定如何启动或关闭赴服务:S开头的 进行start操作,K开头的stop。链接文件的源文件在/etc/init.d/目录下服务脚本

                   例外:S99local没有链接到/etc/init.d/下的服务脚本,而是链接到/etc/rc.d/rc.local (/etc/rc.local)。后序如果有不方便或者没必要写进脚本的程序,又希望开机自启动,可以直接写进这个脚本。

        (4)配置好组合键的功能

        (5)配置不断电系统PF、PR

        (6)启动tty6个终端

        (7)如果是3级别,启动字符界面

五、启动终端,登录。

六、到这里linux大概的过程就结束了,学习启动过程是为了在系统出故障时,能做到快速判断。后面一篇文章会详细模拟启动故障,根据启动所需的文件来恢复。