Systemd 支持的 tmpfs | 如何手动指定 /tmp 大小

GMa*_*ter 8 systemd quota tmpfs disk

我安装/tmptmpfs使用:

sudo systemctl enable tmp.mount
sudo systemctl start tmp.mount
Run Code Online (Sandbox Code Playgroud)

但是这种方式/tmp占用了所有可用的RAM:

$ df -h /tmp
Filesystem      Size  Used Avail Use% Mounted on
tmpfs           3.9G   12K  3.9G   1% /tmp
$
Run Code Online (Sandbox Code Playgroud)

我如何告诉 systemd tmp.mount 只使用 1G?我知道我也可以不使用 systemd 并手动添加一个条目/etc/fstab并在那里指定大小。但我不想那样做。我想使用 systemd 支持的 tmpfs。

Ste*_*itt 9

覆盖或扩展它的systemd 方法tmp.mount是在/etc/systemd/system. 您可以复制现有tmp.mount(来自/lib/systemd/system/usr/share/systemd可能)并编辑副本,或者更好的是,通过运行添加配置片段以仅更改安装选项

sudo systemctl edit tmp.mount
Run Code Online (Sandbox Code Playgroud)

并进入

[Mount]
Options=mode=1777,strictatime,nosuid,nodev,size=1073741824
Run Code Online (Sandbox Code Playgroud)

在打开的编辑器中。这会

  • 创建一个名为的目录 /etc/systemd/system/tmp.mount.d
  • 在该目录中,添加一个override.conf包含上述文本的名为的文件。

请注意,systemd.mount仍然说

通常,通过配置挂载点/etc/fstab是首选方法。

所以您可能只想这样做,编辑/etc/fstab以在线添加size=...选项/tmp(如有必要,请添加):

tmpfs /tmp tmpfs mode=1777,strictatime,nosuid,nodev,size=1073741824 0 0
Run Code Online (Sandbox Code Playgroud)

事实上,这是为任何systemd 的“API 文件系统”更改挂载选项的推荐方法:

即使通常这些 API 文件系统都没有列在其中,/etc/fstab但它们可能会添加到那里。如果是这样,其中指定的任何选项都将应用于该特定 API 文件系统。因此:要更改这些文件系统的挂载选项或其他参数,只需将它们添加到/etc/fstab适当的设置中即可。使用这种技术,除了简单地更改挂载选项之外,还可以更改文件系统的源和类型。这对于转向/tmp由物理磁盘支持的真正文件系统很有用。

API 文件系统包括以下内容:/sys/proc/dev/run/tmp/sys/fs/cgroup/sys/kernel/security/sys/kernel/debug/sys/kernel/config/sys/fs/selinux/dev/shm/dev/pts/proc/sys/fs/binfmt_misc/dev/mqueue/dev/hugepages/sys/fs/fuse/connections/sys/firmware/efi/efivars。systemd 确保它们被挂载,即使它们没有在/etc/fstab挂载单元中指定。

  • 正如该页面所说:“如果您的 tmpfs 实例过大,机器将陷入死锁,因为 OOM 处理程序将无法释放该内存。” 大量应用程序过度消耗内存正是触发了这一点,我现在将 /tmp 的大小调整得小得多,我希望不再出现死锁。 (2认同)