问题描述
在问题/tmp目录如何清理?上通过Anonymous看到the comment后,我发现在我的系统上实现将是一个好主意,因为我拥有16GB的RAM,并且我从来没有使用过它。
My temporary files never get written to the disk. They get written to a RAM disk. I did put
tmpfs /tmp tmpfs defaults,noatime,mode=1777 0 0
in /etc/fstab.
我的问题是:
我可以为/tmp
的RAM使用设置最大值吗?在这种情况下,如果超过最大数量会发生什么情况,会写入hard-disk驱动器?
我读过一个解决方案,其中指出:
mkdir -p /tmp/ram sudo mount -t tmpfs -o size=512M tmpfs /tmp/ram/
但在我的理解中,这不是一个永久的解决方案。如果我需要它是永久的,它必须被添加到/etc/fstab
配置文件中。
如果这是正确的解决方案,我怎样才能将这个mount命令转换成/etc/fstab
中的一行?
最佳解决方案
你是绝对正确的。相应的fstab条目将如下所示:
tmpfs /tmp tmpfs defaults,noatime,nosuid,nodev,noexec,mode=1777,size=512M 0 0
请注意:
随着tmpfs
被填满,它会像任何物理硬盘一样提供“空间不足”的错误。虽然重新启动(并因此清空缓存)将解决此问题,但当单个操作占用更多空间时,可能会遇到麻烦,而tmpfs
上的空间比tmpfs
空间更大。在这种情况下,您的计算机将开始从RAM交换到磁盘,这会让您的系统爬行停止,因为您有一个交换分区开始,当然。
考虑到这一点,512MB的尺寸现在可能会少得多,因为现代机器中存在更多的RAM,并且它变得便宜得多。既然你已经有了16GB的RAM,使用tmpfs
的一半内存的默认值应该足以满足几乎所有的情况。要使用默认值,只需在/etc/fstab
文件中省略size=512M
条目。
另一个说明:
你可以很容易地将其他系统文件夹挂载到ramdisk上,比如
/var/cache
/var/games
/var/log/apt
(仅使用defaults,noatime
而不使用mode=
或nosuid
)
但要小心:与上面相同的规则适用,空间不足可能会造成严重的麻烦。例如。想象/var /log /apt的空间不足将导致无法安装任何程序!此外,将/var/log
文件夹加载到ramdisk中会在重新启动时删除所有日志文件,因此如果出现意外情况,您将无法调试系统。所以使用这些设置需要您自担风险!
编者注:我删除了tmpfs
安装选项中的/run
,因为默认情况下此文件夹及其子文件夹已经安装在tmpfs
中。
次佳解决方案
在使用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条目动态转换为挂载单位。我不认为两种方法都更好。
参考资料