根据大家所看到的,在服务器系统上推荐的 /tmp 配置是什么以及为什么。多年来,我曾就这些问题进行过讨论,有时存在基本分歧。
以下基本上是我看到的问题。有些人可能会建议用几个问题来询问这些问题,但是,我认为如果将这些信息放在一个标题下,管理员可能会更容易。我相信这将是有益的。
专门针对 /tmp:
应该 ln -s /var/tmp /tmp 吗?
/tmp 是否应该在重新启动之间保留?
/tmp 应该在真正的磁盘区域上还是允许基本上在 SWAP 区域(或 tmpfs)上实现?
/tmp 是否应该与 /(根)磁盘位于不同的磁盘上?
您会将 /tmp 放在与 /(根)磁盘不同的磁盘控制器上吗?
/tmp 大小的任何经验法则?
系统启动时如何管理 /tmp 空间?删除所有文件>特定年龄?不理会区域,直到它达到最大值的百分比?
是否应该实施任何程序性项目来管理这一领域?
专门针对 /tmp:
对于完整的内存磁盘映像(想想“实时启动 CD”),这可能是可以接受的,因为需要压缩 RAM 的每个字节。否则,除非您迫切需要磁盘空间,否则不会。/var 有其自身的特点,在执行系统维护时,将 /tmp 与 /var/tmp 混合可能会产生意想不到的后果。它还添加了一个额外的依赖项,即必须安装 /tmp 才能使 /var/tmp 正常运行;不是所有的东西都需要/tmp,你可能会想把它迁移到不同的分区或驱动器,但不能,因为你不想卸载/var。
不会。如果您将此作为一致的行为,那么您迟早会遇到问题。
当它被大量使用时,这是一种诱惑——“我们将 /tmp 放入 RAM 磁盘,它会加快访问速度,并且当系统重新启动/关闭时,没有什么可清理的”。但是,如果您正在考虑将临时空间实现为将被交换的 RAM 磁盘,那么我会考虑其他程序对系统交换空间使用的影响。如果交换作为“紧急溢出”的一种形式存在,当系统处于紧急状态并需要它时,您最不需要的就是让一个失控的进程占用交换空间,填充 /tmp,消耗内存,从而对要交换到磁盘的 VM 子系统。在交换活动和流入 RAM 磁盘的额外 I/O 之间(这反过来可能导致额外的页面输入来满足 seek() )您的系统将很快成为 I/O 绑定。
最好是,是的,尽管这不是必需的。如果您大量使用它,或者需要它的持续工作量,那么肯定是的。假设示例:将临时文件转储到 /tmp 的数据库将通过将 /tmp 引入单独的主轴(即驱动器)而获得轻微的加速。
如果您对可恢复性或速度有要求,则应予以考虑。
它应该可以容纳 2 倍的预期工作量。我的意思是,如果你有本地用户经常使用这个空间,迟早会有人做一些愚蠢的事情并试图填满它。稍微超额将允许您避免程序停止的奇怪“问题”,因为它们的临时文件已填满剩余空间。
如果这是一个“公共服务”安装,服务器提供一个或多个网络服务,但不托管用户,那么这可能会偏低。如果这是一个多用户安装,这将是偏高的(是的,仍然有托管实际用户的地方,而不仅仅是他们的网络服务)。
查看tmpwatch命令,我想您会发现它非常适合您问题的这一部分。该命令仅以小时为单位删除超过特定年龄的任何文件。根据填满的速度,你可以做 30 天、45 天、90 天等。
我会推荐以下内容:
其余的取决于您的具体需求。
很大程度上取决于您使用的特定应用程序负载。一些应用程序服务器(SunONE,旧的 netscape 的东西)将几百到几千个文件写入 /tmp - 在那种情况下,你真的不希望它成为一个挂载的 ramdisk,并且没有理由在重新启动之间保留它。
服务器的通用性和特殊用途越来越少 - 这种类型的问题(以及类似的“我如何分区我的系统”问题)实际上取决于您的负载。
我最近确实有一台服务器在 4 年左右后第一次重新启动 - 它在引导过程中卡住了,删除了 /tmp 中的所有文件 - 那里有很多杂物,需要花费一个小时来清理它. 如果您的盒子不经常重新启动,那么定期清洁它绝对是个好主意。
根据经验,我建议不要混合您的 /var/tmp 和 /tmp 目录。
/var 的原因是(希望)您的所有日志、缓存和服务数据(例如数据库)都将驻留。将 /var 放在单独的分区上通常是一个好主意,因此如果发生重要的数据事件(例如大量日志记录或数据库写入),您的根分区和 /tmp 分区仍然有可用空间来可靠地运行。
例如,我刚刚从一个没有遵循这种做法的站点返回(即所有内容都在一个分区上),并且由于日志的建立,整个系统都陷入了困境。如果遵循合理的分区布局,/var 分区将耗尽空间,但服务器将保持响应。
只回答几点...
我会将 /tmp 放在与 / 不同的分区上,这样我就可以在正常操作期间挂载 /ro。独立磁盘?这取决于 /tmp 和 /get 的使用量以及它们是否相互妨碍。
至于第 1 部分和第 2 部分,在我的盒子 (Mac OS X) 上,/var/tmp 不会每天清理,但 /tmp 会,因此它们具有不同的策略,因此不应将它们符号链接在一起。我不确定每天清理 /var/tmp 不会破坏任何东西,并且想在变得更加喧嚣之前进行调查 - 目前只有 172k。
关于你的最后一个问题,我会考虑的一个项目是使 /tmp noexec,nosuid - 也就是说,没有可执行文件能够从 /tmp 运行,并且没有 suid 二进制文件能够切换用户 ID。但是,这可能会影响某些程序,因此请在完全依赖它之前对其进行测试——我认为 ssh 甚至是其中之一,但我忘记了。
这是一项安全措施,可以提高您在 /tmp 方面的安全性。
另一件事:很多用户会尝试使用 /tmp 作为永久临时存储:任何强制清理 /tmp 都必须与用户教育一起完成:提醒他们 /tmp 是临时的,任何放置在那里的东西都可能消失时间。
您是否考虑过在这种情况下 /tmp 填满时会发生什么?这不是你做两次的那种事情。我已经完成了一次(在 Solaris 上 /tmp 将耗尽所有可用的 RAM 和交换),它使服务器陷入瘫痪。