何时挂载/tmp(和其他临时目录)

何时挂载/tmp(和其他临时目录)

什么时候挂载(在 Debian 上)合适/tmp?因为/home我不会因为echo "/dev/foo /home type defaults 0 0" >>/etc/fstab- 但我能确定在应用/tmp时不会被任何程序使用吗?fstab


我在用Ubuntu 或普通 Debian 或 Debian/格米尔- 我想这不会有太大区别。

到目前为止我读过的内容:

  • 互联网上充满了只需添加的建议tmpfs /tmp tmpfs <optionns> 0 0- 但我不确定。

  • 我找到了这个回答关于在不重新启动的情况下满载时该怎么做/tmp(简而言之:无论如何最好重新启动,除了联合安装)。

  • [Deban 政策] 没有解释在哪里添加挂载,或者何时/tmp可能发生首次访问。更有帮助的是/etc/init.d/README/etc/rcS/README的 Ubuntu (在线阅读)。

背景:我将在我的上网本上使用一些 Debian 风格(无 HD、8 GB SSD、1 GB RAM - 必要时将 RAM 加倍)。我的记忆力并不低。有些任务太慢了(构建中型 C 程序或从 TeX 编译 PDF 都需要 5 秒以上),但它们在 tmpfs 上不需要时间。我想在 /tmp 上安装 tmpfs 以加速它们。

答案1

Debian 政策似乎没有明确指定这一点,但 Debian 确实支持创建/tmp单独的文件系统(以及/home/var/usr)。这传统上由 UNIX 系统支持。我可以确认制作/tmptmpfs 文件系统并通过自动安装它/etc/fstab确实可以在 Debian 上工作。

在实时系统上过渡到 tmpfs 存在一些困难/tmp,因为文件已经存在/tmp且无法复制。但/tmp重新启动后预计不会保存任何文件。/tmp在挂载分区时挂载不同的文件系统是安全的/etc/fstab

答案2

一般来说,您应该telinit 1在挂载当前的 /tmp 目录之前。在单用户模式下,/tmp 中不应该有系统操作所需的文件,因此您应该能够清理该目录,卸载它(如果它是一个单独的分区),然后在该挂载处挂载其他内容返回多用户模式之前的点。

确保 /tmp 未被使用:

  1. 当 /tmp 是已挂载的文件系统时,fuser -m /tmp将在修改之前验证当前没有进程正在使用该挂载点。
  2. 当 /tmp 不是一个单独的文件系统时,find /tmp -print0 | xargs -0 fuser将会给出类似的结果。

您还可以考虑安装单独的 tmpfs 文件系统,并导出 TMPDIR(或编译器的类似环境变量)以使用它。这将为您带来 tmpfs 暂存空间的好处,而无需进行系统范围的更改。

答案3

tmp不应该用于持久数据

LSB(Linux Standard Base)定义在FHS(FilesystemHierarchyStandard) 2.3 那

“程序不得假定在程序调用之间保留 /tmp 中的任何文件或目录。”

作为吉尔斯指出,这可能包括插座用于运行程序。大多数这些程序可能是网络服务,位于运行级别 2 或 3。

要获取系统的详细信息:

cd /etc/init.d ; grep tmp *应该显示启动期间 tmp 的使用情况。

做额外的事情grep mktemp *来寻找 tmp 的更高级别的用法。

每个程序都应该只在短时间内使用 tmp。

在您正在运行的系统上执行fuser /tmp/* ; fuser /tmp/*/*诸如此类的操作来检查正在运行的进程是否阻塞 tmp。

除此之外 /etc/fstab 应该是安装文件系统的标准位置 - 为什么不应该用“1 2”添加它?

答案4

/etc/fstab仅在运行时使用mount

我能想到的三个时间:

  • 在系统启动期间(在 Debian 系统上,这是在启动过程的早期通过/etc/rcS.d/S10mountall.sh
  • 当超级用户运行时mount -a
  • 当超级用户运行时mount <mount point mentioned in /etc/fstab>

如果您说您想为即将运行的程序创建一个新的 tmpfs,但无需重新启动,我认为您必须将其安装在其他位置,/tmp这样您就不会破坏已经在运行的程序。

为什么不只是

mkdir /tmpnew
mount -t tmpfs tmpfs /tmpnew
TMPDIR=/tmpnew make...

相关内容