写在前面

为什么要回过头来复习linux的system的,最近在研究DELL EMC的PowerStore存储系统,其底层是基于CoreOS开发的,这套操作系统是基于Systemd来设计的。所以要深入了解PowerStore就必须对systemd做详细了解。

systemd 是一个用于 Linux 系统的初始化系统(init system)和服务管理器,旨在取代传统的 System V init 系统。它不仅负责启动操作系统,还管理服务、日志、设备、挂载点等系统资源。systemd 由 Lennart Poettering 和 Kay Sievers 等人开发,自 2010 年左右开始被广泛采用,现已成为许多主流 Linux 发行版(如 RHEL、Ubuntu、Debian、Fedora、Arch Linux 等)的默认初始化系统。

以下是对 systemd 的详细解释,包括其概念、功能、组件以及在 Linux 生态中的作用。

1. systemd 的核心概念

定义

  • 初始化系统:systemd 是 Linux 内核启动后运行的第一个用户空间进程(PID 1),负责初始化系统、启动服务并管理整个系统的运行。
  • 服务管理器:它管理系统服务的启动、停止、重启、状态检查等操作。
  • 系统管理工具:systemd 提供了一套工具,用于管理日志、设备、定时任务、网络配置等。

设计目标

  • 并行化:加速系统启动,通过并行启动服务减少启动时间。
  • 统一管理:为各种系统资源(如服务、设备、挂载点)提供一致的管理接口。
  • 依赖管理:自动处理服务之间的依赖关系。
  • 现代化支持现代 Linux 特性,如 cgroups、namespace、容器化等。在PowerStore中大量使用docker。
  • 日志集成:通过 systemd-journald 提供结构化的日志管理。所有PowerStore的日志管理都是通过journald来管理的,这个和以前的存储管理方式是不同的。

核心理念

  • 单元(Units):systemd 将所有管理的资源抽象为“单元”,如服务(.service)、挂载点(.mount)、定时器(.timer)等。
  • 声明式配置:通过配置文件(通常在 /etc/systemd/ 或 /lib/systemd/)定义单元的行为,而不是传统的 shell 脚本。
  • 事件驱动:systemd 监控系统事件(如设备插入、服务启动),动态响应。

2. systemd 的主要功能

  1. 系统初始化
    • 启动内核后,systemd 作为 PID 1 接管系统,加载必要的服务、文件系统、网络等。
    • 支持并行启动服务,优化启动速度。
    • 示例:启动后加载 sshd.service、network.target 等。
  2. 服务管理
    • 管理服务的生命周期(启动、停止、重启、启用、禁用)。
    • 使用 systemctl 命令控制服务。
    • 示例:
      systemctl start docker
      systemctl enable sshd
      systemctl status network
  3. 依赖管理
    • 自动解析服务之间的依赖关系(如 docker.service 依赖 network-online.target)。
    • 通过 Wants、Requires、After 等关键字定义依赖。
  4. 日志管理
    • 通过 systemd-journald 收集和存储系统日志,存储在 /var/log/journal/(持久化)或 /run/log/journal/(内存)。
    • 使用 journalctl 查询日志。
    • 示例:
      journalctl --unit docker
      journalctl -p err
  5. 设备管理
    • 管理硬件设备(如 USB、磁盘)的挂载和卸载。
    • 使用 .device 和 .mount 单元。
    • 示例:
      systemctl status dev-sda1.device
  6. 定时任务
    • 使用 .timer 单元替代传统的 cron,提供更灵活的定时任务管理。
    • 示例:
      systemctl list-timers
  7. 资源控制
    • 利用 cgroups 限制服务的 CPU、内存、IO 等资源。
    • 示例:
      systemctl set-property docker.service MemoryLimit=2G
  8. 网络管理
    • 通过 systemd-networkd 和 systemd-resolved 管理网络配置和 DNS 解析。
    • 示例:
      networkctl status
  9. 容器和虚拟化支持
    • 通过 systemd-nspawn 提供轻量级容器管理。
    • 支持与 Docker、Podman 等容器技术集成。

3. systemd 的核心组件

systemd 不仅仅是一个单一的程序,而是一套工具和守护进程的集合。主要组件包括:

  1. systemd(主进程):
    • 作为 PID 1 运行,负责初始化和管理单元。
    • 解析 /etc/systemd/system/ 和 /lib/systemd/system/ 中的单元文件。
  2. systemctl
    • 用户命令行工具,用于管理服务、单元和系统状态。
    • 示例:
      systemctl restart sshd
      systemctl list-units
  3. journald
    • 日志管理守护进程,收集系统和服务的日志。
    • 存储结构化日志,支持通过 journalctl 查询。
    • 示例:
      journalctl -f
  4. logind
    • 管理用户登录会话,处理多用户、多座位环境。
    • 示例:
      loginctl list-sessions
  5. networkd
    • 管理网络接口和配置。
    • 示例:
      networkctl list
  6. resolved
    • 提供 DNS 解析服务。
    • 示例:
      resolvectl status
  7. timedated
    • 管理系统时间和时区。
    • 示例:
      timedatectl set-timezone Asia/Shanghai
  8. udevd
    • 管理设备事件(如插入 USB 设备)。
    • 示例:
      udevadm monitor

4. systemd 的单元类型

systemd 管理的所有资源都被抽象为“单元”(Units),每种单元有特定的文件后缀。常见单元类型包括:

单元类型

后缀

用途

Service

.service

管理服务(如 sshd、docker)

Target

.target

定义一组单元的集合(如 multi-user.target)

Mount

.mount

管理文件系统挂载点

Device

.device

管理硬件设备

Socket

.socket

管理套接字(如网络连接)

Timer

.timer

管理定时任务

Path

.path

基于文件系统路径的触发器

Slice

.slice

资源控制分组(基于 cgroups)

5. systemd 在 Linux 生态中的地位

普及程度

  • 主流发行版:RHEL(7+)、CentOS(7+)、Ubuntu(16.04+)、Debian(8+)、Fedora、Arch Linux 等默认使用 systemd。
  • 非 systemd 发行版:一些发行版(如 Alpine Linux、Devuan、Void Linux)选择不使用 systemd,而是使用其他初始化系统(如 OpenRC、runit)。

优势

  • 性能:并行启动和依赖管理显著提高启动速度。
  • 一致性:为服务、设备、日志等提供统一的接口。
  • 现代化:支持 cgroups、容器、复杂依赖关系。
  • 生态整合:与 journald、networkd 等组件无缝集成。

争议

  • 复杂性:systemd 功能庞大,被批评为“过于复杂”,违背 Unix 哲学(单一职责)。
  • 兼容性:替换传统工具(如 cron、inetd),可能导致脚本不兼容。
  • 依赖性:许多软件开始依赖 systemd,限制了非 systemd 系统的选择。

与传统 init 系统的对比

特性

systemd

System V Init

启动方式

并行启动

串行启动

依赖管理

自动解析

手动配置(脚本顺序)

日志管理

集成 journald

依赖 syslog(rsyslog 等)

配置方式

声明式(单元文件)

脚本式(/etc/init.d/)

功能范围

广泛(服务、设备、日志等)

仅限服务启动

复杂性

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/81697.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/81697.shtml
英文地址,请注明出处:http://en.pswp.cn/diannao/81697.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux 环境下 Mysql 5.7 数据定期备份

目录 一、创建数据备份脚本二、查看备份日志三、数据库数据恢复 备份策略: 系统环境 openEuler 22.03 (LTS-SP4) 单机备份 每天凌晨2点,指定数据库表全量备份,只保留近7次备份数据 每次的脚本执行,将会记录执行结果到日志&#xf…

C 语言字符输入:掌握 getchar 和 scanf 的用法与陷阱

各类资料学习下载合集 ​​https://pan.quark.cn/s/8c91ccb5a474​​ C 语言字符输入:掌握 getchar 和 scanf 的用法与陷阱 你好!在 C 语言编程中,与用户进行交互最基本的方式就是通过标准输入和标准输出。我们之前探讨了如何使用 ​​printf​​ 和 ​​putchar​​ 进行…

【React】 Hooks useTransition 解析与性能优化实践

1.背景 useTransition 是 React 18 引入的一个并发模式下的 Hook,用于区分紧急和非紧急的状态更新,提升应用的响应性和用户体验;它可以管理 UI 中的过渡状态,特别是在处理长时间运行的状态更新时。它允许你将某些更新标记为“过渡”状态&…

蘑菇管理——AI与思维模型【94】

一、定义 蘑菇管理思维模型是一种形象地描述组织对待新员工或初入职场者的管理方式及相关现象的思维模型。它将新员工或初入职场者比作蘑菇,这些人在初期往往被置于阴暗的角落(不受重视的部门,或打杂跑腿的工作),浇上…

c++STL——set和map的使用

文章目录 set和map的使用set系列声名和定义默认成员函数迭代器set的增删查lower_bound和upper_boundInsert接口pair类 对于查找的另一种使用 set和multiset的区别 map系列声名和定义pair类的进一步介绍默认成员函数map的增删查map的数据修改map和multimap的差异 set和map的使用…

什么是DGI数据治理框架?

DGI数据治理框架是由数据治理研究所(Data Governance Institute, DGI)提出的一套系统性方法论,旨在帮助企业或组织建立有效的数据治理体系,确保数据资产的高质量管理、合规使用和价值释放。以下是关于DGI数据治理框架的核心内容&a…

chrome 浏览器怎么不自动提示是否翻译网站

每次访问外国语网页都会弹出这个对话框,很是麻烦,每次都得手动关闭一下。 不让他弹出来方法: 设置》语言》首选语言》添加语言,搜索英语添加上 如果需要使用翻译,就点击三个点,然后选择翻译

LeetCode 热题 100 54. 螺旋矩阵

LeetCode 热题 100 | 54. 螺旋矩阵 大家好,今天我们来解决一道经典的算法题——螺旋矩阵。这道题在LeetCode上被标记为中等难度,要求我们按照顺时针螺旋顺序返回矩阵中的所有元素。下面我将详细讲解解题思路,并附上Python代码实现。 问题描述…

生成式AI将重塑的未来工作

在人类文明的长河中,技术革命始终是推动社会进步的核心动力。从蒸汽机的轰鸣到互联网的浪潮,每一次技术跃迁都在重塑着人类的工作方式与生存形态。而今,生成式人工智能(Generative AI)的崛起,正以超越以往任何时代的速度与深度,叩响未来工作范式变革的大门。这场变革并非…

【2025软考高级架构师】——2024年05月份真题与解析

摘要 本文内容是关于2025年软考高级架构师考试的相关资料,包含2024年05月份真题与解析。其中涉及体系结构演化的步骤、OSI协议中能提供安全服务的层次、数据库设计阶段中进行关系反规范化的环节等知识点,还提及了软考高级架构师考试的多个模块&#xff…

KAG:通过知识增强生成提升专业领域的大型语言模型(三)

目录 摘要 Abstract 1 Schema 2 Prompt 3 KAG-Builder 3.1 reader 3.2 splitter 3.3 extractor 3.4 vectorizer 3.5 writer 3.6 可选组件 4 示例 总结 摘要 本周深入学习了 KAG 项目中的 Schema、Prompt 以及 KAG-Builder 相关代码知识,涵盖了其定义、…

Gitea windows服务注册,服务启动、停止、重启脚本

修改配置文件 查看COMPUTERNAME echo %COMPUTERNAME%进入配置文件D:\gitea\custom\conf\app.ini,将 Gitea 设置为以本地系统用户运行 如果结果是 USER-PC,那么 RUN_USER USER-PC$ RUN_USER COMPUTERNAME$SQLite3 PATH配置,更改为包含完整…

矿泉水瓶的绘制

1.制作中心矩形,大小为60,注意设置矩形的两条边相等 2.点击拉伸,高度为150mm 3.使用圆角命令,点击连接到开始面,同时选中4条边,进行圆角转化,圆角大小为10mm,点击多半径圆角&#xf…

【程序+论文】大规模新能源并网下的火电机组深度调峰经济调度

目录 1 主要内容 讲解重点 2 讲解视频及代码 1 主要内容 该视频为《大规模新能源并网下的火电机组深度调峰经济调度》代码讲解内容,该程序有完全对照的论文,以改进IEEE30节点作为研究对象,系统包括5个火电机组和2个新能源机组,…

​​工业机器人智能编程:从示教器到AI自主决策​​

工业机器人智能编程:从示教器到AI自主决策 引言 工业机器人作为智能制造的核心装备,其编程方式正经历革命性变革。传统示教器编程效率低下,平均每个路径点需要30秒人工示教,而复杂轨迹编程可能耗时数周。随着AI技术的发展,工业机器人编程正朝着"所见即所得"的…

n8n 构建一个 ReAct AI Agent 示例

n8n 构建一个 ReAct AI Agent 示例 0. 引言1. 详细步骤创建一个 "When Executed by Another Workflow"创建一个 "Edit Fields (Set)"再创建一个 "Edit Fields (Set)"创建一个 HTTP Request创建一个 If 节点在 true 分支创建一个 "Edit Fiel…

Monorepo项目多项目一次性启动工具对比与实践

Monorepo项目多项目一次性启动工具对比与实践 在现代软件开发中,Monorepo(单一仓库)模式越来越受到开发者的青睐。Monorepo将多个相关的项目或包集中在一个仓库中进行管理,方便依赖共享、代码复用和统一发布。在Monorepo项目开发…

笔记整理六----OSPF协议

OSPF 动态路由的分类: 1.基于网络范围进行划分--将网络本身划分为一个个AS(自治系统---方便管理和维护) 内部网关协议---负责AS内部用户之间互相访问使用的协议 IGP--RIP EIGRP ISIS OSPF 外部网关协议--负责AS之间(整个互联网&…

网络编程,使用select()进行简单服务端与客户端通信

这里在Ubuntu环境下演示 一般流程 服务端常用函数: socket():创建一个新的套接字。bind():将套接字与特定的IP地址和端口绑定。listen():使套接字开始监听传入的连接请求。accept():接受一个传入的连接请求&#xff…

智能决策支持系统的基本概念与理论体系

决策支持系统是管理科学的一个分支,原本与人工智能属于不同的学科范畴,但自20世纪80年代以来,由于专家系统在许多方面取得了成功,于是人们开始考虑把人工智能技术用于计算机管理中来。在用计算机所进行的各种管理中,如…