zoukankan      html  css  js  c++  java
  • linux基础之CentOS启动流程

    一、基本概念

     内核设计流派:
        单内核设计:Linux        //所有功能集成于同一个程序
        微内核设计:Windows,Solaris  //每种功能使用一个单独子系统实现
    Linux内核特点:
            支持模块化:.ko文件
            支持模块的动态装载和卸载   
    Linux内核组成部分:
            核心文件:/boot/vmlinuz-VERSION-release
                    ramdisk:  //基于内存的磁盘,用来辅助内核加载根文件驱动程序
                          CentOS5: /boot/initrd-VERSION-release.img
                          CentOS6: /boot/initramfs-VERSION-release.img
    
            模块文件: /lib/modules/VERSION-release 

    二、CentOS系统启动流程 

    1.POST(加电自检): CMOS除了加电自检还可以进行一些设置,也就是BIOS(Basic Input and Output System)
    2.BOOT Sequence:  按次序查找各引导设备,第一个有引导程序的设备即为本次启动用到的设备
    3.bootloader:  引导程序,引导加载器
            windows:ntloader
            linux:
                    LILO: LInux LOader    //不支持将系统安装在1024个柱面之后的分区上,虽然古老,但现在手机上应用较多
                    GRUB:GRand Uniform Bootloader,统一加载器
                            GRUB 0.x: GRUB Legancy
                            GRUB 1.x: GRUB2
    功能:提供一个菜单,运行用户选择要启动系统或不同的内核版本,把用户选定的内核装载到内存特定空间中,解压展开后,将系统控制权移交给内核
    4.kernel:
            自身初始化:
                    探测可识别到的所有硬件设备
                    加载硬件驱动程序:(有可能会借助于ramdisk加载驱动)
                    以只读方式挂载根文件系统
                    运行用户空间中的第一个应用程序:/sbin/init
    
                    init程序的类型:
                            SysV: init, CentOS5, 配置文件:/etc/inittab
                            Upstart:重命名为 init, CentOS6, 配置文件:/etc/inittab, /etc/init/*.conf
                            Systemd: systemd,CentOS7, 配置文件:/user/lib/systemd/system, /etc/systemd/system
         ramdisk:
                内核中的特性之一:使用缓冲和缓存来加速对磁盘上的文件访问
                所以ramdisk有可能被缓冲两次,所以CentOS6上改进为位于内存的文件系统ramfs
        CentOS
    5 : initrd, 工具程序: mkinitrd     CentOS 6: initramfs, 工具程序:mkinitrd, dracut
    系统初始化:
        POST(加电自检) --> BOOT Sequence(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:重启
                模式级别:35
                切换级别:init #
                查看级别: runlevel、who -r
    配置文件:/etc/inittab
        每一行定义一种action以及与之对应的process
        例如:   id:runlevel:action:process
                         action:
                                wait: 切换至此级别运行一次
                                respawn: 此process终止,就重新启动
                                initdefault: 设定默认运行级别,process省略
                                sysinit: 设定系统初始化方式,此处一般为指定/etc/rc.d/sysinit
                     ...
    
                id:3:initdefault:
                si::sysinit:/etc/rc.d/rc.sysinit
                
                l0:0:wait:/etc/rc.d/rc 0
                    ...
                l6:6:wait:/etc/rc.d/rd 6
                注释:rc 0 -->意味着读取/etc/rc.d/rc0.d/{K*S*}:
                 K*:K##*,##为运行次序,数字越小,越先运行,数字越小通常依赖到别的服务
                 S*:S##*
    ,##为运行次序,数字越小,越先运行,数字越小通常为被依赖到服务
                   相当于执行:for src in /etc/rc.d/rc0.d/K*;do
                                   $src stop
                             done
                             for src in /etc/rc.d/rc0.d/S*;do
                                   $src start
                             done                                                
    管理工具:chkconfig命令        //管理这些链接文件以及查看某些服务是否启动
      例如:
         查看服务:chkconfig --list srvName
            chkconfig --list
      //查看所有服务在各级别下是否开启或停止
            chconfig --list network  //查看指定服务是否开启或停止
            
         
         添加服务:chkconfig --add srvName  
            SysV的服务脚本放置于/etc/rc.d/init.d(/etc/init.d)
            chkconfig --add name
              #!/bin/bash
              #
              # chkconfig: LLLL nn nn
     

         删除服务:chkconfig --del srvName

          修改服务:chkconfig [--level levels] name <on|off|reset>
                      --level LLLL: 指定要设置的级别:省略时表示2345

               例如:chkconfig --level 3 NetworkManager off  //修改级别3下NetworkManager服务为停止
    实例:添加服务及删除服务
    [root@alen init.d]# vim test.sh    //在/etc/rc.d/init.d下面创建一个服务脚本test.sh
                           #!bin/bash
                           #
                           # chkconfig:345 23 84  //定义在345级别下S为23,K为84
                           # description:test srv     
                            echo "hello srv test.sh" [root@alen init.d]# chmod +x test.sh [root@alen init.d]# chkconfig --add test.sh [root@alen init.d]# chkconfig --list test.sh test.sh 0:关 1:关 2:关 3:开 4:开 5:开 6:关 [root@alen init.d]# ls -l /etc/rc.d/rc0.d/K84test.sh    //级别0下test.sh服务是关闭的为84 lrwxrwxrwx. 1 root root 17 9月 2 13:51 /etc/rc.d/rc0.d/K84test.sh -> ../init.d/test.sh   [root@alen init.d]# ls -l /etc/rc.d/rc3.d/S23test.sh    //级别3下test.sh服务是开启的为23 lrwxrwxrwx. 1 root root 17 9月 2 13:51 /etc/rc.d/rc3.d/S23test.sh -> ../init.d/test.sh

    [root@alen init.d]# chkconfig --del test.sh    //删除服务test.sh
    [root@alen init.d]# chkconfig --list test.sh    //此时查看服务就没有了
    注意: 正常级别下,最后启动一个服务S99local不是链接到/etc/rc.d/init.d目录的一个服务脚本,而是指向了/etc/rc.d/rc.local脚本,因此,如果不需要写成服务脚本放置于/etc/rc.d/init.d目录下,开机时又会自动运行的命令,可放置于/etc/rc.d/rc.local文件中

    服务启动好后就会启动终端设备,在终端设备上关联登录程序,然后用户输入账号密码就可以登录系统了

    例如://启动6个虚拟终端
        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文件完成配置
    /etc/inittab中配置步骤有:
            1.设置默认运行级别  //id:3:initdefault:
         2.运行系统初始化脚本、完成系统初始化   //si::sysinit:/etc/rc.d/rc.sysinit
    3.关闭对应级别下需要关闭的服务,启动需要启动的服务    
              l0:0:wait:/etc/rc.d/rc 0
              l1:1:wait:/etc/rc.d/rc 1
              ...
              l6:6:wait:/etc/rc.d/rc 6
         4.设置登录终端

    CentOS 6:

      init程序为:upstart,配置文件:/etc/inittab(兼容CentOS5,但CentOS6不会用到,而是用后面的配置文件), /etc/init/*.conf

     

           

        

               

  • 相关阅读:
    有关远程设置的问题
    QT使用tableWidget显示双排列表 而且选中用红框圈出来
    一个程序猿的跨洋找工作分享
    linux块设备的IO调度算法和回写机制
    基于servlet实现一个web框架
    Java中的条件编译(转)
    Android NDK 使用第三方静态库(转)
    Android 使用动态库或静态库来编译生成动态库(转)
    Android应用运行过程(转)
    android NDK编译(导入).a文件和编译多个so文件(转)
  • 原文地址:https://www.cnblogs.com/ckh2014/p/9571066.html
Copyright © 2011-2022 走看看