我正在尝试制作一个只读文件系统 (Raspbian)。一种常见的方法是将一些目录 (可写的) 放在 tmpfs 中。
例如,我发现一些教程建议:
rm -rf /var/lib/dhcp/ /var/run /var/spool /var/lock
ln -s /tmp /var/lib/dhcp
ln -s /tmp /var/run
ln -s /tmp /var/spool
ln -s /tmp /var/lock
以及/etc/fstab
:
tmpfs /tmp tmpfs nosuid,nodev 0 0
tmpfs /var/log tmpfs nosuid,nodev 0 0
tmpfs /var/tmp tmpfs nosuid,nodev 0 0
据我所理解:
/var/lib/dhcp/
、/var/run
和/var/spool
都已/var/lock
符号链接到/tmp
挂载为 tmpfs 的文件系统- 但
/var/log
和/var/tmp
被安装在单独的 tmpfs 上
为什么不能像/tmp
tmpfs 一样挂载所有其他目录并在那里建立符号链接?
答案1
虽然没有一种真正正确的方法,但其中一种更好的方法是由 xenoid 建议:挂载/tmp
为tmpfs
,并以适当的权限在那里创建子目录。然后将适当的子目录链接/var
到这些子目录。
一般来说,除非您手动指定它们的大小,否则挂载多个临时文件系统可能不是一个好主意。默认情况下(根据man tmpfs
),每个文件系统将获得一半的可用 RAM。您的示例将使用挂载时可用内存的 87.5%,并且每个后续实例的大小都是前一个实例的一半。这是一件非常奇怪的事情。
另外,如果你真的只想要一个临时文件系统,你可以创建一个大的tmpfs
并使用联合金融服务或者类似的东西来创建一个可写的临时覆盖/
。从根本上来说,拥有一个可写的(无论如何,权限提供了通常的安全级别)可能会带来安全损失,但/
重启时整个文件会被清除,从而抵消安全损失。