BIOS : 位于主板上只读存储器上的微型操作系统。

a.     POST 系统自检:对系统进行整体检查, 确保各个核心组件存在并正常运行。

b.     设备初始化:初始化核心设备驱动程序, 分配系统资源。

c.     引导设备选择:选择引导设备。

d.     移交执行权:将引导设备第一个数据块(通常是 MBR512 字节)装入内存,并转移执行权。任何引导磁盘的第一个数据块都必须含有一个小的可执行文件(引导程序)。

Bootloader : (两个阶段)

第一阶段: MBR 中前 446 个字节中的小的可执行文 ( 引导加载程序第一阶段 ) 负责访 /boot 分区, 并载入引导加载程序第二阶段。

    第二阶段: 加载并执行存储于磁盘中的 Linux 内核。

准备初始化内存磁盘 (Initial RAM Disk, initrd) 环境 , initrd 解压到 RAM

Kernel : ( 对内部结构和设备驱动程序进行初始化, 提供初始化文件系统, 启动 init)

    执行 Linux kernel

    启动并移交执行权给 init

INIT : (/sbin/init) 对机器进行初始化 启动、停止和监控其他进程。

    负责后续启动工作, 并建立用户登录环境。

    1. 启动 init 后会读取 etc/inittab 文件设置运行级别, 确定初始化脚本。

        /etc/inittab

#   Default runlevel. The runlevels used are:

#   0 - halt (Do NOT set init default to this)

#   1 - Single user mode root as default user, no network and most demons.

#   2 - Multiuser, without NFS (The same as 3, if you do not have networking)

#   3 - Full multiuser mode used as network server.

#   4 - unused

#   5 - X11

#   6 - reboot (Do NOT set initdefault to this)

    2. /etc/rc.d/rc.sysinit: 初始化 Linux 系统环境。

        根据 /etc/inittab 中相关行

        si::sysinit:/etc/rc.d/rc.sysinit 启动执行 rc.sysinit 脚本。

    rc.sysinit 脚本。

a. 脚本开始查看 /etc/sysconfig/network, 为系统确定主机名, 接着在启动进程初期 proc 文件系统被挂载在 /proc 挂在点上。

        b. 查看 /etc/red-hat-release 文件, 查看并显示欢迎信息。

        c. BIOS 调用硬件时间, 并用 /sbin/hwclock 命令初始化系统时间。

            注:双系统用户经常发现硬件时间和系统时间不对应, 可以用 hwclock 命令              进行同步。

        d. 系统初始化 RAID 磁盘。

        e. 若有 LVM 等存储技术在此进行初始化。

        f. 将根分区挂载为只读, 可以用 fsck 命令进行操作、修复。

        g. 将根分区挂载为读写模式, 仍为单一挂载分区。

        h. 挂载剩余文件系统。

        i. 清除守护进程留下来的各种 PID 文件, 并把各种应用程序留下来的文件和套

接字保留下来。

        j. 重新激活交换空间, 为满足系统使用含有根分区位置以外的交换文件。

        k. 将最新的引导记录保存到 /var/log/dmesg 中。

    3. /etc/rc.d/rc*.d: 建立并初始化 Runlevel 环境。

        $ ls /etc/rc.d/

        init.d  rc0.d  rc2.d  rc4.d  rc6.d     rc.sysinit

        rc      rc1.d  rc3.d  rc5.d  rc.local

        根据 /etc/inittab 中设置确定用哪些脚本文件对系统进行初始化。

        响应目录下均为指向 ../init.d/ 目录下脚本文件的软链接。

    4. /etc/rc.d/rc.local: 定制初始化计划。

              可以添加自己的脚本文件。