zoukankan      html  css  js  c++  java
  • 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可以使开机初始化速度加快
    执行完以上操作后,主机会陷入无尽的重启状态,

    人生还有意义。那一定是还在找存在的理由
  • 相关阅读:
    python 的基础 学习 第六天 基础数据类型的操作方法 字典
    python 的基础 学习 第五天 基础数据类型的操作方法
    python 的基础 学习 第四天 基础数据类型
    ASP.NET MVC 入门8、ModelState与数据验证
    ASP.NET MVC 入门7、Hellper与数据的提交与绑定
    ASP.NET MVC 入门6、TempData
    ASP.NET MVC 入门5、View与ViewData
    ASP.NET MVC 入门4、Controller与Action
    ASP.NET MVC 入门3、Routing
    ASP.NET MVC 入门2、项目的目录结构与核心的DLL
  • 原文地址:https://www.cnblogs.com/shiqi17/p/14752698.html
Copyright © 2011-2022 走看看