开启辅助访问 切换到窄版

打印 上一主题 下一主题

如何在Linux下快速找到被删除的文件?

[复制链接]
作者:怡亚通 
版块:
嵌入式操作系统 linux 发布时间:2021-3-10 11:24:17
19050
楼主
跳转到指定楼层
| 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本文转载自:Zlatan Eevee
原文:http://tinyurl.com/y89mq5oq

日常运维过程中,我们经常需要处理磁盘空间问题,当接到告警后,第一时间会去找那些大文件,一般比如 Centos,可能大文件就是 /var/log/messages。
但有的时候,会出现怎么也查不到大文件的情况,通过 du 查找的时候,统计出来的大小,跟 df 显示的占用空间对应不上。
如果通过 df -i 查看inode没有满的话,那么极有可能,是有大文件被直接rm了,但是仍然有进程打开了这个文件。
这种情况,由于进程没有退出,因此文件占用的空间并不会释放;直到进程退出,磁盘空间才会真正释放。
如何找到是哪个进程打开了该文件
Linux上,由于进程仍然存活,因此可以通过查看所有进程打开的 fd,如果该文件已经被删除,则查看时,会显示(deleted)。
3886090lrwx ------ 1 zerotier-one zerotier-one 64 Aug 21 00:19 /proc/29400/fd/4 -> /tmp/ibpX85Vd (deleted)
3886100lrwx ------ 1 zerotier-one zerotier-one 64 Aug 21 00:19 /proc/29400/fd/5 -> /tmp/ibCwAgAj (deleted)
3886110lrwx ------ 1 zerotier-one zerotier-one 64 Aug 21 00:19 /proc/29400/fd/6 -> /tmp/ibRZ5rep (deleted)
3886120lrwx ------ 1 zerotier-one zerotier-one 64 Aug 21 00:19 /proc/29400/fd/7 -> /tmp/ibBuNEzA (deleted)
3886160lrwx ------ 1 zerotier-one zerotier-one 64 Aug 21 00:19 /proc/29400/fd/11 -> /tmp/ibG68kpG (deleted)
如何避免这种情况
不要直接删除该文件,而是通过将文件 truncate 的方式,释放磁盘空间。
一种方式是:
cat/dev/null > ${filename}
或者(新get!)
: > ${filename}
如此,可以快速释放空间。
参考文档
Find and remove large files that are open but have been deleted

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表