如何将 RAM 存储用于 /tmp 目录以及如何为其设置最大 RAM 使用量?

如何将 RAM 存储用于 /tmp 目录以及如何为其设置最大 RAM 使用量?

看到后评论经过匿名的关于/tmp 目录是如何清理的?,我发现在我的系统上实现这个是个好主意,因为我有 16GB 的 RAM 但我从来没有用过它。

我的临时文件从未写入磁盘。它们被写入 RAM 磁盘。我确实将其放入了tmpfs /tmp tmpfs defaults,noatime,mode=1777 0 0/etc/fstab。

我的问题是:

我可以为 RAM 使用量设置最大值吗/tmp?在这种情况下,如果超出最大值会发生什么?它会写入硬盘驱动器吗?

我读过一个解决方案,其中指出:

mkdir -p /tmp/ram
sudo mount -t tmpfs -o size=512M tmpfs /tmp/ram/

但据我了解,这不是一个永久的解决方案。如果我需要它永久存在,就必须将其添加到/etc/fstab配置文件中。

如果这是正确的解决方案,我该如何将该 mount 命令转换为一行/etc/fstab

答案1

你完全正确。相应的 fstab 条目将如下所示:

tmpfs /tmp tmpfs defaults,noatime,nosuid,nodev,noexec,mode=1777,size=512M 0 0

请注意:

tmpfs被填满时,它会像任何物理硬盘一样,给出“空间不足”的错误。虽然重新启动(从而清空缓存)可以解决这个问题,但当单个操作占用的空间比 上的空间还多时,您可能会遇到麻烦tmpfs。在这种情况下,您的计算机将开始从内存交换到磁盘,这将使您的系统缓慢停止,当然,前提是您有一个交换分区。

考虑到这一点,512MB 的大小现在可能太小了,因为现代机器中存在更多的 RAM,而且价格也便宜得多。由于您已经有 16GB 的 RAM,因此使用默认值一半的 RAM 应该足以满足几乎所有情况。要使用默认值,只需在文件中tmpfs省略该条目即可。size=512M/etc/fstab

另请注意:

你也可以很轻松地将其他系统文件夹挂载到 ramdisk 中,例如

/var/cache

/var/games

/var/log/apt(仅defaults,noatime在没有mode=或 的情况下使用nosuid

但请注意:适用与上述相同的规则,空间不足可能会导致严重问题。例如,想象一下 /var/log/apt 空间不足将导致您无法安装任何程序!此外,将/var/log文件夹加载到 ramdisk 将在重新启动时删除所有日志文件,因此如果发生任何意外情况,您将无法调试系统。因此,使用这些设置需要您自担风险!

编者注: 我删除了/runin tmpfsmount 选项,因为这个文件夹及其子文件夹已经tmpfs默认挂载了。

答案2

在使用 的系统上systemd,您可以选择使用 systemd 单元文件而不是 fstab 来实现使用tmpfs挂载的目标tmp。在我的 Ubuntu 16.04 系统上,我运行了:

sudo cp /usr/share/systemd/tmp.mount /etc/systemd/system/tmp.mount
sudo systemctl enable tmp.mount
sudo systemctl start tmp.mount

该文件/usr/share/systemd/tmp.mount如下所示:

#  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
Documentation=man:hier(7)
Documentation=http://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

[Install]
WantedBy=local-fs.target

使用 FuzzyQ 的 fstab 方法,systemd 会将您的 fstab 条目动态转换为挂载单元。我认为这两种方法都不是更好。

为了按照要求设置 RAM 的最大限制,需要size=512M在行中添加Options以逗号分隔的内容。

相关内容