如何禁用/覆盖 systemd 将 tmpfs 自动安装到 /tmp?

如何禁用/覆盖 systemd 将 tmpfs 自动安装到 /tmp?

背景:在我的系统上,/tmp这是分区的常规部分/,我将它用于系统的一些重要功能。

目前的systemd方法:在新系统上systemd已经开始接管安装,特别是在启动时甚至更新期间安装tmpfs接管。/tmp这是在/usr/lib/systemd/system/tmp.mount

/usr/lib/systemd/system/tmp.mount
#  SPDX-License-Identifier: LGPL-2.1+
#
#  This file is part of systemd.
#
#  systemd is free software; you can redistribute it and/or modify it
#  under the terms of the GNU Lesser General Public License as published by
#  the Free Software Foundation; either version 2.1 of the License, or
#  (at your option) any later version.

[Unit]
Description=Temporary Directory (/tmp)
Documentation=https://systemd.io/TEMPORARY_DIRECTORIES
Documentation=man:file-hierarchy(7)
Documentation=https://www.freedesktop.org/wiki/Software/systemd/APIFileSystems
ConditionPathIsSymbolicLink=!/tmp
DefaultDependencies=no
Conflicts=umount.target
Before=local-fs.target umount.target
After=swap.target

[Mount]
What=tmpfs
Where=/tmp
Type=tmpfs
Options=mode=1777,strictatime,nosuid,nodev,size=50%,nr_inodes=400k

问题:几个月前,在更新期间,一些正在运行的进程开始写入错误消息,因为重要文件/tmp消失了 -systemd即使在正在运行的系统中更新时tmpfs,也会强制安装在现有的/tmp.它也不能被 u(n)mounted(“文件系统繁忙”)。这会产生问题。

部分修复:我通过注释掉上面给出的文件中的最后 5 行来修复它。另外,我删除了/usr/lib/systemd/system/local-fs.target.wants/tmp.mount.但是,每次systemd更新时我的自定义都会丢失 - 这两个文件都不是配置文件(尽管该wanted文件应该是一个标志)。它们将在没有警告的情况下被更换。

问题: 如何永久禁用临时(或任何)文件系统的安装/tmp?也许systemd我缺少一个选项?我正在寻找systemd升级后仍然存在的解决方案。

我确实查看了手册和链接文档,但没有任何效果。我也尝试过

chattr +i /usr/lib/systemd/system/tmp.mount

在我调整后的文件上,但随后systemd根本不会更新,这当然不是一个选项。

答案1

我认为这systemctl mask tmp.mount应该对你有用:这将禁用该单元,将其符号链接到/dev/nullin /etc,这将阻止其在升级时重新启用。它还可以防止手动启动设备:

# systemctl mask tmp.mount
Created symlink /etc/systemd/system/tmp.mount → /dev/null.

相关内容