Systemd——你需要知道的

除非你一直生活在一块石头下,或者更糟——你不太关心 Linux 是如何工作的,否则你一定听说过 系统,(相对)新的 init 系统取代了大多数主要 Linux 发行版最近采用的旧的和过时的 SysV init。

什么是初始化系统?

当您的 Linux 机器启动时,它将首先运行一些“内置”代码,首先从 BIOS 或 UEFI 加载,然后是引导加载程序,根据其配置加载 Linux 内核。 内核加载驱动程序,并在它的第一个作业启动 init 进程,它是第一个分配给它的 PID(进程 ID)1。

从用户的角度来看,这看起来像是启动网络和数据库等,但实际上在幕后发生了一个相当复杂的过程。 服务的启动、停止和重新启动,通常是相互并行的。 有些是在不同的权限下运行的,服务状态被报告和记录,许多其他任务的执行将使系统的不同部分工作并能够与其用户和环境交互。

然而,这是如何实现的,远非统一,这确实是它不再普遍和明确定义的地方。

旧的初始化系统

直到最近,大多数主流 Linux 发行版使用的 init 系统是 System V init(或简称 SysV init),它的名称形式来源于 UNIX 系统 V (发音为“System Five”),第一个商用 UNIX 系统。 System V OS 有一种特定的方式来运行它的 init 进程,而 SysV init 多年来一直忠于这一点。

systemd-sysvinit

而且已经很多年了。 UNIX System V 最初于 1983 年发布,使 init SysV init 成为启动 Linux 机器的 30 多年历史的方法。

改变的必要性

正如已经注意到的那样,SysV init 已经过时并且早就应该被替换了。 造成这种情况的一些原因包括:

  • SysV init 使用 /sbin/init 来启动 init 进程,但 init 本身的作用非常有限。 根据从 /etc/inittab 读取的配置,init 所做的只是启动 /etc/init.d/rc,然后运行脚本来完成 init 进程的实际工作。 除非明确地进行面板化(如 Debian 上的 startpar),否则这将按顺序发生,一个脚本一个接一个地开始,使整个过程变慢,因为每个脚本都必须等待前一个脚本完成。
  • SysV init 无权访问 PID 或它(间接)启动的进程。 它只读取 PID 并以一种环境复杂的方式将它们与实际进程相关联。
  • 对于试图修改启动某个进程的环境的系统管理员来说,使用 SysV init 是相当困难的。 (为了实现这一点,他们必须修改负责启动给定进程的 init strcipt。)
  • SysV 没有实现的每个服务都有某些共同的功能,但是每个进程都必须自己实现,例如“守护”自己(成为系统守护进程),这是一个 精细而漫长的过程. SysV 不需要执行这些步骤一次,而是要求每个进程自己完成工作。
  • SysV 还将某些功能留给外部程序,并且对这些程序启动的服务一无所知。

以上所有,以及更多的设计缺陷,或者更确切地说是 SysV 过时的系统设计,使得现代 init 系统的创建姗姗来迟。

Enter 系统

有许多尝试创建一个替代的 init 系统,其中 systemd 只是其中之一。 Ubuntu 曾经运行自己的初始化系统,称为 暴发户. Gentoo 仍然使用 开放RC. 其他初始化系统包括 初始化, 忙箱初始化, 运行, 和 穆杜尔 和别的。

systemd 是一个明显的赢家的原因是它已被大多数主要发行版采用。 RHL 和 CentOS 自然采用了 systemd 方式,因为 Fedora 是第一个在 2011 年正式采用 systemd 的发行版。但是 systemd 真正成为了统治它们的一个初始化系统,当 Debian 8 正式切换到 systemd 时,带来了 Ubuntu 及其衍生产品,克服了 Canonical 的(或更准确地说是 Mark Shuttleworth 的) 最初的反对 朝向systemd。

systemd 有何不同?

  • Systemd 旨在提供一种单一的、集中的方式来从头到尾处理 init 进程。
  • 它启动和停止进程和服务,同时跟踪它们的依赖关系。 它甚至可以启动一个进程作为对另一个进程的依赖要求的响应。
  • 除了在启动期间启动和停止进程,Systemd 还可以在系统启动时启动以响应某些触发事件,例如插入设备时。
  • 它也不需要进程来守护自己。 与 SysV init 不同,systemd 可以处理正在运行的服务,而无需经历成为守护进程的漫长过程。
  • 与 SysV init 不同,systemd 知道并跟踪所有进程,包括 PID,并且对于 systemd 下的系统管理员来说,获取有关进程的信息要简单得多。
  • Systemd 支持的容器基本上是隔离的服务环境,不需要虚拟机。 这在未来更安全和更简单的系统设计方面具有巨大潜力。

系统容器

当然,这些只是主要优势的一部分。 有关 systemd 优势的完整讨论,您应该阅读 Debian 8 的“系统立场声明

争议

当然 systemd 并没有受到所有人的欢迎。 事实上,许多人已经并且仍然在做 皱眉,称其为单一且笨重的,有些人甚至指责它采用“Windows 方式”,将一切都集中化。 许多人认为它不是“Linux 方式”,当然 systemd 似乎不符合 POSIX 标准,如果我们将 systemd 视为一个工具包(不仅仅是二进制文件),它肯定是hugae。

系统信息图

尽管如此,systemd 显然是向前迈进了一步,虽然它并不完美,但它收到的大部分批评都是 由其原作者解决 和开发商 Lennart Poettering。 这绝对是一个非常需要的进步,并且是从旧的 init 系统迈出的一步。 Linux 的创造者 Linus Torvalds, 似乎不介意 systemd 太多了,我们有什么资格与“造物主”争论。

结论

已被所有主要 Linux 发行版采用,systemd 将继续存在。 无论某些系统管理员出于何种原因说什么,systemd 都是主流 Linux 的未来,无论个人用户是否喜欢它,从其独特的优势来看,这未必是一件坏事。

对于普通用户来说,它带来了更快的启动时间和可能更可靠的系统,而在未来采用它的发行版可以变得更加“兼容”。 在用户端,我们肯定会受益于它为我们的桌面带来的更新和现代的系统设计。

订阅我们的新闻!

我们最新的教程直接发送到您的收件箱

注册所有时事通讯。 注册即表示您同意我们的隐私政策并且欧洲用户同意数据传输政策。 我们不会共享您的数据,您可以随时取消订阅。 订阅