Linux之Centos系统的启动流程详述

概述

了解系统的启动流程,有助于我们了解Linux系统上的一些工作原理,有助于我们深入的理解一个系统的运作方式,那么本篇就以CentOS6系统为例,介绍一下有关Linux系统启动相关的内容,分为一下几个部分

1、Linux系统的一些基础概念

2、CentOS6上的启动流程概述


第一章 Linux系统的一些基础概念

Linux系统的组成部分:内核(kernel)+根文件系统(rootfs)
   rootfs:程序和glibc(GNU发布的libc库)
       库:
           函数集合,function,调用接口(头文件负责描述)
           过程调用:procedure,无返回值
           函数调用:function
       程序:二进制执行程序

   内核:进程管理、内存管理、网络协议栈、文件系统、驱动程序、安全功能
       进程的通信
           IPC:Inter Process Communication
           消息队列、semerphor、shm(共享内存):本地的通信机制
           socket:跨主机的通信机制

运行中的系统环境可分为两层:内核空间、用户空间
   用户空间:应用程序(进程或线程)
   内核空间:内核代码(系统调用)

内核设计流派:
   单内核设计:把所有的功能集成与同一个程序;
       Linux
   微内核设计:每种功能使用一个单独的子系统实现;
       WindowsSolaris

Linux内核特点:
   支持模块化: .ko(kernel object)
       如:文件系统,硬件驱动,网络协议等
   支持模块运行时动态装载或卸载;

启动分区:/boot
   rootfs:遵循FHS目录结构
   如:/bin
,/sbin./lib,/etc,/etc,/proc,/sys,/dev,/boot

   组成部分:
       核心文件:/boot/vmlinuz-VERSION-release
           在www.kernel.org的官方站点有各种内核版本
               mainline:开发版本
               stable:稳定版本
               longterm:长期维护版本
ramdisk(辅助的伪根系统):系统在启动时,根文件系统一定是在某个磁盘分区上,而内核如果没有编译该文件系统的相关驱动,就会导致系统无法正常启动;并且内核需要夹在的各种模块文件,其都在/lib/modules/目录下,此目录也必然是在根目录下,而根无法驱动,也会造成模块无法正常运行,进而不能进入系统.此时ramdisk的作用就体现出来,因为ramdisk是在/boot目录下,/boot目录是有grub的1.5阶段进行驱动的,它的作用就是一个伪根系统,内核在启动之后会驱动他到内存中,来对系统中的相关驱动和模块进行启动和运行,等待所有任务执行之后就会切换给真正磁盘根目录.
   Centos5:/boot/initrd-VERSION-release.img
   Centos 6,7:/boot/initramfs-VERSION-release.img
       模块文件:/lib/modules/VERSION-release
            如果安装了多个内核版本,则对应的目录下就有多个文件,或多个目录


第二章 Centos系统的启动流程

POST(Power On Self Test):加电自检;
   自检主要是检测一下硬件设备是否存在并且正常运行;这些自检的功能是有一个软件程序来实现的,这个软件程序就是BIOS;
   ROM:CMOS
       BIOS:Basic Input and Output System
           BIOS即基本输入输出系统,他是装载与一个硬件芯片CMOS之上.
   ROM+RAM

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

   bootloader:引导加载器,程序;
   linux:
       LILO:LInux LOader
       GRUB:Grand Uniform Bootloader
           GRUB 0.X:Grub legacy
           GRUB 1.X:Grub2
       功能:提供一个菜单,允许用户选择要启动的系统或不通的内核版本;把用户选定的内核装载到RAM中的特定空间中,解压,展开,而后把系统控制权移交给内核;

   MBR:Master Boot Record
       512bytes:
           446bytes:bootloader
           64bytes:fat
           2bytes:55AA

   GRUB:
       bootloader(MBR): 1st stage
       Partltion:filesystem driver;1.5 stage
       Partltion:/boot/grub;2nd stage

   注意:UEFI,GPT

   Kernel:
       自身初始化:
           探测可识别到的所有硬件设备;
           加载硬件驱动程序;(有可能会借助于ramdisk加载驱动)
           以只读方式挂载跟文件系统;
           运行用户空间的第一个应用程序:/sbin/init

       init程序的类型:
           Centos 5-:SysV init
               配置文件:/etc/inittab
                   每行定义一种action以及与之对应的process
                       id:runlevels:action:process
                           id:一个任务的标识符;
                           runlevels:在哪些级别下启动此任务;(#,###,也可以为空,表示所有级别)
                           action:在什么条件下启动此任务;
                               walt:等待切换至此任务所在的级别时执行一次;
                               respawn:一旦此任务终止,则自动重新启动之;
                               initdefault:设定默认运行级别;此时,process省略;
                               sysinit:设定系统初始化方式,此处一般为指定/etc/rc.d/rc.sysinit脚本;
                                   例如:
                                   id:3:initdefault:
                                   si::sysinit:/etc/rc.d/rc.sysinit
                                   l0:0:walt:/etc/rc.d/rc 3
                                   l1:1:walt:/etc/rc.d/rc 1
                                   ..........
                                   l6:6:walt:/etc/rc.d/rc 6
                                       意味着去启动或者关闭/etc/rc3.d/目录下的服务脚本所控制的服务;
                                       K*:要停止的服务;K##*:优先级,数字越小,越是优先关闭;依赖的服务先关闭;而后关闭被依赖的;
                                       S*:要启动的服务;S##*:优先级,数字越小,越是优先开启;被依赖的服务先启动;而依赖的服务后启动;
                                       rc脚本:接受一个运行级别数字为参数;
                                           脚本框架:
                                               for srv in /etc/rc.d/rc#.d/K*;do
                                                   $srv stop
                                               done

                                               for srv in /etc/rc.d/rc#.d/S*;do
                                                   $srv start
                                               done
                                           /etc/init.d/* (/etc/rc.d/init.d/*)脚本执行方式:
                                               # /etc/init.d/SRV_SCRIPT {start|stop|restart|status}
                                               # service SRV_SCRIPT {start|stop|restart|status}
                           process:任务;

           Centos 6-: Upstart
               配置文件:/etc/inittab

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

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

               ramdisk-->ramfs

               Centos 5:initrd
                   工具程序:mkinitrd

               Centos 6,7:initramfs
                   工具程序:dracut,mkinitrd

   系统初始化流程(内核级别):
       POST-->BootSequence(BIOS)-->BootLoader(MBR)-->kernel(ramdisk)-->rootfs(readonly)-->/sbin/init()

       /sbin/init:

           Centos 5: SysV init

               运行级别:为了系统的运行或维护等目的设定的机制;
                   0-6:7个级别
                   0:关机,shutdown
                   1:单用户模式(single user),root用户,无须认证,维护模式;
                   2:多用户模式(multi user),会启动网络功能,但不会启动NFS;维护模式
                   3:多用户模式(multi user),完全功能模式;文本界面;
                   4:预留级别:目前无特别使用目的,但习惯以同3级别功能使用;
                   5:多用户模式(multi user),完全功能模式;图形界面
                   6:重启,reboot

               默认级别:3,5
                   对于服务器一般为3,个人使用为5;

               级别切换: init #

               级别查看:
                   who -r
                   runlevel
                       N表示上一次级别

chkconfig命令:管控/etc/init.d/每个服务脚本在各级别下的启动或关闭状态;
   查看: chkconfig --list [name]

   添加: chkconfig --add name
       能添加的服务的脚本定义格式之一:
           #!/bin/bash
           #
           #chkconfig LLL KK SS
           #description:
               LLL:运行在哪些级别之上
               KK:停止的优先级
               SS:启动的优先级
       能添加的服务的脚本定义格式之二
          ### BEGIN INIT INFO
          # Provides: foo
          # Required-Start: bar
          # Defalt-Start: 2 3 4 5
          # Default-Stop: 0 1 6
          # Description: Foo init script
          ### END INIT INFO
   删除:chkconfig --del name

   修改指定的链接类型:
       chkconfig [--level LEVELS] name <on|off|reset>
           --level LEVELS:指定要控制的级别;默认为2345

注意:正常级别下,最后启动的一个服务S99local没有链接至/etc/init.d下的某脚本,而是链接至了/etc/rc.d/rc.local脚本;为服务脚本的程序期望能开机自动运行时,直接放置于此脚本文件中即可

   tty1:2345:respawn:/usr/sbin/mingetty tty1
   ....
   tty6:2345:respawn:/usr/sbin/mingetty tty6
       (1)mingetty会调用login程序;
       (2)打开虚拟终端的程序除了mingetty之外,还有诸如getty等;

总结(用户空间的启动流程):/sbin/init(/etc/inittab)
   设置默认运行级别-->运行系统初始化脚本,完成系统初始化-->关闭对应级别下需要停止的服务,启动对应级别下需要开启的服务-->设置登录终端[-->启动图形终端]

   系统初始化脚本:/etc/rc.d/rc.sysinit
       (1)设置主机名;
       (2)设置欢迎信息;
       (3)激活udev和selinux;
       (4)挂载/etc/fstab文件中定义的所有文件系统;
       (5)检测跟文件系统,并以读写方式重新挂载根文件系统;
       (6)设置系统时钟;
       (7)根据/etc/sysctl.conf文件的设置,来设定内核参数;
       (8)激活lvm及软raid设备;
       (9)激活swap设备;
       (10)加载额外设备的驱动程序;
       (11)清理操作;

Centos 6:
   init程序:upstat,但依然为/sbin/init,其配置文件:
       /etc/init/*.conf,/etc/inittab(仅用于定义默认运行级别)
           注意:*.conf为upstat风格的配置文件;
               rc.conf
               rcS.conf
               start-tty.conf

Centos 7:
   init程序:systemd,配置文件:/usr/lib/systemd/system/*,/etc/systemd/system/*
   完全兼容SysV脚本机制,因此,service命令依然可用;不过,建议使用systemct命令来控制服务;
       #systemctl {start|stop|restart|status} name[.service]

 

原创文章,作者:Kartik,如若转载,请注明出处:http://www.178linux.com/49685

(0)
上一篇 2016-09-29 10:10
下一篇 2016-09-29 21:31

相关推荐

  • ​从实验来了解grub

    实验一为grub设置密码 先看一看grub是怎么样的 grub有两个版本 grub: GRand Unified Bootloader grub 0.x: grub legacy grub 1.x: grub2  Note:grub 1.x是完全重写的只不过是保留grub 0.x的工作机制。 2.利用grub自带命令生成密码grub-md5-cry…

    Linux干货 2016-06-09
  • rsync+inotify实现实时同步案例

    随着应用系统规模的不断扩大,对数据的安全性和可靠性也提出的更好的要求,rsync在高端业务系统中也逐渐暴露出了很多不足,首先,rsync同步数据时,需要扫描所有文件后进行比对,进行差量传输。如果文件数量达到了百万甚至千万量级,扫描所有文件将是非常耗时的。而且正在发生变化的往往是其中很少的一部分,这是非常低效的方式。其次,rsync不能实时的去监测、同步数据,…

    Linux干货 2016-10-30
  • CentOS7编译安装LAMP—php-fpm

    inux的环境是: [root@localhost ~]# lsb_release -a LSB Version:     :core-4.1-amd64:core-4.1-noarch Distributor ID: CentOS Description:     CentOS…

    Linux干货 2016-12-21
  • 基于Cobbler实现多版本操作系统自动部署

    前言     在生产环境中,当需要批量部署几十甚至上百台服务器时,实现自动化安装操作系统尤为重要,按照传统的光盘引导安装是不可想象的;此前我们通过pxe+kickstart简单实现了自动化安装,但只能实现单一版本安装,当需要部署不同版本或不同引导模式(BIOS、EFI)时,此种方式就不够灵活。而Cobbler正是为了解…

    Linux干货 2015-08-11
  • N25第7周作业

    1、创建一个10G分区,并格式为ext4文件系统;   (1) 要求其block大小为2048, 预留空间百分比为2, 卷标为MYDATA, 默认挂载属性包含acl;    (2) 挂载至/data/mydata目录,要求挂载时禁止程序自动运行,且不更新文件的访问时间戳; ]# fdisk /dev/sdb #划出一个…

    Linux干货 2017-02-21
  • 用户管理+文本处理+文件查找

    用户管理 erter useradd (使用频率2) /etc/default/useradd用户模板文件说明 /etc/login.defs 关于新建用户的默认配置文件 批量创建用户和修改密码 usermod 修改用户的属性 chpasswd修改密码 2.chage option user 3.finger user 查看用户信息 4.chfn user …

    Linux干货 2017-04-09