/tmp的好文件系统是什么?

我在考虑将/tmp放在独立的分区上...用什么文件系统格式化它会比较好呢?
我之所以问这个问题是因为存储在/tmp中的数据并不是永久性的,所以我不需要日志记录、复杂的索引或其他任何东西。
8个回答

有时候我发现将/tmp移动到内存中(tmpfs)是最好的解决方案(尤其是在我使用大量磁盘密集型IO操作的设置上 - MySQL等),如果你有足够的内存来支持它。

2我有2GB的RAM,所以这可能不是一个选择。 - Nathan Osman
2实际上,这应该是足够的内存。对于系统的正常使用(无论是什么),/tmp 文件夹通常并不会被大量使用。 - joschi
3如果需要的话,tmpfs会使用交换空间 - 因此您的交换空间可以兼作/tmp,无需额外分配空间。 - gbroiles
@George 你打算把你的 /tmp 分区设置多大? - Marco Ceppi
64 mb够用吗? - Nathan Osman
1@George,这个分区大小对于/tmp来说已经足够大了——在我的台式机上,我最多只使用了12MB的空间,尽管在我的服务器上,当客户在MySQL和脚本语言中做些愚蠢的事情导致/tmp变得非常庞大时,它可能会变得非常大。tmpfs的精妙之处在于它不仅仅会占用64MB的内存,而是会根据需要进行扩展——所以你在tmpfs中只会使用当前所需的空间。 - Marco Ceppi
这里有一些关于/tmp中tmpfs的批评:tmpfs被认为是有害的你对此有什么看法? - ignis

这里有几个不错的选择:
  1. tmpfs:是一种将文件存储在RAM中的文件系统。这并不意味着文件系统会占用所有的RAM。相反,它只占用实际需要的空间。通常只需要几兆字节。如果要使用它,请在/etc/fstab中添加一行类似于:none /tmp tmpfs size=64M,mode=1777 0 0的内容。您可以根据需要更改size的值。如果您认为容量太小,可以使用mount命令增加大小:mount -t tmpfs tmpfs /tmp -o size=128M,mode=1777,remount。容量将在原地增加而不会删除现有文件。
  2. ext2/3:您在问题中提到不需要任何花哨的功能。然而,我建议使用日志功能。因为如果您使用ext2,并且/tmp很大,检查它将需要一些时间。在许多情况下,ext3启动速度更快。因此,我建议使用日志功能。
  3. ext4reiserfs等:某些软件使用/tmp来存储大量的小文件。因此,在某些情况下,没有更多的可用块,文件系统已满。ext4和reiserfs以不同的方式存储文件。因此,对于/tmp来说,使用它们可能是一个不错的选择。
如果您的计算机运行时间很长,删除/tmp中未使用的文件是一个好主意。 tmpreaper是一个可以为您完成这项任务的解决方案。
然而,我首选的方法是使用tmpfs

第一个选项使用/etc/fstab是否也适用于systemd? - Smile4ever
1@Smile4ever 是的,/etc/fstabutil-linux 的一部分,因此无论使用哪种初始化系统,它都会存在于任何 Linux 系统中。 - villapx

如果你不想让它可能占用内存,我建议你将其运行为ext2。对于一个在重新启动时你不(应该不)关心数据的文件系统来说,没有理由为了日志记录而降低性能。
实际上,忘掉刚才的建议,你应该使用ext4并禁用其日志记录,这样应该比ext2更快。将其格式化为ext4,并在fstab中加入挂载选项data=writeback。

使用 tmpfs 应该可以满足您的需求,前提是您安装了足够的内存。

话虽如此...关于将内存磁盘用作 /tmp 的问题(来源于其他文章):

  • 应该将 /tmp 放在真正的磁盘区域上,还是允许它基本上实施在 SWAP 区域(或 tmpfs)上?
当它被大量使用时,这是一个诱惑——“我们将把/tmp放入RAM磁盘中,这样可以加快访问速度,而且当系统重新启动/关闭时,就没有需要清理的东西了”。然而,如果你打算将临时空间实现为一个将被交换的RAM磁盘,那么我会考虑其他程序对系统交换空间使用的影响。如果交换空间作为系统陷入困境时的“紧急溢出”形式存在,并且你不希望交换空间被一个填充/tmp的失控进程占用、消耗内存并导致VM子系统受到交换到磁盘的压力,那么这是最后一件你想要发生的事情。在交换活动和额外的I/O流入RAM磁盘之间(反过来可能导致额外的页面调入,以满足seek()的要求),你的系统很快就会成为I/O受限。

使用具体的挂载选项与 ext4 文件系统应该没问题。请使用以下挂载选项:

barrier=0 : Significantly improves file write operations in some scenarios
noatime : Don't update file last access time, you don't need this on /tmp files and it should help with write operations performance.

添加nodiratime - Weboide
noatime 包括 nodiratime - Andriy Volkov

我对ext4感到满意。如果你喜欢调整它,或者如果你有很多内存,可以尝试一些挂载选项,或者使用tmpfs。


作为回应那些询问为什么要创建一个单独的 /tmp 分区的人,我确信有很多原因,就像一些已经提到的那样,但我发现其中一个在今天尤其相关,那就是如果你正在运行的是 SSD 上的 /,你希望尽量减少对该驱动器的写入次数,因此将 /tmp 移动到另一个位置是个好主意,因为它是文件系统中变化频繁的区域。

我认为tmpfs可能不是一个好的选择,因为通常/tmp是可被所有人写入的,所以任何人都可以将其填满,如果它被填满,它将占用你的所有内存,导致服务器变得非常缓慢。

我认为设置一个合理的tmpfs最大大小并拥有交换空间可以解决这个问题。 - Olathe