为什么 /tmp 不使用 tmpfs?

我有很多的RAM,但使用得很少。我还会用gtk-recordmydesktop录制一些屏幕录像,默认保存在/tmp目录下。我原以为这意味着尽可能地存储到RAM中,但实际上我检查了一下发现/tmp并没有挂载tmpfs。这是为什么呢?

请查看此错误报告 - jarno
3个回答

我觉得你自己已经回答了这个问题。很多程序使用/tmp目录来存储临时文件,而且这些文件可能非常大。
例如,Brasero默认将CD/DVD的镜像文件存储在该目录中,这个文件可能有4.7GB大小。如果你的RAM和交换空间都满了,在内存不足的情况下,冒着系统严重减速(或系统死机)的风险是不值得的。
对于高级用户来说,改变一些应用程序的默认设置并将/tmp挂载为tmpfs是没有问题的。但对于普通用户来说,我想这个风险是不值得的。

1而且,我觉得如果你录制了一些很棒的屏幕录像,然后在停电或系统故障后全部丢失,你可能会有点生气并咒骂开发人员。 ;) - arrange
如果你使用ext4文件系统,/tmp目录中的内容甚至可能驻留在内存中,从未触碰磁盘。 - LasseValentini
@Fraekkert:你是什么意思?为什么选择ext4?为什么从不选择其他的?能否详细解释一下? - arrange
1这不仅适用于ext4,而是因为延迟分配(Delayed allocation)。基本上它意味着,当程序告诉操作系统将文件写入磁盘时,并不一定会立即写入。相反,文件会保留在内存中以便快速访问。如果文件随后被相对快速地删除,它就永远不会达到磁盘上。如果需要更多信息,请参考维基百科 - LasseValentini
@Fraekkert:我认为ext4的提交时间是5秒,分配会延迟到下一次提交,所以在这种情况下帮助不大,对吗? - arrange
嗯,一般来说,在ext4文件系统下,删除文件的时间是30秒,而不是5秒。所以如果你在30秒内删除文件,它可能并没有真正写入磁盘。谢谢你的指点。 - arrange
1以下是一个详细解释5/30秒主题的评论供参考:https://bugs.launchpad.net/ubuntu/+source/linux/+bug/317781/comments/45 - lxgr

zram压缩怎么样?

可用空间超过256兆字节,这取决于文件类型。

modprobe zram num_devices=1 
# max ram usage = 256 Mbytes
echo 262144 > /sys/block/zram0/disksize
mke2fs -q -m 0 -b 4096 -O sparse_super -L zram /dev/zram0
mount -o relatime,noexec,nosuid /dev/zram0 /tmp

这实际上是一个相当有趣的想法...我会试一试 :) - Piskvor left the building