马哥linux笔记-CentOS系统启动流程

本文详细解析了CentOS系统从POST自检到用户空间初始化的完整启动流程,包括BIOS引导、GRUB加载器的选择与功能、内核初始化过程、不同运行级别的含义与切换方法,以及SysVinit、Upstart、Systemd三种初始化程序的工作机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

CentOS系统启动流程

linux系统的组成部分:内核+根文件系统、网络协议栈,文件系统、驱动程序、安全功能
内核:进程管理、内存管理,
    IPC:Inte Process Communication:
    消息度列、semerphor、shm、socket;

运行中的系统环境可分为两层:内核空间、用户空间
    用户空间:应用程序(进程或线程)
    内核空间:内核代码(系统调用)
内核设计流派
    单内核设计:把所有功能集成于同一个程序;
    微内核设计:每种功能通过一个单独的子系统实现;
Centos系统的启动流程(PC架构):
1、POST:自动检查各种硬件设备是否完善
        通过芯片ROM:CMOS
        BIOS:Basic input and output system
2、Boot Sequence(BIOS硬件上):按次序查找各个引导设备,第一个有引导程序的设备即为很次启动要用到的设备
    bootloader:引导加载器,是一个安装在硬盘上或者光盘上甚至优盘上的一个引导程序
    windows的引导加载器:ntloader;
    Linux:
        LILO:Linux LOader(早期)(手机上用的很多)
        GRUB:Grand Uniform Bootloader
            版本:GRUB 0.X:又叫做Grub Legacy
                    GRUB 1.X:又叫做:Grub2
    功能:提供一个界面,允许用户选择要启动的系统或不同的内核版本;把选定的内核装载到内存中的特定空间,解压,展开,然后把系统控制权移交给内核
    MBR:Master Boot Record
            共512字节:
            446bytes:bootloader
            64bytes:fat
            2bytes:
    GRUB:
        bootloader:第一阶段
        Partition:文件系统驱动,filesysterm driver,第一点五阶段
        Partition:/boot/grub,第二阶段
加载内核Kernel:
  1. 自身初始化:
  2. 探测可识别到的所有硬件设备;
  3. 加载硬件驱动程序(有可能会借助于randisk加载驱动);
  4. 以只读方式挂载根文件系统(只读方式防止内核存在问题将文件系统破坏);
  5. 运行用户空间第一个应用程序/sbin/init
init程序的类型
CentOS 5:SysV init
        配置文件:/etc/inittab/
CentOS 6:Upstart
        配置文件:/etc/inittab,/etc/init/*.conf
CentOS 7:Systemd                    
        配置文件:/usr/liib//systemd/system/,etc/systemd/system/

ramdisk:帮助内核挂载文件系统(把内存当作硬盘)
        linux内核的特性之一:使用缓冲和缓存来加速对磁盘上文件的访问;
        为了防止在内存上进行二次缓存
        ramdisk-->ramfs
            CentOS 5:initrd
                        工具程序:mkinitrd
            CentOS 6,7:initramfs
                        工具程序:dracut,mkinitrd 
系统初始化流程(内核级别):
            POST-->BootSequence(BIOS)-->Booloader(MBR)-->Kerenl(ramdisk)-->rootfs(readonly)-->/sbin/init()
CentOS 5(启动流程):SysV init
运行级别:系统的运行或维护等目的而设定的一种机制;
0-6:七个级别
    0:关机(shutdown)
    1:单用户模式(single user),root用户,无需认证;维护模式;
    2:多用户模式(multi user);会启动网络功能,但不会启动NFS;仍然是维护模式
    3:多用户模式(multi user)完全功能模式;文本界面
    4:预留级别:目前无特别使用目的,但习惯以同三级别功能使用
    5:多用户模式(mulit user)完全功能模式,图形界面;
    6:    重启模式(reboot);
默认级别:3,5
级别切换:init 级别号
级别查看:
        who -r
        runlevel    
关机:init 0
配置文件(CentOS 5):etc/inittab

每行定义一种操作(action)以及与之对应的process
每行的格式如下:

id:runlevels:action:process

  • id:一个任务的标识符;

  • runlevels:在哪儿些级别下启动此任务;可以是几个数字,也可以是连续几个数字,也可以为空(表示所有级别)

  • action:在什么条件下启动此任务

      wait:等待切换至此任务所在的级别时执行一次;
      respawn:一旦此任务终止时,就自动重启
      initdefault:设定默认运行级别;此时process会省略;
      sysinit:系统初始化,设定初始化方式,此处一般为指定为运行/etc/rc.d/rc.sysint脚本
    
  • process:具体任务;

eg:
id:3:initdefault:
    默认级别为3
si::sysinit:/etc/rc.d/rc.sysinit
    所有级别都会运行这个脚本
l0:0:wait:/etc/rc.d/rc 0
    意味着去启动或关闭/etc/rc.d/rc3.d/目录下的服务脚本所控制服务;
        K*:要停止的服务:K##*,数字越小越优先关闭,依赖别的服务的服务先关闭
        S*:要启动的服务;S##*,数字越小越先启动,被依赖的服务先启动
    rc脚本:接受一个运行级别数字为参数;
        脚本框架:
                for srv in /etc/rc.d/rc#.d/K*;
                        &srv stop
                    
        /etc/init.d/*(/etc/rc.d/init.d/*)脚本执行方式
                #/etc/init.d/SRV_SCRIPT {start|stop|restart|status}
                #/service SRV_SCRIPT {start|stop|restart|status}
chkconfig命令:
查看:chkconfig --list 【name】
添加:chkconfig --add name
    #!/bin/bash
    #
    #chkconfig:LLL NN NN
    #description:
删除:chkconfig --del name
修改制定的链接类型:
    chkconfig 【--level LEVELS】 name < on|off|reset
            --level LEVELS:指定要控制的级别 默认为2345

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

系统初始化脚本:/etcrc.d/rc.sysinit
                    (1)设置主机名
                    (2)设置欢迎信息
                    (3)激活udev和selinux
                    (4)挂载/etc/fstab文件中定义的所有文件系统
                    (5)检测根文件按系统,并且以读写方式重新挂载根文件系统;
                    (6)设置系统时钟
                    (7)根据/etc/sysctl.conf文件来设置内核参数
                    (8)激活lvm及软raid设备
                    (9)激活swap设备;
                    (10)加载额外设备的驱动程序;
                    (11)清理操作;
总结(用户空间的启动流程):/sbin/init(/etc/inittab)
        设置默认运行级别-->运行系统初始化脚本,完成系统初始化-->关闭对应级别下需要停止的服务,启用对应级别下需要开启的服务-->设置登录终端
CentOS 6:
    init程序为:upstart 但依然为/sbin/init,其配置文件都在/etc/init/*.conf,为了兼容centos5依然会读取/etc/inittab,但/etc/inittab/仅用于默认运行级别
        注意:*.conf为upstart风格的配置文件;
            rcS.conf:系统初始化脚本
            rc.conf:启动或关闭服务
            start-ttys.conf:启动哪儿些终端
CentOS 7:与之前版本的服务风格改变很大
    init程序:systemd,配置文件:/etc/user/lib/systemd/system/,/etcsystemd/system/*
    完全兼容SysV脚本机制;因此service命令依然可用
            #systemctl {start|stop|restart|stauts} name[.service]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值