问题标签 [tmpfs]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
912 浏览

linux - Linux 上的所有 tmpfs 实例是否共享同一个内存池?

我有嵌入式 Linux 系统,它在 fstab 中定义了几个 tmpfs 挂载。其中一些挂载涉及 systemd。

客户问为什么所有易失性“RAM FS”的东西不只有一个挂载。

问题:

  1. 是否为来自同一公共源(缓存或其他)的所有 tmpfs 实例分配了物理内存,以便我们不必手动管理它?
  2. 当一个 tmpfs 挂载上的文件被删除时,内存可以被其他挂载重用吗?
  3. 是否存在静态分配 tmpfs 内存的 Linux 风格(或配置选项)?
  4. tmpfs 是否在内核中分配虚拟内存空间或消耗与定义的 tmpfs 大小成比例的其他宝贵资源?
0 投票
1 回答
249 浏览

linux - 将 tmpfs 视为 grep 的设备

我必须测试我的程序,它完全从磁盘中删除文件及其内容。为了测试我执行以下操作:

  1. 创建一个包含一些已知字符串的文件。
  2. 我的程序删除了该文件。
  3. 我在文件所在的磁盘上搜索字符串。为此,我让 grep 将磁盘视为一堆原始数据:

测试实际上按预期工作(如果我手动删除文件会找到字符串,如果我的程序删除它则不会)。

问题是磁盘大小可能很大,因此完成测试需要大量时间。此外,磁盘的标签在不同的机器上可能会有所不同。

因此,我考虑如何改用虚拟文件系统。使用 tmpfs 在 RAM 中创建磁盘:

创建/填充/删除一个文件,然后尝试查找其内容,使用类似:

问题是它会导致

grep: /dev/tmpfs: 没有这样的文件或目录

所以问题是:是否可以将 tmpfs 用作设备,或者读取分配给虚拟文件系统的原始内存?

0 投票
2 回答
2644 浏览

docker - GitLab:将构建映像中的 /builds 挂载为 tmpfs

在我们的 GitLab CI 环境中,我们有一个具有大量 RAM 但机械磁盘的构建服务器,运行 npm install 需要很长时间(我已经添加了缓存,但它仍然需要浏览现有的包,因此缓存无法单独解决所有这些问题)。

我想在构建器 docker 映像中将 /builds 挂载为 tmpfs,但我很难弄清楚该配置的放置位置。我可以在构建器映像本身中执行此操作,还是可以在每个项目的 .gitlab-ci.yml 中执行此操作?

目前我的 gitlab-ci.yml 看起来像这样:

0 投票
0 回答
658 浏览

postgresql - docker/docker-compose tmpfs - pgsql_tmp 目录

有没有人尝试过运行一个带有 tmpfs 卷挂载到 pgsql_tmp 的 postgresql 容器?(我可以想象任何带有临时文件目录的数据库)

有没有引起什么问题?

这是一个坏主意吗?

其他有用的信息?

docker tmpfs- “与卷和绑定挂载相反,tmpfs 挂载是临时的,并且只持久存在于主机内存中。当容器停止时,tmpfs 挂载被删除,并且写入那里的文件不会被持久化。”

pgsql_tmp- “临时文件(用于对内存中无法容纳的更多数据进行排序等操作)在 PGDATA/base/pgsql_tmp 中创建,或者如果为它们指定了 pg_default 以外的表空间,则在表空间目录的 pgsql_tmp 子目录中创建。临时文件的格式为 pgsql_tmpPPP.NNN,其中 PPP 是拥有后端的 PID,NNN 区分该后端的不同临时文件。”

将其发布以供社区参考和研究。感谢您提供任何帮助。

经历过几次人工数据库填充inode。重新启动堆栈后,不得不手动删除 tmp 文件,这大约需要一个小时。

0 投票
1 回答
272 浏览

tmpfs - tmpfs (linux/ubuntu) 在磁盘还是内存上?

在维基百科上,它说 tmpfs 存储在易失性内存而不是持久存储设备上。我做了一些实验,遇到了矛盾。

在此处输入图像描述 (我的电脑环境-->Mac OS/X并口Ubuntu 16.04 x64 )类型

回报 在此处输入图像描述

我不知道“共享”是什么意思。类型

回报 在此处输入图像描述

这是否意味着“共享”列显示 /proc/meminfo 中的 Shmem 是什么?继续打字

回报

在此处输入图像描述

它确实意味着 ram 上的 tmpfs 的一部分。

但我打字

回报 在此处输入图像描述

这意味着磁盘上的 tmpfs 的一部分。

我感到很困惑!有人能告诉我 tmpfs 是如何实现的(在 Linux 上)吗?它是在磁盘上还是在地球上的内存上?或者两者都不是。

0 投票
2 回答
7654 浏览

docker - 使用 docker build 和 tmpfs 构建 Docker 映像?

问题:您如何在 Dockerfile 或docker build命令行中指定您希望将 tmpfs 挂载到构建容器中?这是在拆分构建的上下文中 - 第一个容器将使用 RAM 磁盘,从源代码构建应用程序,第二阶段将结果复制到新容器。

这个问题似乎很相似,但我的动机不同。我不太关心过时的图像层持续存在,但我关心的是构建的性能。在 Docker 之外进行实验时,当整个源代码树都在 RAM 中而不是在磁盘中时,构建我正在使用的特定应用程序的速度提高了 4 倍以上。(该项目有许多中间构建和并行性,所以即使是 SSD 也会有点颠簸)

由于 Docker 确实支持在正常docker run命令期间挂载 tmpfs,因此似乎应该有一种方法可以将其包含在 Dockerfile 中?但是,我似乎无法在任何地方找到此信息 - 几乎每次搜索“tmpfs”和“dockerfile”或“build”或“ramdisk”等等都只是指向上面链接的帖子或 Docker 的关于使用 tmpfs 的文档容器以docker run.

如果 tmpfs 不会持续到第二个容器的组装,那将是可以接受的。这可以通过在容器退出之前将构建的应用程序从构建容器内的 tmpfs 中复制出来,然后在复制时使用该新位置来解决。

0 投票
1 回答
229 浏览

linux - 了解 tmpfs 大小

我需要在 linux 上使用 tmpfs。我有一些文件要玩,我知道我有多少个文件,我知道每个文件的大小。如何确定 tmpfs 的大小?

我正在使用安装程序:mount -t tmpfs -o size=?? name_tmpfs /mnt/mountpoint_tmpfs

我试图了解大小使用什么值。我做了一个测试,通过创建一个 4096(页面大小)字节的 tmpfs,我在其中创建了一个文件,但是如果我想填充它(每个示例只有一个字节)我有一个“错误写入交换”......我不明白存储一个 1 字节的文件需要多大的大小,所以对于我的“工作文件”,我完全迷失了!

我发现的每个教程都为他们的示例使用了一个随机的大尺寸,但我真的很想了解机制并了解我的工作文件需要多少 tmpfs 大小(我知道有多少,每种大小,我都能找到解决方案吗? )。

感谢您阅读:)

0 投票
1 回答
3177 浏览

linux - Kubernetes:在 pod 之间共享的内存卷

我需要一个可从多个 pod 访问的共享卷,用于在每个节点的 RAM 中缓存文件。

问题是emptyDir卷配置器(支持Memory它的medium)在规范中可用,Volume但在PersistentVolume规范中不可用。

有没有办法实现这一点,除了tmpfs在每个主机上手动创建一个卷并通过PV 规范中的配置local程序安装它?hostPath

请注意,Docker 本身支持这样的卷:

我看不出k8s没有的任何原因。或者也许确实如此,但并不明显?

我试过玩localhostPathPV,mountOptions但没有用。

0 投票
1 回答
1556 浏览

docker - 运行整个 docker 容器,并将卷安装在内存中

我想在内存中运行整个 docker 容器,而不将卷映射到主机的硬盘。

此处描述的 TMPFS有助于将卷挂载为“内存卷”,但我正在寻找一种如何启动映射到内存的整个容器的方法。

--volume-driver可能是我必须使用的,但我找不到支持的驱动程序的记录列表(不是overlay2)。

所以,我试过:

但在这两种情况下,docker inspect my-container我都观察到:

docker stats还指出我这两种情况都使用默认映射策略。

0 投票
1 回答
1588 浏览

yocto - Yocto - 为 WIC 创建对 cpio.gz 映像的依赖项

我正在创建一个小型 Yocto 发行版,它应该在 tmpfs 上的 RAM 中工作。我通过以下方式使用 WIC 配置:

我还添加IMAGE_FSTYPES_append = " cpio.gz "到我的 local.conf,因此它cpio.gz从我的 rootfs 构建存档。

我的问题非常简单——当 WIC 运行时,它会在完成创建 rootfs 之前尝试创建 wic 文件cpio.gz,因此构建失败。我需要的是创建一个依赖项,它会保存 WIC 脚本直到cpio.gz准备好。有谁知道如何实现它?例如,WKS_FILE_DEPENDS可以使用吗?

这是失败:

目前我通过在构建后手动运行 wic 工具来绕过这个问题。为此,我不得不IMAGE_FSTYPES_remove = " wic wic.bmap hddimg "在我的 local.conf 中使用。运行 wic 的命令是:

谢谢!

编辑:也许问题不在于创建所需的依赖项,而在于我创建图像的方式?我只想要一个 UEFI 引导、一个内核和一个带有完整 rootfs 的 cpio.gz 文件,该文件将在引导时挂载。这不是 initramfs,而是我需要的完整 rootfs。除了有问题的依赖性之外,生成的图像完全符合我的需要。