tmpfs 不会溢出交换

m33*_*lky 6 ubuntu tmp tmpfs

tmp/etc/fstab这样配置的:

tmpfs /tmp tmpfs defaults,noatime,mode=1777 0 2
Run Code Online (Sandbox Code Playgroud)

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

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

Ste*_*itt 14

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

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

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

如果您需要临时存储大文件的空间,您应该使用/var/tmp而不是/tmp. 你真的不想要一个非常大的tmpfs文件系统,当它填满时这是灾难的秘诀(内核恢复内存的通常方法在tmpfs.

(当然,如果你有很多 RAM,大的tmpfs也可以工作。我运行一些系统,构建tmpfs文件系统的大小为 RAM 的 75%,32GiB、64GiB 甚至更多。)