当前位置: 首页>>技术问答>>正文


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

, , ,

问题描述

在问题/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条目动态转换为挂载单位。我不认为两种方法都更好。

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/938.html,未经允许,请勿转载。