/ tmp的Linux / UNIX服务器安装实践

根据你们所看到的,服务器系统上的/ tmp的推荐configuration是什么以及为什么。 这些年来,我曾经就这些问题进行过讨论,有时还会有基本的分歧。

以下基本上是我看到的问题。 有些人可能会build议,这些问题有几个问题,但是,我认为这可能会更容易pipe理员,如果这个信息是在一个标题。 我确信这将是信息。

特别为/ tmp:

  1. 应该ln -s / var / tmp / tmp?

  2. 在重启之间应该保留/ tmp吗?

  3. / tmp应该在真实的磁盘区域上,还是允许基本上在SWAP区域(或tmpfs)上执行?

  4. / tmp应该放在与/(根)磁盘不同的磁盘上吗?

  5. 你将/ tmp放在/(根)磁盘的另一个磁盘控制器上吗?

  6. / tmp大小的任何经验法则?

  7. 系统启动时,如何pipe理/ tmp空间? 删除所有文件>某些年龄? 单独离开区域,直到达到最大%的年龄?

  8. 是否应该实施任何程序来pipe理这个地区?

特别为/ tmp:

  • 应该ln -s / var / tmp / tmp?

在内存完整的磁盘映像的情况下(想想“实时启动CD”),这可能是可以接受的,因为RAM的每个字节都需要被压缩。 否则,除非硬盘空间不足,否则。 / var有自己的特性,在执行系统维护时混合/ tmp与/ var / tmp可能会产生意想不到的后果。 它也增加了一个额外的依赖关系,因为必须为/ var / tmp安装/ tmp才能正常工作; 不是所有的东西都需要/ tmp,而且你可能会遇到这样的情况:你想把它迁移到不同的分区或者驱动器,但是不能,因为你不想卸载/ var。

  • 在重启之间应该保留/ tmp吗?

不可以。如果你依靠这个作为一个一致的行为,那么你迟早会遇到问题。

  • / tmp应该在真实的磁盘区域上,还是允许基本上在SWAP区域(或tmpfs)上执行?

当它被大量使用时,这是一种诱惑 – “我们将把/ tmp放入RAM磁盘,它将加速访问,当系统重新启动/closures时,没有任何东西需要清理”。 但是,如果您正在考虑将临时空间作为将要交换的RAM磁盘来实现,那么我将考虑其他程序对系统交换空间使用情况的影响。 如果交换是在系统处于急转直接需要的情况下以“紧急溢出”的forms出现的话,那么最后一件事情就是交换空间消耗的空间被填充/ tmp占用,消耗内存,导致压力VM子系统交换到磁盘。 在交换活动和附加的I / Ostream入RAM磁盘之间(这又可能导致额外的页面插入满足seek()),你的系统将很快变成I / O限制。

  • / tmp应该放在与/(根)磁盘不同的磁盘上吗?

最好是,虽然没有必要。 如果大量使用它,或者需要持续的工作量,肯定是的。 假设的例子:将临时文件转储到/ tmp的数据库将通过将/ tmp引入单独的主轴(即驱动器)来获得稍微的加速。

  • 你将/ tmp放在/(根)磁盘的另一个磁盘控制器上吗?

如果您对可恢复性或速度有要求,那么应该考虑这一点。

  • / tmp大小的任何经验法则?

它应该容纳你预期的工作量的两倍。 这就是说,如果你有本地用户经常使用这个空间,迟早会有人做一些愚蠢的事情,并试图填补它。 有一个轻微的超额使您可以避免与程序,因为他们的临时文件已经填补了剩下的空间停止奇怪的“问题”。

如果这是一个“公共服务”安装,服务器提供一个或多个networking服务,但不托pipe用户,那么这可能是偏低的。 如果这是一个多用户安装,这将是偏高的(是的, 仍然有地方承载实际用户 ,而不仅仅是他们的networking服务)。

  • 系统启动时,如何pipe理/ tmp空间? 删除所有文件>某些年龄? 单独离开区域,直到达到最大%的年龄?

看看tmpwatch命令,我想你会发现它很适合你的问题的这个部分。 该命令简单地删除任何超过一定年龄的文件。 根据填满的速度,你可以做30天,45天,90天等。

  • 是否应该实施任何程序来pipe理这个地区?

我会build议如下:

  1. 所有的文件都是短暂的,并不能保证在重新启动的时候存活。
  2. 当地时间每天晚上,通过运行tmpwatch命令的cron作业,过时%过期的陈旧文件将被删除。

其余的是你的具体需求的问题。

非常多的取决于你正在使用的特定的应用程序负载。 一些应用程序服务器(SunONE,旧​​netscape的东西)写入几百到几千个文件到/ tmp – 在这种情况下,你真的不希望它是一个挂载的ramdisk,没有理由在重新启动之间保存它。

服务器正在变得越来越不那么普遍,更特殊的目的 – 这种types的问题(以及类似的“如何分区我的系统”的问题)真的取决于您的装载。

我最近有一台服务器在4年左右的时间里第一次被重新启动 – 它在启动过程中被卡住了,删除了/ tmp中的所有文件 – 那里有那么多的文件,需要花费一个小时的时间来清理它。 如果你的盒子不经常重新启动,定期清理它是个好主意。

根据经验,我build议不要混合你的/ var / tmp和/ tmp目录。

原因是/ var(希望)是所有日志,caching和服务数据(例如数据库)将驻留的地方。 将/ var放置在单独的分区上通常是一个好主意,因此如果发生重要的数据事件(例如大量日志logging或数据库写入),则root和/ tmp分区仍将具有可用空间以可靠地运行。

例如,我从字面上只是从没有遵循这种做法的网站返回(即,一切都在一个分区上),并且由于日志build立,整个系统被迫屈服了。 如果遵循一个理智的分区布局,那么/ var分区的空间已经不足了,但是服务器会保持响应。

只回答一些问题

我会将/ tmp放在与/不同的分区上,以便在正常操作期间挂载/ ro。 单独的磁盘? 这取决于使用/ tmp和/得到多less,以及他们是否彼此相处。

至于第一部分和第二部分,在我的盒子(Mac OS X)上,/ var / tmp不是每天清理出来的,但是/ tmp是,所以它们有不同的策略,因此不应该被一起链接。 我不确定每天的清洁/ var / tmp不会破坏任何东西,并希望在变得更响亮之前进行调查 – 目前只有17.2万个。

有一件事我会考虑 – 参考你的最后一个问题 – 使/ tmp noexec,nosuid – 也就是说,没有可执行文件将能够从/ tmp运行,并且没有suid二进制文件将能够切换userid。 但是,这可能会影响到一些程序,所以在你完全依赖它之前进行testing – 我认为ssh甚至是其中之一,但是我忘记了。

这是一个安全措施,可以提高您对/ tmp的安全性。

另一件事:很多用户会尝试使用/ tmp作为永久的临时存储:任何强制清除/ tmp必须与用户的教育一起完成:提醒他们/ tmp是临时的 ,任何放置的东西都可以在任何时候消失时间。

/ tmp应该在真实的磁盘区域上,还是允许基本上在SWAP区域(或tmpfs)上执行?

你有没有考虑过/ tmp在这种情况下会发生什么? 这不是你做两次的事情。 我已经做了一次(在Solaris / tmp将吃掉所有可用的内存和交换),并把它带到服务器的膝盖。