看到后评论经过匿名的关于/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 将在重新启动时删除所有日志文件,因此如果发生任何意外情况,您将无法调试系统。因此,使用这些设置需要您自担风险!
编者注:
我删除了/run
in tmpfs
mount 选项,因为这个文件夹及其子文件夹已经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
以逗号分隔的内容。