什么时候挂载(在 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 系统支持。我可以确认制作/tmp
tmpfs 文件系统并通过自动安装它/etc/fstab
确实可以在 Debian 上工作。
在实时系统上过渡到 tmpfs 存在一些困难/tmp
,因为文件已经存在/tmp
且无法复制。但/tmp
重新启动后预计不会保存任何文件。/tmp
在挂载分区时挂载不同的文件系统是安全的/etc/fstab
。
答案2
一般来说,您应该telinit 1
在挂载当前的 /tmp 目录之前。在单用户模式下,/tmp 中不应该有系统操作所需的文件,因此您应该能够清理该目录,卸载它(如果它是一个单独的分区),然后在该挂载处挂载其他内容返回多用户模式之前的点。
确保 /tmp 未被使用:
- 当 /tmp 是已挂载的文件系统时,
fuser -m /tmp
将在修改之前验证当前没有进程正在使用该挂载点。 - 当 /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...