与另一篇文章相关,在该篇文章中,感谢另一位发帖人,我终于能够删除 /tmp 内的文件。
然而,最后系统管理员不得不恢复几天前的快照才能恢复 mysql 服务。
我推断 mysql 服务器没有运行,事实也确实如此。一个错误是它无法写入 tmp 目录来创建 mysqld.sock/.pid 文件,因此它们不存在。
因此,服务器重新启动/重启并最终从以前的快照恢复,所以现在一切都正常,但该快照是几天前的,所以迹象如下输出所示:
drwxrwxrwt 2 root root 34471936 Oct 8 20:47 tmp
那个大数字不知怎么的仍然被“记住”,我试图找出是什么写入了那个文件夹?在 Drupal 中,预览文件的路径设置为该目录,但我刚刚进行了一系列测试(该站点没有登录帐户/仅用于数据)下载、预览等,而 /tmp 文件夹中的文件编号从未改变,那么是什么写入了该文件夹?
这是一个除非出现问题否则不会关闭/重启的 Web 服务器。即便如此,重启后 /tmp 目录也不会清空。此外,在 rsC 文件中,TMPTIME=0
仍为默认设置。
因此,我不确定3441936
在实际目录为空时,还能查看哪里或如何调查是什么在保持该大小?或者,如何搜索正在使用该目录的进程。
这仅适用于 Drupal 安装。Ubuntu 12。
答案1
尝试这个。
$ sudo lsof | egrep '^COMMAND|deleted'
我在系统上看到的示例输出...
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
mysqld 2842 mysql 5u REG 9,1 4633 6209543 /tmp/ibLRNV1i (deleted)
mysqld 2842 mysql 6u REG 9,1 424 6209545 /tmp/ibnnYl1y (deleted)
mysqld 2842 mysql 7u REG 9,1 0 6209546 /tmp/ib5ViM0O (deleted)
mysqld 2842 mysql 8u REG 9,1 0 6209547 /tmp/ibh9U55F (deleted)
mysqld 2842 mysql 13u REG 9,1 0 6209548 /tmp/ibRzqtwm (deleted)
mysqld 2842 mysql 319u REG 9,1 25894907 6209553 /tmp/MLFxqPDX (deleted)
mysqld 2842 mysql 350u REG 9,1 267677827 6209550 /tmp/MLFBkHbP (deleted)
许多 *nix 文件系统的共同特征是,没有什么可以阻止进程继续读取/写入已删除的文件,也没有任何东西可以阻止删除进程仍打开的文件。
某些程序确保临时文件不会残留的一种方法是(也可能是一种安全措施,尽管我不确定这有多“安全”)打开它们,然后立即“取消链接”(删除)它们。如果进程意外终止,磁盘空间将被释放。MySQL 会这样做:
如果 mysqld 终止,MySQL 会安排删除临时文件。在支持它的平台(如 Unix)上,这是通过在打开文件后取消链接来实现的。这样做的缺点是名称不会出现在目录列表中,并且您看不到填满临时文件目录所在文件系统的大型临时文件。(在这种情况下,lsof +L1 可能有助于识别与 mysqld 关联的大型文件。)
—http://dev.mysql.com/doc/refman/5.6/en/temporary-files.html
很重要的一点:当删除仍处于打开状态的文件时,磁盘上的空间实际上并未释放,直到最后一个持有文件句柄的进程关闭该文件。在文件关闭之前,除了终止进程外,任何人(包括 root)都无法释放该空间。相反,终止(或尽可能正常停止)进程应该始终释放空间。
因此,我建议您查看一下您的系统可能存在哪些打开和删除的文件,这可能会给您提供一些线索。
就我的系统而言,MySQL 确实打开了许多临时文件,其中一些相当大。
如果您想窥视这些文件,这很容易做到,尽管您能够辨别的内容的性质差异很大。以 PID 和 FD 下的数字为例……例如,PID 2842 FD 350:
$ sudo strings /proc/2842/fd/350 | less
如果 MySQL 确实打开了已删除的临时文件,则停止并重新启动 MySQL 将释放该空间,然后您需要调查是什么原因导致这些文件保持打开状态,或者它们停留的时间超过适当时间,以及您是否有查询生成了过大的临时表并耗尽了您的 /tmp 空间。如果您的 /tmp 目录是其自己的分区/文件系统,那么df -h
将为您提供有关可用空间和已用空间的更好答案。您可能不需要太担心目录条目本身的实际大小。
当然也可能不是 MySQL。:)
答案2
当您删除文件时,ext[234] 不会缩小目录的大小;它只是将条目标记为已删除,以便以后可以重新使用。如果您确实想收回这 34 MB,则需要删除并重新创建目录,或者启动到救援模式并e2fsck -D
在卷上运行。