问题标签 [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.
linux - Linux 上的所有 tmpfs 实例是否共享同一个内存池?
我有嵌入式 Linux 系统,它在 fstab 中定义了几个 tmpfs 挂载。其中一些挂载涉及 systemd。
客户问为什么所有易失性“RAM FS”的东西不只有一个挂载。
问题:
- 是否为来自同一公共源(缓存或其他)的所有 tmpfs 实例分配了物理内存,以便我们不必手动管理它?
- 当一个 tmpfs 挂载上的文件被删除时,内存可以被其他挂载重用吗?
- 是否存在静态分配 tmpfs 内存的 Linux 风格(或配置选项)?
- tmpfs 是否在内核中分配虚拟内存空间或消耗与定义的 tmpfs 大小成比例的其他宝贵资源?
linux - 将 tmpfs 视为 grep 的设备
我必须测试我的程序,它完全从磁盘中删除文件及其内容。为了测试我执行以下操作:
- 创建一个包含一些已知字符串的文件。
- 我的程序删除了该文件。
- 我在文件所在的磁盘上搜索字符串。为此,我让 grep 将磁盘视为一堆原始数据:
测试实际上按预期工作(如果我手动删除文件会找到字符串,如果我的程序删除它则不会)。
问题是磁盘大小可能很大,因此完成测试需要大量时间。此外,磁盘的标签在不同的机器上可能会有所不同。
因此,我考虑如何改用虚拟文件系统。使用 tmpfs 在 RAM 中创建磁盘:
创建/填充/删除一个文件,然后尝试查找其内容,使用类似:
问题是它会导致
grep: /dev/tmpfs: 没有这样的文件或目录
所以问题是:是否可以将 tmpfs 用作设备,或者读取分配给虚拟文件系统的原始内存?
docker - GitLab:将构建映像中的 /builds 挂载为 tmpfs
在我们的 GitLab CI 环境中,我们有一个具有大量 RAM 但机械磁盘的构建服务器,运行 npm install 需要很长时间(我已经添加了缓存,但它仍然需要浏览现有的包,因此缓存无法单独解决所有这些问题)。
我想在构建器 docker 映像中将 /builds 挂载为 tmpfs,但我很难弄清楚该配置的放置位置。我可以在构建器映像本身中执行此操作,还是可以在每个项目的 .gitlab-ci.yml 中执行此操作?
目前我的 gitlab-ci.yml 看起来像这样:
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 文件,这大约需要一个小时。
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 中复制出来,然后在复制时使用该新位置来解决。
linux - 了解 tmpfs 大小
我需要在 linux 上使用 tmpfs。我有一些文件要玩,我知道我有多少个文件,我知道每个文件的大小。如何确定 tmpfs 的大小?
我正在使用安装程序:mount -t tmpfs -o size=?? name_tmpfs /mnt/mountpoint_tmpfs
我试图了解大小使用什么值。我做了一个测试,通过创建一个 4096(页面大小)字节的 tmpfs,我在其中创建了一个文件,但是如果我想填充它(每个示例只有一个字节)我有一个“错误写入交换”......我不明白存储一个 1 字节的文件需要多大的大小,所以对于我的“工作文件”,我完全迷失了!
我发现的每个教程都为他们的示例使用了一个随机的大尺寸,但我真的很想了解机制并了解我的工作文件需要多少 tmpfs 大小(我知道有多少,每种大小,我都能找到解决方案吗? )。
感谢您阅读:)
linux - Kubernetes:在 pod 之间共享的内存卷
我需要一个可从多个 pod 访问的共享卷,用于在每个节点的 RAM 中缓存文件。
问题是emptyDir
卷配置器(支持Memory
它的medium
)在规范中可用,Volume
但在PersistentVolume
规范中不可用。
有没有办法实现这一点,除了tmpfs
在每个主机上手动创建一个卷并通过PV 规范中的配置local
程序安装它?hostPath
请注意,Docker 本身支持这样的卷:
我看不出k8s没有的任何原因。或者也许确实如此,但并不明显?
我试过玩local
和hostPath
PV,mountOptions
但没有用。
docker - 运行整个 docker 容器,并将卷安装在内存中
我想在内存中运行整个 docker 容器,而不将卷映射到主机的硬盘。
此处描述的 TMPFS有助于将卷挂载为“内存卷”,但我正在寻找一种如何启动映射到内存的整个容器的方法。
--volume-driver
可能是我必须使用的,但我找不到支持的驱动程序的记录列表(不是overlay2
)。
所以,我试过:
但在这两种情况下,docker inspect my-container
我都观察到:
docker stats
还指出我这两种情况都使用默认映射策略。
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。除了有问题的依赖性之外,生成的图像完全符合我的需要。