采用 tmpfs 作为 /tmp
1. 引言
tmpfs 是一个不存在于实体硬盘上、而是驻在记忆里的特殊文件系统。其中一个副作用就是当你失去电源(或重就开机)时,tmpfs 上的一切内容都会消失。对于 /tmp 来说这不是一个问题,因为 Linux 的文件系统结构指定 /tmp 内的数据在重新开机后可能不复存在。作为一个附注:我个人经常确保 /tmp 在重新开机时被清理干净,因为上次开机时遗留下来的数据(锁定文件等)可能会引起问题。
由于内存现在已经颇便宜,将 /tmp 放置在 tmpfs 上有数个好处:
- 由于 tmpfs 驻守在内存里,它的速度极快。它的寻觅时间与驻守在硬盘上的一般文件系统根本不能相比。举个例说,tmpwatch 采用 atime 这个属性,但这属性经常基于效率的原故而在普通文件系统上被停用。在 tmpfs 上使用 atime 所带来影响却很轻微。
- 这个文件系统在开机时会已被自动清理
2. 实际细节
到底这一切如何运作?tmpfs 在内核高速缓冲页的空间里创建一个虚拟文件系统。言下之意,就是 tmpfs 与高速缓冲页都位于记忆链的最低层。一旦系统上执行的应用程序填满所有不属高速缓冲的内存,高速缓冲空间便会开始缩小,直至用尽为止。当高速缓冲页不能再容纳 tmpfs,它便会被推进调换档。这样便抵销了它在速度上的优势,因为 tmpfs 到时会存在于慢速的硬盘上,而不再在高速的内存里。
你需要确定你的调换档有足够空间来应付这种情况(或者确定你拥有大量内存来避免它被推进调换档内)。所以,你的调换档基本上要应付正常的调换量(作为内存的代用品),加上你的 tmpfs 的最大容量。
3. 实践方法
3.1. 第 1 步
将 /tmp 放置在 tmpfs 上是一个甚为简易的动作。利用你喜欢的编辑器打开 /etc/fstab,并指定你想将 /tmp 放置于 tmpfs 内:
tmpfs /tmp tmpfs size=512m 0 0
这样便成了!
size=512m 代表文件系统的最大容量。当然,你应该选择一个迎合你的需要/系统的尺寸。128m 对大部份人来说应该已足够了。这个容量并非一次性地配置出来的,而是按存在于 /tmp 上的数据多寡进行动态配置的。
你也许会想在 fstab 内另外加插的标志包括:
- noexec —— 防止别人执行 /tmp 里的程序。有些 root 会这样做。这个标志有可能会为某些合法的程序带来问题,因此请在测试妥当后才设置这个标志。
- nosuid —— 防止在 /tmp 里的文件上设置 setuid 位元。
3.2. 陷阱
随内核而来的 tmpfs「官方」文件指「某些人仕(包括我在内)发现将它挂载在 /tmp 及 /var/tmp 等位置,然后提供一个大的调换档是个很方便的做法」。
我个人不会推荐将 /var/tmp 放在 tmpfs 上。我发出这个忠告是基于以下原因:FHS(文件系统结构规范)指明 /var/tmp 是为那些「需要过渡系统重新引导的临时文件」而设的。既然 tmpfs 内的数据在重新开机后不复存在,将 /var/tmp 放置在 tmpfs 上便会令你的系统与 FHS 不能兼容。这样做可能会导致应用程序失效或不正常地运作。
Translation of revision 6