Systemd

如何通過 systemd 禁用/覆蓋 tmpfs 到 /tmp 的自動掛載?

  • February 28, 2021

**背景:**在我的系統/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) 掛載(“文件系統忙”)。這會產生問題。

**部分修復:**我通過註釋掉上面給出的文件中的最後 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根本不會更新,這當然不是一個選項。

我認為這systemctl mask tmp.mount應該為您解決問題:這將禁用該單元,將其符號連結到/dev/nullin /etc,這將阻止其在升級時重新啟用。它還將防止手動啟動設備:

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

引用自:https://unix.stackexchange.com/questions/636843