上下文:嵌入式系统,带覆盖的只读 MMC tmpfs
。所有内容都写入 RAM 并在重启时消失。
systemd
坚持创建大量的tmpfs
挂载(至少/run
/run/lock
/run/shm
在/tmp
我看来,也许还有其他的),但这些挂载完全没用,因为整个只读文件系统已经被tmpfs
.
问题:这是一个相当受限的嵌入式系统,每个 RAM 字节都很重要。我想避免tmpfs
在不同位置管理多个内存的开销,只需将所有内容放在主tmpfs
覆盖层中即可。
不幸的是到目前为止我只设法禁用/tmp
(systemctl mask systemd-tmpfiles*
)但它对/run
层次结构没有任何作用。
知道这些设置隐藏在哪里吗?
答案1
我首先想到的是:
必需的:
/sys/fs/cgroup
无法禁用,因为 systemd 的标准功能依赖于 cgroups。
/dev
不能和不应该被禁用,因为它不是常规的 tmpfs – 它是一个 devtmpfs,内核会自动为热插拔设备创建节点。(即使没有 udev 也可以工作。)
难的:
/run
无法禁用;你可以修补来自 systemd 中的表src/core/mount-setup.c
,但只有当该位置仍然提供相同的 tmpfs 类属性时才这样做。
/run/shm
也无法禁用,因为 glibc 需要它来实现 POSIX 共享内存。同样,src/core/mount-setup.c
只要位置保持不变,您就可以将其从 中修补出来在tmpfs。请记住,此路径是自定义分发补丁 – 传统上,此文件系统位于/dev/shm
。
选修的:
/dev/mqueue
,/dev/hugepages
按照其.mount
单元文件进行挂载,这些单元文件可以被删除。
/run/lock
默认情况下实际上不是 tmpfs。如果您看到在该位置安装了某些东西,则它一定是您的发行版的自定义添加,并且很可能可以通过删除该run-lock.mount
单元来禁用它。
/tmp
是可选的,根据tmp.mount
单元安装。您可以删除该单元文件。
如果 tmpfs 挂载的成本高于内存页,我会感到非常惊讶。