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

CentOS启动流程

时间:2015-09-08 23:38:16      阅读:454      评论:0      收藏:0      [点我收藏+]

标签:procedure   windows   function   linux   网络管理   

技术分享

基本概念

linux:kernel+rootfs

kernel的功能:

   进程管理、内存管理、网络管理、驱动程序、文件系统、安全功能

   编程过程通常调用glibc

   整个系统运行主要依靠内核、kernel、库文件

   库:函数的集合,function,任何功能有其调用接口,程序员写程序时,为了便于调用函数,需在头上声明调用

       库也是二进制文件,库文件没有执行入口,必须被调用执行。

       过程调用:procedure,一般没有返回值

       函数调用:function,必须有返回值

   程序:

内核程序的设计流派:

    单内核设计:把所有功能集成于一个程序,所有程序在该程序中以线程实现

                 任何地方出现问题,可能导致连环错误,

                 一般效率较高

                 Linux 进程设计非常轻量,几乎可以相当于windows线程

     微内核设计:每个功能使用一个单独子系统实现,子系统在一个核心框架下协同起来工作

                 每个模块都可以单模块进行修改,但效率低下,出现故障不会影响其他程序,运作透明

                 设计思想先进,但由于其内部的设计调用机制负杂,目前为止并未体现其优越性

                 Windows,Solaris  真正支持线程模式

linux内核特点:

   支持模块化:.ko (模块文件后缀)

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


   组成部分:

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

    ramdisk:基于内存的硬盘,在内存中把一段空间当做磁盘启动

CentOS 5: /boot/initrd-VERSION-release.img

CentOS 6/7: /boot/initramfs-VERSION-release.img

技术分享


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

技术分享

技术分享   

技术分享      

CentOS 系统启动流程:

POST:加电自检;

      ROM:CMOS

        BIOS:Basic Input and Output System

        ROM+RAM


BOOT Sequence: 

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

    bootloader: 引导加载器,程序

        windows: 引导加载器为ntloader

        Linux:

            LILO:LInux LOader 不支持把系统装载1024柱面以后的分区但非常轻量(Android)

            GRUB: GRand Uniform Bootloader

            GRUB 0.X: GRUB Legacy(CentOS5/6)

            GRUB 1.x: GRUB2 (CentOS7)


            功能:提供一个菜单,允许用户选择要启动系统或不同的内核版本;把用户选定的内核装载到内存中

                 的特定空间中,解压、展开,并把系统控制权移交给内核;


    MBR:

        446: bootloader

        64: fat  (分区表)

        2: 55AA


    GRUB: 

        bootloader: 1st stage (位于MBR中,主要用于寻找第二阶段)

        1_5 stage(帮助内核识别硬盘上的文件系统)

        disk: 2nd stage

技术分享

kernel:

    自身初始化:

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

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

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

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


        init程序的类型:

            SysV: init, CentOS 5  初始化过程借助脚本来实现,需脚本解决依赖关系,系统启动较慢

                配置文件:/etc/inittab

            Upstart: init, CentOS 6  

                配置文件:/etc/inittab, /etc/init/*.conf

            Systemd:systemd, CentOS 7

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


        ramdisk:

            内核中的特性之一:使用缓冲和缓存来加速对磁盘上的文件访问;

                ramdisk --> ramfs

                CentOS 5: initrd,  工具程序:mkinitrd

                CentOS 6: initramfs, 工具程序:mkinitrd, dracut


    系统初始化:

       POST --> BootSequence (BIOS) --> Bootloader(MBR) --> kernel(ramdisk) --> rootfs(只读) --> init


/sbin/init

    CentOS 5:

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

         0-6:7个级别

            0:关机

            1:单用户模式(root, 无须登录), single, 维护模式;

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

            3:多用户模式,正常模式;文本界面;

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

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

            6:重启

          默认级别:

            3, 5

          切换级别:

            init #

         查看级别:

            runlevel     

            who -r    

技术分享

      配置文件:/etc/inittab对于CentOS5来讲,

        每一行定义一种action(功能)以及与之对应的process(进程)

            id:runlevel:action:process

              action:

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

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

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

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

                        ...

            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


               说明:rc 0 --> 意味着读取/etc/rc.d/rc0.d/

                 K*: K##*:##运行次序;数字越小,越先运行;数字越小的服务,通常为依赖到别的服务;

                 S*: 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命令

        查看服务在所有级别的启动或关闭设定情形:

            chkconfig [--list] [name]

技术分享



            修改指定的链接类型

                chkconfig [--level levels] name <on|off|reset>

                    --level LLLL: 指定要设置的级别;省略时表示2345;

技术分享

技术分享

技术分享


            添加:

                把遵循SysV的服务脚本放置于/etc/rc.d/init.d (/etc/init.d)

                    chkconfig --add name     按照脚本内容生成链接

                        #!/bin/bash

                        #

                        # chkconfig: LLLL nn nn

            删除:

                chkconfig --del name

技术分享

                    注意:正常级别下,最后启动一个服务S99local没有链接至/etc/rc.d/init.d一个服务脚本,

                            而是指向了/etc/rc.d/rc.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

                ...

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

                mingetty会调用login程序


/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) 清理操作;


     总结:/sbin/init --> (/etc/inittab) --> 设置默认运行级别 --> 运行系统初始脚本、完成系统初始化 --> 

           关闭对应下需要关闭的服务,启动需要启动服务 --> 设置登录终端 







CentOS启动流程

标签:procedure   windows   function   linux   网络管理   

原文地址:http://chaochao3.blog.51cto.com/10446790/1692915

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