• systemctld 启动理解


    原文:https://blog.csdn.net/sinat_36888624/article/details/78544084

    一,systemd是什么?有什么用?
    systemd是Linux下的一种init软件,是 Linux 下的一款系统和服务管理器,由Lennart Poettering(英语:Lennart Poettering)带头开发。其开发目标是提供更优秀的框架以表示系统服务(英语:Service (systems architecture))间的依赖关系,并以此实现系统初始化时服务的并行启动,同时达到降低Shell的系统开销(英语:Computational overhead)的效果。
    systemd 兼容 SysV 和 LSB 的启动脚本。

    systemd的特性有:
    支持并行化任务
    同时采用socket式与D-Bus总线式激活服务;
    按需启动守护进程(daemon);
    利用 Linux 的 cgroups 监视进程;
    支持快照和系统恢复;
    维护挂载点和自动挂载点;
    各服务间基于依赖关系进行精密控制。

    systemd基本工具
    检视和控制systemd的主要命令是systemctl。该命令可用于查看系统状态和管理系统及服务.

    systemctl start 单元 #使用单元
    systemctl stop 单元 #停止单元
    systemctl status 单元 #查看单元的状态
    systemctl restart 单元 #重启单元

    什么是单元?
    一个单元配置文件可以描述如下内容 之一 :系统服务(.service)、挂载点(.mount)、sockets(.sockets 、系统设备、交换分区/文件、启动目标(target)、文件系统路径、由 systemd 管理的计时器

    二,系统引导过程概述:

    传统的Linux系统启动过程主要由著名的init进程(也被称为SysV init启动系统)处理,而基于init的启动系统被认为有效率不足的问题,systemd是Linux系统机器的另一种启动方式,宣称弥补了以传统Linux SysV init为基础的系统的缺点。

    传统的 init启动过程

    - 在我们打开Linux电脑的电源后第一个启动的进程就是init。分配给init进程的PID是1。它是系统其他所有进程的父进程。当一台Linux电脑启动后,处理器会先在系统存储中查找BIOS,之后BIOS会检测系统资源然后找到第一个引导设备,通常为硬盘,然后会查找硬盘的主引导记录(MBR),然后加载到内存中并把控制权交给它,以后的启动过程就由MBR控制。

    - 主引导记录会初始化引导程序(Linux上有两个著名的引导程序,GRUB和LILO,80%的Linux系统在用GRUB引导程序),这个时候GRUB或LILO会加载内核模块。内核会马上查找/sbin下的“init”程序并执行它。从这里开始init成为了Linux系统的父进程。init读取的第一个文件是/etc/inittab,通过它init会确定我们Linux操作系统的运行级别。它会从文件/etc/fstab里查找分区表信息然后做相应的挂载。然后init会启动/etc/init.d里指定的默认启动级别的所有服务/脚本。所有服务在这里通过init一个一个被初始化。在这个过程里,init每次只启动一个服务,所有服务/守护进程都在后台执行并由init来管理。

    - 关机过程差不多是相反的过程,首先init停止所有服务,最后阶段卸载文件系统。

    systemd启动过程

    打开电源后电脑所做的第一件事情就是BIOS初始化。BIOS会读取引导设备设定,定位并传递系统控制权给MBR(假设硬盘是第一引导设备)。
    MBR从Grub或LILO引导程序读取相关信息并初始化内核。接下来将由Grub或LILO继续引导系统。如果你在grub配置文件里指定了systemd作为引导管理程序,之后的引导过程将由systemd完成。Systemd使用“target”来处理引导和服务管理过程。这些systemd里的“target”文件被用于分组不同的引导单元以及启动同步进程。
    systemd执行的第一个目标是default.target。但实际上default.target是指向graphical.target的软链接。Linux里的软链接用起来和Windows下的快捷方式一样。文件Graphical.target的实际位置是/usr/lib/systemd/system/graphical.target

    以流程来看:
    通电——>进入初始化阶段——>bios 初始化——>grub2 磁盘引导阶段——>grub2 文件引导阶段——> 指定boot所在分区——>启动内核,只读挂在 / 设备启动——>init 程序进入初始化阶段——> 启动 systemd 初始化进程——>读取 /etc/systemd/中的文件——>启动程序——>启动登陆环境
    grub文件引导阶段

    由文件/boot/grub2/grub.cfg控制流程:
    指定/boot分区位置 —–> 加载内核 —–> 启动系统初始化进程 —–> grub2-mkconfig
    内核引导阶段

    检测硬件设备 —–> 设备驱动初始化 —–> 将/只读挂载 —–> 载入初始进程systemd —–> 内核文件丢失请重新安装内核
    systemd初始化

    开启selinux和systemd-tools —–> 加载内核参数 —–> 加载系统时钟,键盘,主机名称 —–> 读写挂载/文件系统 —–> 激活raid, lvm设备 —–> 激活系统配额 —–> 启动multi-user.target.wants中的所有服务脚本 —–> 启用虚拟控台 —–> 启动图形

    三,开机启动级别:
    1,开机启动级别:
    runlever0.target -> poweroff.target //关机’
    runlever1.target -> rescue.target //单用户模式
    runlever2.target -> multi-user.target //多用户模式,不支持NFS
    runlever3.target -> multi-user.target //完整多元化模式
    runlever4.target -> multi-user.target //未定义使用
    runlever5.target -> grapical.target //带有图形界面的多用户使用
    runlever6.target -> reboot.target //重启
    例如开机自启动就是因为添加了链接到脚本上,开机就会自动运行脚本启动,有无图形也是因为链接到有无图形的脚本上。

    2.设定开机启动级别:
    systemctl set-default 启动级别
    /etc/systemd/system/defaults.target

    四,关于systemd的实验:

    1,主机陷入无尽的重新启动,可是不能真正重启的问题:
    [root@server1 system]# ls -l default.target
    lrwxrwxrwx. 1 root root 40 Jul 10 2014 default.target -> /usr/lib/systemd/system/graphical.target
    可以看见默认目标链接再图形目标上
    [root@server1 system]# systemctl set-default reboot.target #重新设置默认目标
    rm ‘/etc/systemd/system/default.target’
    ln -s ‘/usr/lib/systemd/system/reboot.target’ ‘/etc/systemd/system/default.target’
    可以看见执行设置默认目标的操作时,发生的子操作为先删除原有的链接,再建立要设置的链接。
    [root@server1 system]# vim /etc/sysconfig/selinux #关闭selinux可以使开机初始化速度加快
    执行完以上操作后,主机会陷入无尽的重启状态,

    人生还有意义。那一定是还在找存在的理由
  • 相关阅读:
    Application的使用(使用,及要注意的内存泄露问题)
    ANDROID 2.3 HOTPLUG input设备event处理以及hotplug检测
    博客园随笔添加自己的版权信息
    还贷的那些事III——等额还贷的计算
    计算机中的颜色IX——总述:RGB和HSV快速转换
    还贷的那些事II——等本还贷的计算
    计算机中的颜色VII——快速计算纯色的偏转
    还贷的那些事I——还贷的基本概念
    计算机中的颜色VIII——快速计算颜色的偏转
    计算字符串的相似度(VB2005)
  • 原文地址:https://www.cnblogs.com/shiqi17/p/14752698.html
Copyright © 2020-2023  润新知