tmpfs 不会溢出交换

tmpfs 不会溢出交换

我已经这样tmp配置:/etc/fstab

tmpfs /tmp tmpfs defaults,noatime,mode=1777 0 2

问题是,现在/tmp仅限于机器内存的一半,当达到该限制时,我会收到“设备上没有剩余空间”错误。

我想让它“无限”,即增长到磁盘的大小。

答案1

我的印象是您对 . 存在一些误解tmpfs。您可能会发现阅读以下内容很有用内核文档关于主题;我将尝试在这里为您澄清一些事情。

您的问题的标题“tmpfs不会溢出交换”似乎并没有反映您问题的实际内容,但无论如何tmpfs都使用交换,尽管可以说它不会溢出交换。tmpfs本质上是一个基于(虚拟)内存的文件系统;它的内容仅存在于内存中,但由于它们是可交换的,因此内核可以在必要时将它们存储在交换中而不是物理内存中。尽管如此,tmpfs文件系统不能大于可用虚拟内存的总量,IE物理 RAM 和交换区,如图所示例如经过free -h

默认情况下,tmpfs文件系统的最大大小等于可用物理内存量的一半。您可以使用参数增加此size值,但同样,它永远不能超过可用的物理内存和交换(尽管在安装时不会强制执行该限制)。一旦文件系统达到其最大大小(或者更确切地说,包含占用那么多空间的文件),它就会报告空间不足,正如您所发现的那样。tmpfs当空间不足时,它本身不支持在任何地方溢出。

如果您需要临时存储大文件的空间,则应该使用/var/tmp而不是/tmp.您确实不想要一个非常大的tmpfs文件系统,当它填满时,这会导致灾难(内核恢复内存的常用方法在 a 中不起作用tmpfs)。

(当然,如果您有大量 RAM,则大容量tmpfs也可以。我运行了一些系统,其构建tmpfs文件系统的大小为 RAM 的 75%,大小为 32GiB、64GiB 甚至更多。)

答案2

你可以使用类似的东西奥夫斯。它允许您将两个不同的安装“合并”到一个目录中。因此,在这种情况下,您可以在某处安装 tmpfs 卷,并在磁盘上安装常规目录,然后使用 aufs as 统一它们/tmp。您甚至可以分配优先级,因此将首先使用 tmpfs,只有当 tmpfs 空间不足时才会使用磁盘。

但这并不是一个完美的解决方案,因为 aufs 是按文件工作的。因此,如果某个进程创建的文件开始缓慢增长超过 tmpfs 大小,则当 tmpfs 已满时,它不会“切换”卷。它只会出现空间不足的情况(或者一些通用的 I/O 错误,因为从技术上讲, 中仍然留有空间/tmp)。但在很多情况下,它可能会发挥/tmp在内存中的作用,当它增长太多时,就会回退到磁盘。

相关内容