/tmp 和 tmpfs 的符号链接之间的区别

/tmp 和 tmpfs 的符号链接之间的区别

我正在尝试制作一个只读文件系统 (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 上

为什么不能像/tmptmpfs 一样挂载所有其他目录并在那里建立符号链接?

答案1

虽然没有一种真正正确的方法,但其中一种更好的方法是由 xenoid 建议:挂载/tmptmpfs,并以适当的权限在那里创建子目录。然后将适当的子目录链接/var到这些子目录。

一般来说,除非您手动指定它们的大小,否则挂载多个临时文件系统可能不是一个好主意。默认情况下(根据man tmpfs),每个文件系统将获得一半的可用 RAM。您的示例将使用挂载时可用内存的 87.5%,并且每个后续实例的大小都是前一个实例的一半。这是一件非常奇怪的事情。

另外,如果你真的只想要一个临时文件系统,你可以创建一个大的tmpfs并使用联合金融服务或者类似的东西来创建一个可写的临时覆盖/。从根本上来说,拥有一个可写的(无论如何,权限提供了通常的安全级别)可能会带来安全损失,但/重启时整个文件会被清除,从而抵消安全损失。

相关内容