综合 systemd v258 删掉 cgroup v1 与 System V 运行级,升级前先过一遍这些检查

2026-09-10 21:03:00

systemd v258 删掉 cgroup v1 与 System V 运行级,升级前先过一遍这些检查

v258 的 NEWS 里,「Incompatible changes」一节比往常长。下面按条目走一遍,每条给出对应的检查动作。

cgroup v1 支持被完全移除

legacy 与 hybrid 层级都不再支持,系统启动和 systemd-nspawn 容器初始化时总是挂载 cgroup v2 unified 层级。仍依赖 cgroup v1 挂载点的容器运行时、监控 agent、内核参数都需要先迁走。

检查:

mount | grep cgroup
cat /proc/cmdline

确认没有组件依赖 cgroup v1 的 controller 挂载点,也没有残留的强制 legacy 层级的内核参数。

最低内核基线升到 5.4

最低支持 v5.4(2019 年发布),推荐版本为 v5.7。

uname -r

tty/pts 设备节点默认权限改为 0600

原来默认 0620,改成 0600,原因是终端可能被其他用户写入。效果上等于默认 mesg n。要恢复旧行为,用 meson 构建选项 -Dtty-mode=0620

检查依赖 wallwrite 广播的脚本和监控 agent,它们在默认权限下会失败。

System V 风格状态控制被删除

  • /dev/initctl 设备节点移除
  • initctlrunleveltelinit 命令移除
  • 通过 init 命令切换状态(例如 init 3)不再支持
  • runlevel[0-6].target 单元移除
  • runlevel 概念取消,运行级切换不再记录到 utmp/wtmp
grep -rnE '(^|[^a-z])(initctl|telinit)([^a-z]|$)' /etc /usr/local 2>/dev/null
grep -rnw runlevel /etc/systemd /usr/local 2>/dev/null

脚本、Ansible playbook、监控探针、CI 里的相关调用改用 systemctl isolate

/forcefsck 与 /fastboot 不再生效

systemd-fsck 不再读取传统的 /forcefsck/fastboot 文件,改用内核命令行 fsck.mode= 或新的 fsck.mode credential。systemd-quotacheck 同理,改用 quotacheck.mode= 内核命令行选项或对应的 credential。

检查 rc.local、fstab 相关脚本、镜像构建流程里 touch /forcefsck 一类的动作。

resolved 与 importd 只保留 OpenSSL

systemd-resolved 和 systemd-importd 移除了 GnuTLS 与 libgcrypt 密码学后端,OpenSSL 是唯一支持的后端。构建时依赖旧后端的 meson 选项需要一并清理。

新增能力

  • PrivateUsers= 新增 identityfullidentity 请求只对前 65536 个 UID/GID 做恒等映射的 user namespace,full 映射整个 32 位 UID 范围
  • ProtectHostname= 新增 private:类似 yes,但允许单元内的进程修改主机名(限定在该单元的 UTS namespace 内)
  • .slice 单元新增 ConcurrencySoftMax=ConcurrencyHardMax=,用于基础的工作负载并发控制
  • home areas:在 /home/user/Areas 下按子目录维护相互隔离的登录环境
  • 新工具 systemd-factory-reset,配合 systemd-repart 的 --factory-reset=yes 完成包括 TPM 密钥在内的整体重置
  • /etc/hostname 中的 ? 字符会被替换为从 machine-id 哈希出的 nibble,用于生成带动态部分的主机名
  • sd-jsonsd-varlink 进入 libsystemd 公共接口;sd-bus 新增 sd_bus_pending_method_calls()systemctl reload 现在支持重新加载 confext 镜像

同一批改动里还有:.socket 单元支持 MPTCP 协议、新增 fstab 选项 x-systemd.wants=(生成 Wants= 依赖)、journalctl --follow 在收到 SIGTERM/SIGINT 或写入管道断开时以成功状态退出、关机后期重新启用内核对 Ctrl-Alt-Delete 的处理。

v259 的移除预警

  • System V service 脚本已废弃,将在 v259 移除
  • 传统 /run/lock/ 目录废弃,v259 移除,改用 RuntimeDirectory=/$RUNTIME_DIRECTORY$XDG_RUNTIME_DIR
  • 通过 libiptc 的传统 iptables 支持将在 v259 移除,systemd-networkd 与 systemd-nspawn 届时只保留 nftables 后端
  • v259 计划提升的依赖基线:Linux kernel >= 5.10(推荐 >= 5.14)、glibc >= 2.34、libxcrypt >= 4.4.0、util-linux >= 2.37、elfutils >= 0.177、openssl >= 3.0.0、cryptsetup >= 2.4.0、libfido2 >= 1.5.0、libseccomp >= 2.4.0、python >= 3.9.0

另有一条构建期约束:systemd-stub v258 在构建 UKI 时需要 ukify v257.9 或 v258 及以上(修复了嵌入大于 512 字节 .sbat section 的问题)。

参考

复制全文 生成海报 systemd Linux 运维 升级

推荐文章

程序员茄子在线接单