CentOS系统启动流程


 

一、CentOS系统启动流程图解(本文主要以CentOS 6.7和7.1为例讲解)


wKioL1b594yTE2MfAAUJLt7GbD4934.jpg

 

      POST-->BootSequence(BIOS)-->Bootloader(MBR)-->Kernel(ramdisk)-->rootfs(readonly)-->/sbin/init()

  说明:上图是Linux系统启动时的详细流程,其中黑色部分为主流程分支,蓝色部分为详细流程分支,绿色部分是注释部分


 二、启动详解

 1、POST:加电自检

    POST(PowerOnSelfTest)首先对每一个设备进行检查。完成后会寻找存有引导记录的设备,找到后读入操作系统引导记录,然后将系统控制权交给引导记录,并由引导记录来完成系统的顺利启动。


   BOOT Sequence: 按次序查找各引导设备,第一个有引导程序的设备即为本次启动要用的设备

,一般电脑是按"F2"或"Del"键等等进入BIOS,在里面我们可以调整硬盘的启动顺序。

 

   wKiom1b6FrfA-MLvAAAvW1lXO4k953.png



2、MBR引导

MBR(Master Boot Record) MBR记录一般是在磁盘 0 磁道 1 扇区,共512个字节。前446个字节是BootLoder,后 4*16 的 64 个字节是存放分区信息的,最后 2 个字节是校验信息,一般是 55AA。


  3.GRUP引导阶段


     这时候就可以看到我们的Centos系统了,但是一般都不需要操作,会自动启动系统。其实我们也可以自己手动启动系统的

 

  3.1 手动在grub命令行接口启动系统


      grub> root (hd#,#)

      grub> kernel /vmlinuz-VERSION-RELEASE ro root=/dev/DEVICE 

      grub> initrd /initramfs-VERSION-RELEASE.img

grub> boot


  3.2 grub的命令行接口:


              e: 编辑模式,用于编辑菜单;

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

  help: 获取帮助列表

  help KEYWORD: 详细帮助信息

  find (hd#,#)/PATH/TO/SOMEFILE:

  root (hd#,#) 设定grup的根设备

  kernel /PATH/TO/KERNEL_FILE: 设定本次启动时用到的内核文件;额外还可以添加许多内核支持使用的cmdline参数;

     例如:init=/path/to/init, selinux=0


  initrd /PATH/TO/INITRAMFS_FILE: 设定为选定的内核提供额外文件ramdisk;

  boot: 引导启动选定的内核;


 3.3 配置文件:/boot/grub/grub.conf

      配置项:

 default=#: 设定默认启动的菜单项;落单项(title)编号从0开始;

 timeout=#:指定菜单项等待选项选择的时长;

 splashimage=(hd#,#)/PATH/TO/XPM_PIC_FILE:指明菜单背景图片文件路径;

 hiddenmenu:隐藏菜单;

 password [--md5] STRING: 菜单编辑认证;

 title TITLE:定义菜单项“标题”, 可出现多次;用来引导多个内核或者操作系统

 root (hd#,#):grub查找stage2及kernel文件所在设备分区;为grub的“根”; 

 kernel /PATH/TO/VMLINUZ_FILE [PARAMETERS]:启动的内核

 initrd /PATH/TO/INITRAMFS_FILE: 内核匹配的ramfs文件;

 password [--md5] STRING: 启动选定的内核或操作系统时进行认证


  4、kernel阶段

             

           自身初始化 :

                 探测可识别到得所有硬件设备;

                 加载硬件驱动程序;(有可能会借助于randisk加载驱动)

                 以只读方式挂载根文件系统;

                 运行用户空间的第一个应用程序:/sbin/init


 5、启动 init 进程

   

     init程序的类型:

             CentOS 5:SysV init

                  配置文件:/etc/inittab


             CentOS 6:Upstart

                  配置文件:/etc/inittab

                        /etc/init/*.conf


              CentOS 7:Systemd

                  配置文件:/usr/lib/systemd/system/,/etc/systemd/system

 


init 进程是系统启动的第一个进程。其他进程都是有此进程控制fork出来的,也就是说,init是其他进程的“祖先”,PID=1。当然,PID=0进程我们称为空闲进程是属于内核的。


init启动后所做的事情:

1、读取/etc/inittab来读取默认级别 假设:读取到的默认级别是 3

  wKiom1b6G-eRQiR9AAAX5HH9nL4727.png


2、执行初始化系统脚本 /etc/rc.d/rc.sysinit 来初始化脚本

这个大家有机会可以读读,脚本主要的作用如下:

wKioL1b6HMfReP5bAABFKKqOKCA616.png


3、然后执行 /etc/rc.d/rc 脚本

此脚本运行的时候此脚本的时候,会读取/etc/rc.d/rc3.d/下的所有脚本,来控制系统启动的时候启动或者关闭那些服务


wKiom1PSA-mDbCDSAAZ9kiqbBP4645.jpg

wKiom1b6HTCzbgjlAAAVZpOpADc483.png


这些脚本是否开机自启动,可由 chkconfig 命令来管理。


wKiom1b6HWmyUDj6AAAaW1Xd4Gg426.png

4、执行/etc/rc.d/rc.local脚本,此脚本是启动过程中最后启动的一个脚本。

最后会执行 /bin/login 登录用户。至此系统启动过程完成。




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章