centos7的启动过程

  • 开机启过程
  • POST—>BOOT
        SEQUENCE—> BOOTLOADER—>KERNEL +
        INITRAMFS(INITRD)—>ROOTFS—>/sbin/init
  • POST:加电自检
    • 当开机按下电源按钮后,计算机开始加电,主板上的BIOS或UEFI基本输入输出程序开始对硬件进行检查,检查内存,CPU等等吧,当检测到错误的时候机器会中断或者启动不了,这个做过电脑维护的人都知道,内存氧化可导至开不了机,还有的机器如果没插鼠标键盘自检也不会通过卡在那里了,不会继续往下走。
  • Boot
        sequence:选择引导顺序

    • 当自检通过后,接着就要选择引导介质或方式,是通过光盘启动,硬盘启动,网络启动,还是U盘启动,这些也是在BIOS中设定的,所以设定的第一启动项是哪个就从那个开始引导,这个装过WINDOWS的都很熟悉了。
  • Bootloader:引导加载器
    • 确定引导介质后便开始从介质中装载引导程序如grub2,这个是一个微小程序,我们知道MBR引导记录大小为512字节,其中前446个字节就是Bootloader,主要用来引导用户选择要启动的系统或不同的内核版本,把用户选定的内核装载到RAM中的特定空间中,解压,展开,而后把系统控制权移交给内核。
    • grub2就是Linux中Bootloader程序,由于MBR记录限制,所以grub2分为两个部分:
    • 1.在MBR引导记录中,大小为446字节,主要功能是引导启动介质的grub主体文件
    • 2.partition,/boot/grub[2],此为grub的主体。
  • KERNEL +
        INITRAMFS(INITRD)—>ROOTFS :加载内核

    • 这时候kernel开始初始化,探测可识别的硬件设备,加载硬件启动程序。以只读方式加载根文件系统
    • kernel在内存中加载时,为了模拟系统环境,会生成一个ramdisk文件,来进行下一步操作,等到加载到真正的根文件系统时,就会退出ramdisk,切换到真正的根文件系统中去。
    • ramdisk:内存上临时虚拟的系统
    • ramdisk(虚拟磁盘,双缓冲,双缓存)---->
           ramfs(虚拟文件系统)
    • centos5:initrd
    • 工具程序:mkinitrd
    • centos6,7:initramfs
    • 工具程序:dracut,mkinitrd
  • /sbin/init:运行用户空间的第一个应用程序
    • init:
    • Centos 5: SysV init       配置文件:/etc/inittab
    • Centos 6: Upstart        
           配置文件:/etc/inittab;/etc/init/*.conf(主要)
    • Centos 7: systemd       
           配置文件:/etc/systemd/system;/usr/lib/systemd/system
  • 至此,内核空间就已经启动完毕,内核启动完成接着开始启动用户态启动过程。systemd是个守护进程,pid号为1,后面所有启动的服务或进程都是systemd的子进程及子进程的子进程。
  • 那么用户态的启动顺序又是什么样的呢?
    • 设置默认允许级别—>初始化脚本,完成系统初始化--->关闭及启动对应级别下的服务----->设置登录终端----->[启动图形终端]
  • Systemd新特性:

    • 系统引导时实现服务并行启动,没有顺序之分
    • 按需激活进程
    • 支持系统状态快照
    • 基于依赖关系定义服务控制逻辑
  • 关键特性:
    • 基于socket的激活机制:socket与服务程序分离;按需激活程序或服务,可并行启动
    • 基于bus的激活机制:
    • 基于device的激活机制:当某个硬件设备变得可用时就可激活某设备
    • 基于path的激活机制
    • 系统快照:保存各unit的当前状态信息于持久存储设备中
    • 向后兼容sysv
           init脚本
  • 不兼容:
    • systemctl命令固定不变,非由systemd启动的服务,systemctl无法与之通信
  • 核心概念:unit
    • 配置文件进行标识和配置,文件中主要包含了系统服务,监听socket,保存的系统快照以及其它与init相关的信息,保存至:
    • /usr/lib/systemd/system
    • /run/systemd/system
    • /etc/systemd/system
  • unit的类型
    • Service
           unit:文件扩展名为.service 无需执行权限,用于定义系统服务
    • Target
           unit:文件扩展名为.target,用于模拟实现“运行级别”
    • Device
           unit:文件扩展名为.device,用于定义内核识别的设备
    • Mount
           unit:文件扩展名为.mount,定义文件系统挂载点
    • Socket
           unit:文件扩展名为.socket,用于标识进程间通信用的socket文件
    • Snapshot
           unit:文件扩展名为.snapshot,管理系统快照
    • Swap
           unit:文件扩展名为.swap,用于标识swap设备
    • Automount
           unit:文件扩展名为.automount,文件系统的自动挂载点
    • Path
           unit:文件扩展名为.path,用于定义文件系统中的一个文件或目录
  • 管理系统服务
    • 启动:systemctl
           start name.service
    • 停止:systemctl
           stop name .service
    • 重启:systemctl
           restart name.service
    • 重载:systemctl
           reload name.service
    • 条件式重启:systemctl
           try-restart name.service
    • 查看某服务当前是否运行:systemctl
           is-active name.service
    • 查看所有已经激活的服务:systemctl
           list-units –type service systemctl list-units –type service –-all
    • 开机自启动:systemctl
           enable name.service
    • 开机不启动:systemctl
           disable name.service
    • 查看所有服务开机自启动状态:systemctl
           list-unit-files –-type service
    • 查看服务是否开机自启:systemctl
           is-enabled name.service
    • 查看服务的依赖关系:systemctl
           list-dependencies name.service
    • 禁止设定为开机自启:systemctl
           mask name.service
    • 取消禁止设定为开机自启:systemctl
           unmask name.service
  • Target
        units:(模拟运行级别)

    • unit配置文件,以.target后辍名结尾
    • 关机:runlevel0.target,poweroff.target
    • 救援:runlevel1.target,rescue.target
    • 多用户:multi-user.target
    • 图形:graphical.target
    • 重启:reboot.target
    • 级别切换:systemctl
           isolate name.target
    • 查看级别:systemctl
           list-units –-type target       systemctl
           get-default
    • 设置级别:systemctl
           set-default name.target
    • 切换至紧急救援模式:systemctl
           rescue
    • 切换至emergency模式:systemctl
           emergency(服务不加载不启动,驱动不加载,更彻底)
  • 其它常命令
    • 关机:systemctl
           halt,systemctl poweroff
    • 重启:systemctl
           reboot
    • 挂起:systemctl
           suspend
    • 快照:systemctl
           hibernate
    • 快照并挂起:systemctl
           hybrid-sleep
  • 常规启动流程

用粗体下划线标识的目标单元经常被用作启动目标。有两种方法可以指定启动目标:
(1)使用 systemd.unit= 内核命令行参数(参见systemd手册);

(2)使用
default.target 软连接。
因为 timers.target 以异步方式包含在 basic.target 中,所以 timer 单元可以依赖于在 basic.target
之后才启动的服务。

local-fs-pre.target
             |
             v
     (各个 mounts 与       (各个 swap       (各个加密块设备
      fsck services)        devices)            devices)        (各个底层服务        (各个底层API虚拟
             |                  |                  |             services: udevd,     文件系统 mounts:
             v                  v                  v             tmpfiles, random     mqueue, configfs,
      local-fs.target      swap.target     cryptsetup.target     seed, sysctl ...)      debugfs ...)
             |                  |                  |                    |                    |
             \__________________|_________________
| ___________________|____________________/
                                                 
\|/
                                                  
v
                                           
sysinit.target
                                                  
|
             
____________________________________/|\________________________________________
             /                  |                  |                    |                    \
             |                  |                  |                    |                    |
             v                  v                  |                    v                    v
       (各个 timers)      (各个 paths)             |             (各个 sockets)        rescue.service
             |                  |                  |                    |                    |
             v                  v                  |                    v                    v
       timers.target      paths.target             |             sockets.target        rescue.target
             |                  |                  |                    |
             v                  \_________________ |
___________________/
             .                                   
\|/
             . . . . . . . . . . . . . .
. . . . . v
                                            
basic.target
                                                  
|
             
____________________________________/|                                
emergency.service
             /                  |                  |                                        
|
             |                  |                  |                                        
v
             v                  v                  v                                 emergency.target
         display-        (图形界面所必须    (各个系统服务)
     manager.service      的各个系统服务)          |
             |                  |                  v
             |                  |         multi-user.target
             |                  |                  |
             \_________________ | _________________/
                              
\|/
                               
v
                       graphical.target

  • initrd 启动流程

basic.target
                                                  
|                                
emergency.service
                           
______________________/|                                        
|
                           /                       |                                        
v
                           |                  sysroot.mount                         
emergency.target
                           |                       |
                           |                       v
                           |             initrd-root-fs.target
                           |                       |
                           |                       v
                           v            initrd-parse-etc.service
                    (各个自定义的                  |
                   initrd services)                v
                           |            (sysroot-usr.mount 以及
                           |            fstab 中带有 x-initrd.mount
                           |               标记的各个挂载点)
                           |                       |
                           |                       v
                           |                initrd-fs.target
                          
\______________________ |
                                                 
\|
                                                  
v
                                             
initrd.target
                                                  
|
                                                  
v
                                        
initrd-cleanup.service
                                (使用
isolates 启动 initrd-switch-root.target)
                                                  
|
                                                  
v
                           
______________________/|
                           /                       v
                           |       
initrd-udevadm-cleanup-db.service
                           v                       |
                   (各个自定义的                   |
                  initrd services)                 |
                          
\______________________ |
                                                 
\|
                                                  
v
                                      
initrd-switch-root.target
                                                  
|
                                                  
v
                                      
initrd-switch-root.service
                                                  
|
                                                  
v
                                        
切换到主机上的操作系统

  • 关机流程

systemd
系统在关机时同样遵循固定的流程,具体如下图

(与所有系统服务互斥)  
(与所有文件系统 mounts, swaps, cryptsetup devices 互斥)
                              |                                     
|
                              v                                     
v
                       shutdown.target                        
umount.target
                              |                                      |
                             
\______________________  
_____________/
                                                    
\ /
                                                     
v
                                            
(各个底层 services)
                                                     
|
                                                     
v
                                               
final.target
                                                     
|
               
_____________________________________/
\_________________________________
               /                         |                        |                      \
               |                         |                        |                      |
               v                         v                        v                      v
    systemd-reboot.service   systemd-poweroff.service   systemd-halt.service   systemd-kexec.service
               |                         |                        |                      |
               v                         v                        v                      v
        reboot.target           poweroff.target          halt.target          kexec.target

用粗体下划线标识的目标单元经常被用作关机目标。

时间: 2024-12-14 18:47:48

centos7的启动过程的相关文章

centos7启动过程及systemd祥细说明

开机启过程 POST->BOOT SEQUENCE-> BOOTLOADER->KERNEL + INITRAMFS(INITRD)->ROOTFS->/sbin/init POST:加电自检 当开机按下电源按钮后,计算机开始加电,主板上的BIOS或UEFI基本输入输出程序开始对硬件进行检查,检查内存,CPU等等吧,当检测到错误的时候机器会中断或者启动不了,这个做过电脑维护的人都知道,内存氧化可导至开不了机,还有的机器如果没插鼠标键盘自检也不会通过卡在那里了,不会继续往下走.

Linux系统--Linux的启动过程

Linux系统--Linux启动过程 CentOS 启动流程: POST --> Boot Sequence(BIOS) --> Boot Loader (MBR) --> Kernel(ramdisk) --> rootfs --> switchroot --> /sbin/init -->(/etc/inittab, /etc/init/*.conf) --> 设定默认运行级别 --> 系统初始化脚本 --> 关闭或启动对应级别下的服务 --

Centos7.4安装过程

安装CentOS7.4步骤: 打开虚拟机软件VMware Workstation 点击 左上角"文件-新建虚拟机", 选择"自定义"下一步. 默认选择"下一步". 选择"稍后安装操作系统-下一步" 根据上图所示选择后,点击"下一步" 这里更改虚拟机的名称和安装路径,更改完成后单击"下一步" 这个可以根据实际情况选择处理器的数量和核心数量,选择后点击"下一步" 设置虚拟

IPv6通讯原理(1) - 不能忽略的网卡启动过程

本文主题:通过抓包分析,深入观察网卡启动过程的每个步骤,从而逐步掌握通讯原理. ??小慢哥的原创文章,欢迎转载 目录 ? 一. 为什么不能忽略网卡启动过程 ? 二. 实验环境 ? 三. 网卡启动前/后的样子 ? 四. 结论写在前 ? Step1. 生成"链路本地地址" ? Step2. 生成"被请求节点多播地址" ? Step3. "多播成员报告" ? Step4. "重复地址检测" ? Step5. "无状态地址自

VMware安装Centos7超详细过程(图文)

VMware安装Centos7超详细过程(图文) 原文:https://www.jianshu.com/p/ce08cdbc4ddb?utm_source=tuicool&utm_medium=referral 本篇文章主要介绍了VMware安装Centos7超详细过程(图文),具有一定的参考价值,感兴趣的小伙伴们可以参考一下 1.软硬件准备 软件:推荐使用VMwear,我用的是VMwear 12 镜像:CentOS7 ,如果没有镜像可以在官网下载 :http://isoredirect.cen

VMware 安装 Centos7 超详细过程

VMware 安装 Centos7 超详细过程 分类 编程技术 1.软硬件准备 软件:推荐使用 VMware,我用的是 VMware 12 镜像:CentOS6 ,如果没有镜像可以在阿里云下载 https://mirrors.aliyun.com/centos/ 硬件:因为是在宿主机上运行虚拟化软件安装centos,所以对宿主机的配置有一定的要求.最起码I5CPU双核.硬盘500G.内存4G以上. 2.虚拟机准备 1.打开VMware选择新建虚拟机 2.典型安装与自定义安装 典型安装:VMwar

tomcat启动过程报the JDBC Driver has been forcibly unregistered问题的修复过程

最近两天在整理关于flume的总结文档,没有启动过tomcat.昨天晚上部署启动,发现报了如题的错误,全文如下: 严重: The web application [/oa-deploy] registered the JBDC driver [com.microsoft.sqlserver.jdbc.SQLServerDriver] but failed to unregister it when the web application was stopped. To prevent a mem

Linux启动过程笔记

Linux启动过程 1.启动流程(BIOS->MBR:Boot Code->引导GRUB->加载内核->执行init->runlevel) 2./boot/grub/下有多个文件   其中stage1为MBR镜像(512字节) stage2为引导程序 3./boot/grub/grub.conf为引导的配置文件 default=0#默认加载下边哪个系统 timeout=3#引导等待时间 splashimage=(hd0,1)/boot/grub/splash.xpm.gz#引

SpringMVC启动过程

1.  对于一个web应用,其部署在web容器中,web容器提供一个其一个全局的上下文环境,这个上下文环境就是ServletContext,它为后面的spring IoC容器提供宿主环境: 2.  web.xml中有配置ContextLoaderListener,也可以自定义一个实现ServletContextListener接口的Listener方法,web.xml中的配置实例如下: <listener> <listener-class>com.manager.init.Syst