码迷,mamicode.com
首页 > 其他好文 > 详细

CentOS 5与6的启动流程

时间:2016-01-24 19:56:21      阅读:354      评论:0      收藏:0      [点我收藏+]

标签:centos 启动

Linux主要组成部分:kernel+rootfs+库+程序

    kernel(内核):进程管理、内存管理、网络管理、驱动程序、文件系统、安全功能等

    rootfs(根文件系统):glibc(库文件)等

    库:函数集合,function,调用接口

        procedure:过程调用,无返回值

        function:函数调用,有返回值

内核设计流派:

    单内核设计:所有功能集成于同一个程序中。例如:Linux

    微内核设计:每种功能使用给一个单独子系统实现。例如:windows,solaris

Linux内核特点:

    支持模块化: .ko

    支持模块的动态装载和卸载

Linux内核组成部分:

    核心文件:/boot/vmlinux-VERSION-release

    ramdisk:辅助装载硬盘驱动

        centos5:模拟成硬盘/boot/initrd-VERSION-resease.img

        centos6:模拟成文件系统/boot/initramfs-VERSION-resease.img    

        技术分享         

        模块文件:/lib/modules/VERSION-release/

技术分享


CentOS 5 系统启动流程

    POST --> Bootsequence(BIOS) --> bootloader(MBR)--> kernel(ramdisk) -->  rootfs(只读) --> /sbin/init --> (/etc/inittab) --> 设置默认运行级别 (id:3:initdefault:) --> 运行系统初始化脚本、完成系统初始化(si::sysinit:/etc/rc.d/rc.sysinit) --> 关闭和启动对应级别写需要关闭的服务(l#:#:wait:/etc/rc.d/rc #) --> 设置登录终端(tty1:2345:respawn:/usr/sbin/mingetty tty1)

(1) POST:加电自检

(2) BIOS:Basic Input and Output System

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

        (3) bootloder:引导加载器

Linux包含两个bootloder,分别为LILO(LInux LOader)和 GRUB(Grand Uniform Bootloader) 

                功能:提供一个菜单,允许用户选择要启动系统或不同的内核版本,把用户选定的内核装载到内存中的特定空间中,解压、展开,并把系统控制权移交给内核

(4) kernel:(加载根时必须为只读方式,在系统初始化脚本/etc/rc.d/rc.sysinit中重挂)

自身初始化:

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

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

    以只读方式挂载根文件系统(rootfs只读)

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

                init程序的类型:

         SysV:init (CentOS5中使用,配置文件:/etc/inittab)

    Upstart:init (CentOS6中使用并兼容centos5,配置文件:/etc/inittab,/etc/init/*.conf)

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

                        ramdisk类型:

                            ramdisk:initrd (centos5系统安装后由mkinitrd生成

    ramfs:initramfs (centos6系统安装后后由dracut生成)

        (5) /sbin/init

            运行级别:为了系统的运行或维护等应用目的而设定

                0-6:

                #   0 - halt (Do NOT set initdefault to this)

                #   1 - Single user mode

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

                #   3 - Full multiuser mode

                #   4 - unused

                #   5 - X11

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

    0:关机

    1:单用户模式(root,无需登录),single,维护级别

                    2:多用户模式:会启动网络功能,但不会启动NFS,维护模式

    3:多用户模式:正常模式,默认为文本界面

    4:预留级别:可同3级别

    5:多用户模式:正常模式:图形界面

    6:重启

                切换级别:init #

                查看级别:runlevel,who -r

                配置文件:/etc/inittab

                    id:3:initdefault:

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

                    l0:0:wait:/etc/rc.d/rc 0

    l1:1:wait:/etc/rc.d/rc 1

    ...

    l6:6:wait:/etc/rc.d/rc 6

                    每一行定义一种action以及与之对应的process

    id:runlevel:action:process

        action:

wait:切换至此级别运行一次

respawn:此process终止,就重新启动之

initdefault:设定默认运行级别:process省略

sysinit:设定系统初始化方式,此处一般为指定/etc/rc.d/rc.sysinit

...

                    note:rc 0-->意味着读取/etc/rc.d/rc0.d/[K*|S*]

                K*:K##*

S*:S##* 链接文件,源文件位于/etc/rc.d/init.d/

    ##:数字越小越优先,取决于服务的依赖关系

                        按次序终止K开头服务,启动S开头服务

    for srv in /etc/rc.d/rc0.d/K*;do

$srv stop

    done

                            for srv in /etc/rc.d/rc0.d/S*;do

        $srv start

    done

                    chkconfig:管理服务

                --list :查看所有服务在所有级别的on/off状态

--add name:添加SysV类型放置于/etc/rc.d/init.d(/etc/init.d)的服务脚本

                        --del name :删除

--level ### name on/off/reset:修改指定级别的链接类型

    --level:省略为2345

7个级别的S或K取决有服务脚本中的chkconfig行

    #!/bin/bash

    #

    #chkconfig:LLL NN nn

                                LLL:哪个级别为S(0-6)

NN:S中的次序

nn:K中的次序

                    NOTE:正常级别下,最后启动的一个服务S99local不是链接至/etc/rc.d/init.d的一个服务脚本,而是指向于/etc/rc.d/rv/local脚本;因此,不便或不需写为服务脚本放置于/etc/rc.d/init.d目录,且有想开机自动运行的命令,可直接放置于/etc/rc.d/rc.local文件中


tty1:2345:respawn:/usr/sbin/mingetty tty1

tty2:2345:respawn:/usr/sbin/mingetty tty2

tty3:2345:respawn:/usr/sbin/mingetty tty3

tty4:2345:respawn:/usr/sbin/mingetty tty4

tty5:2345:respawn:/usr/sbin/mingetty tty5

tty6:2345:respawn:/usr/sbin/mingetty tty6

                mingetty会自动调用login程序


                tips:

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

        (1) 设置主机名

        (2) 设置欢迎信息

        (3) 激活udev和selinux

        (4) 挂载/etc/fstab文件中定义的文件系统

        (5) 检测根文件系统,并以读写方式重新挂载根文件系统(内核挂载为只读模式,此处需重新挂载)

        (6) 设置系统时钟

        (7) 激活swap设备

        (8) 根据/etc/sysctl.conf文件设置内核参数

        (9) 激活lvm及software raid设备

        (10) 加载额外设备的驱动程序

        (11) 清理操作

CentOS 6的系统启动过程与5大致相同,但其init程序为upstart,其配置文件为/etc/inittab,/etc/init/*.conf,并非单个的/etc/inittab文件。

    

    [root@localhost init]# ll

    total 68

    -rw-r--r--. 1 root root  412 Apr  9  2015 control-alt-delete.conf

    -rw-r--r--. 1 root root  130 Mar 12  2014 init-system-dbus.conf

    -rw-r--r--. 1 root root  463 Apr  9  2015 kexec-disable.conf

    -rw-r--r--. 1 root root  560 Apr  9  2015 plymouth-shutdown.conf

    -rw-r--r--. 1 root root  357 Apr  9  2015 prefdm.conf

    -rw-r--r--. 1 root root  505 Apr  9  2015 quit-plymouth.conf

    -rw-r--r--. 1 root root  417 Apr  9  2015 rc.conf

    -rw-r--r--. 1 root root 1046 Apr  9  2015 rcS.conf

    -rw-r--r--. 1 root root  430 Apr  9  2015 rcS-emergency.conf

    -rw-r--r--. 1 root root  725 Apr  9  2015 rcS-sulogin.conf

    -rw-r--r--. 1 root root 2915 Nov 23  2013 readahead-collector.conf

    -rw-r--r--. 1 root root 1559 Nov 23  2013 readahead.conf

    -rw-r--r--. 1 root root  726 Nov 23  2013 readahead-disable-services.conf

    -rw-r--r--. 1 root root 1302 Apr  9  2015 serial.conf

    -rw-r--r--. 1 root root  791 Apr  9  2015 splash-manager.conf

    -rw-r--r--. 1 root root  473 Apr  9  2015 start-ttys.conf

    -rw-r--r--. 1 root root  335 Apr  9  2015 tty.conf

    [root@localhost init]#






本文出自 “机智少年普朗克” 博客,谢绝转载!

CentOS 5与6的启动流程

标签:centos 启动

原文地址:http://armolee.blog.51cto.com/6288560/1737958

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!