首页 > 技术文章 > Linux系统初始化流程

jixingke 2016-11-09 15:51 原文

POST-->BIOS(Boot Sequence)-->MBR(bootloader)-->Kernel(initrd)-->/sbin/init(/etc/inittab)  

  当我们按下开机按钮时,会发生这些事:

    1.自检:依赖于CPU,ROM中的程序

    2.加载BIOS,Boot Sequence确定启动顺序

    3.MBR:

        硬盘0磁道0扇区的MBR文件,共512字节

          446:BootLoader

          64:分区表,每16字节一个分区

          2:5A(一个特殊标记)

    4.kernel文件vmlinuz+initrd:只能放在基本磁盘分区,BootLoader会把vmlinuz当做根来使用,即/vmlinuz

      将vmlinuz加载到内存中使用。vmlinuz分为两段,前半部分未压缩段,是为了解压第二段。

      至此BootLoader任务完成,退场。

      操作系统安装时会执行一个命令,安装程序完成后自动运行脚本,收集操作系统运行需要的脚本,将所需要的模块打包成initrd,帮助内核完成初始化

      initrd: ram disk,内核将之作为根来使用,将硬盘模拟成磁盘

    5.initrd将所需文件复制到/下,内核完成初始化后进行根切换

    6.启动/sbin/init,由内核空间进入用户空间

      /lib/modules

      /sbin/init:

        /etc/inittab

        id:3:initdefault:

          /etc/rc.d/rc.sysinit脚本

 

 

 

 

  运行级别:

    0:关闭所有服务,切断电源。效果等同于关机

    1:单用户模式:直接以root身份登录。破解管理员密码?

    2:多用户模式:不支持NFS

    3:多用户模式:文本模式,不启动图形界面

    4:预留级别

    5:多用户模式:图形模式

    6:重启

 

   /sbin/init的配置文件

    每行定义一种模式:

      id:操作的ID

      runlevels:在哪些级别下操作此操作

      action:

        initdefault:设置运行级别,无需定义操作

        sysinit:指定系统初始化运行脚本

          si::sysinit:/etc/rc.d/rc.sysinit

        wait:等待系统切换至此级别时运行一次

         ctrlaltdel:定义组合键被按下时运行的命令

         respawn:当操作系统进程被关闭时立即再启动一次

      process:

 

    /etc/inittab中定义的操作:

      设定默认运行级别

      指定系统运行的初始脚本

      启动指定级别下要启动的服务,并关闭需要停止的服务

      定义CtrlAltDel组合键的动作

      启动图形终端

 

    init要完成的任务:

      设定默认运行级别

      指定系统运行的初始脚本

      启动指定级别下要启动的服务,并关闭需要停止的服务

        /etc/init.d

          /etc/rc.d/rcN.d (0-6)

            S##

            K##

      定义CtrlAltDel组合键的动作

      初始化字符终端

        终端:对应的设备

          /dev/tty#,/dev/ttyS#,/dev/console,/dev/pts#

            login-->/etc/issue

      启动图形终端

        X-Window,桌面管理器

 

    系统初始化脚本/etc/rc.d/rc.sysinit

      设置主机名

      激活SFELinux和Udev

      激活swap

      挂载/ etc/fstab定义的本地系统

      检测根文件系统并对其以读写方式重新挂载

      设置系统时钟

      根据/etc/sysctl.conf设置内核参数

      激活RAID和LVM设备

      清理操作

 

推荐阅读