如何在 Linux 中扩大 tmpfs 空间

你听说过 Linux 中的 tmpfs 吗?它是驻留在内存中并默认安装在 Linux 发行版上的小型临时文件系统。超快但通常尺寸有限。可以很容易地种植它吗?了解更多!
什么是 tmpfs?
计算机内部的一切都有一定的本机运行速度。它从您计算机中的 CPU(中央处理器)开始,它有一组 L1-Lx 缓存(1 级到 x 级),它们非常小(例如 16Kb)但超快(并且可能超-昂贵的)。
在 CPU 缓存之后,是主要的内存库,它们仍然比硬盘等快得多(而且逐字节更昂贵)。如您所见,这是关于成本与尺寸与速度的关系。一般规则是成本随着速度的提高而增加,并且尺寸会下降以限制成本等。
如果您将所有数据存储在计算机的主内存芯片中,这在技术上是极有可能的,而且很容易做到,与您单独使用磁盘时相比,您的工作简直是飞 ,因为内存芯片比大多数硬盘驱动器快得多。
但是,这有一些技术限制。一旦您关闭计算机,您的文件就会消失。不可恢复的应用程序崩溃可能足以让您不得不重新启动计算机并丢失文件。此外,您永远无法再次关闭您的计算机,除非它具有某些高级功能(据我所知不存在)以将您的文件保存在内存芯片中,类似于 BBU 支持的(电池备份单元)缓存在突袭控制器上。
但是请注意,您可能已经在使用一个与此类似(但不相同)的功能:当您将系统挂起到 RAM 时(使用 sleep 或操作系统使用的其他类似术语) ,一些电力将持续提供给您的存储芯片以维持其当前数据。
然后,当您恢复系统时,您将能够从中断的地方继续。但是在保持内存内容的同时关机通常不用于计算机。它可能会被智能平板电脑使用,尽管有人可能会争辩说这种状态不是真正的关机状态,而是低功耗状态。
阐明了一般来说,将文件保存到内存芯片可能不是一个好主意,还有一些其他用途可以派上用场。例如,在对程序进行测试/质量保证时,您可能会多次启动和关闭被测程序。
这些文件是临时的,个人价值很小(除非发现错误,此时可以将数据复制回主磁盘),因此可以存储在您的内存芯片中。这就是 tmpfs
的含义和作用:它是内存中的一个临时文件系统。你们中的一些人可能会立即反对并说,“那不是真的,”你是对的。继续阅读。
那些会反对的人可能会立即断言 tmpfs 空间不能保证在内存中,这是真的。您可以将 tmpfs
视为真正的 ram 磁盘(在易失性内存中创建的磁盘)和实际的永久磁盘存储之间的混合体。在某些情况下,Linux 内核会将 tmpfs 内容换出到系统交换空间中,该空间可能在磁盘上。这是透明完成的(无需用户交互)。
如果您想了解更多关于设置 ramdisk 的信息,请参阅我们的如何在 Linux 中创建 RAM 驱动器指南。
您当前的 tmpfs 大小
现在我们已经更好地定义了 tmpfs
空间,让我们看一下您的 tmpfs
空间的当前大小。您可能会认为 tmpfs
系统是一个虚拟的、临时的、易失性的驱动器。您可以使用 df -h
(文件系统磁盘空间使用情况 (df
))查看正在使用的空间代码>选项):
df -h | grep -Ei 'shm|size'

在这里,我们使用 df -h
(如上所述)与管道 (|
) 相结合,将 df -h
的结果输出发送到grep
,它以不区分大小写的方式使用扩展的 (-E
) 正则表达式格式(-i
或简单地 i 与另一个选项结合使用时)以选择顶部标题(包括单词 Size
)和包含文本 shm
的任何行。
我们对 shm
进行 grep 的原因是几乎总是,正如我们在此处的输出中看到的那样,tmpfs 空间被映射到文件系统目录 /dev/shm
.如果上述命令未生成任何输出,只需执行 df -h
并查看总结果以查找 tmpfs
空间(如果有)。
请注意,默认情况下,操作系统还会分配/设置一些 tmpfs 空间,例如,这些空间可能会映射/挂载到 /sys/fs/cgroup
、/run
和 /run/lock
目录。请不要尝试修改这些。
至于/dev/shm
等目录,请注意,在操作系统目录结构[树]中看到这些文件夹并不意味着这些文件实际/物理存储在某些磁盘中/dev/shm
目录!
它只是意味着,根据并符合能够将驱动器(或在本例中为 tmpfs)挂载到文件系统层次结构中的任何目录的标准 Linux 方式,如果在挂载之前该目录中有文件,在挂载点被删除之前,它们根本不可见。
在这个特定的系统上,tmpfs
空间为 32GB,几乎所有空间都未使用。使用中的一小部分 (166MB) 是目录元/索引表本身,它对用户不可见,但可以将文件存储到文件系统结构中。默认情况下,tmpfs
的大小是给定操作系统的系统内存的一半。
这是一个相当大的 tmpfs
并且仅在某种程度上在具有例如 40GB 或更多物理内存的系统上在技术上是合理的,尽管根据具体情况,特定用例可能需要其他设置。一般来说,我建议将 tmpfs
空间保持在内存的 70-80% 以下,如果 RAM(Random Access Memory ,另一种表示系统内存的速记或方式)开始时很小。
这样做的原因是您希望留出足够的内存空间来运行其他程序、操作系统和软件服务。
例如,如果您的系统有 2GB 内存,您就不会想要分配 80% 的内存,因为这可能会留下太少的空间让其他东西无法正常运行或根本无法运行。另一方面,如果您拥有 256GB 的超大内存,即使是其中的 90% (230.4GB) 也会留下不错的 25GB 可用空间,这可能(或可能不会)足够(取决于用例)。
总之,我建议您始终根据以下因素调整 tmpfs
的大小:1) tmpfs 中您真正需要多少空间,2) 系统中有多少内存,以及 3) 实际内存有多少除 tmpfs 外,其他应用程序正在使用(包括您的操作、服务等)。所有这些事情的经验在这里都有帮助。
扩大系统上的 tmpfs
现在我们知道了当前 tmpfs
卷的大小以及将来使用上面最后一段中提供的一些注意事项给它的大小,我们可以看看扩大(或缩小)我们的 tmpfs
空间。
这样做很容易。我们所要做的就是,不要让操作系统自动为我们配置 /dev/shm
tmpfs 空间,而是在常规 /etc/fstab
中静态定义它文件,它在启动时控制驱动器映射。我们只需添加:
# <file system> <mount point> <type> <options> <dump> <pass>
tmpfs /dev/shm tmpfs defaults,rw,nodev,nofail,noatime,nosuid,size=2G 0 0
到 /etc/fstab
文件。不要复制第一个注释(#
前缀)行,因为它已经存在了。此外,将 2G
(2GB) 大小更改为您计算/估计的 tmpfs 大小要求。正如我们之前解释的那样,将其设置为接近或超过可用内存的大小可能没有帮助。
/etc/fstab
文件中的标头标记阐明了字段的含义,您可以在 fstab
手册中找到更多信息,可以通过键入 人fstab
。基本上,我们要求操作系统安装一个 tmpfs
文件系统(系统的位置在内存中,因此我们指示 tmpfs
而不是指定设备。 ) 和 tmpfs
类型的文件,安装在 /dev/shm
。
我们还设置了一些选项。您可能希望将 defaults,rw,nodev,nofail
保留在最低限度(使用默认值、读/写访问权限、不存在物理设备,并且如果出现这种情况,请不要启动操作系统失败安装以某种方式失败。)。
如果你愿意,你也可以选择保留优化选项 noatime,nosuid
(这对于测试/QA 设置来说是理想的,因为它会更快,同时在 tmpfs 空间中保留更少的文件信息),或者您可以删除那些(及其匹配的逗号)。此外,保留(并更改/指定大小)size=xG
参数。最后,我们有一个相当标准的 0 0
用于 dump 和 pass
(有关这两个选项的更多信息,请参考 man fstab
)。
完成更改后,只需重新启动系统并执行 df -h
以验证您的 /dev/shm
tmpfs 空间现在处于您设置的新大小成为。如果出现问题,只需检查 dmesg
(在您的命令提示符下键入)并向上扫描任何红色错误消息(您可能需要滚动。)以找出问题所在。即使出了点问题,只要您没有删除 nofail
选项,系统应该已经正常启动了。
但是,对于 Ubuntu 用户,可能存在一个需要注意的 nofail 错误。曾经有一个替代的 nobootwait 选项 [instead],尽管目前还不清楚这是否仍然可用,如果可以,在什么版本的 Ubuntu 及其衍生版本上 [only]。作为测试的最后一种替代方法,如果使用的是 SystemD,可以考虑使用 x-systemd.device-timeout=10 超时,其中 10 是启动期间愿意等待的秒数。
包起来
在本文中,我们深入了解了 tmpfs
大小调整,同时牢记用例和其他因素。
我们还详细解释了 tmpfs
,发现了如何找到机器的 tmpfs
文件系统的当前大小,最后研究了如何调整 tmpfs 的大小。
享受使用 tmpfs 的乐趣!