乐趣区

关于java:如何在-Linux-下快速找到被删除的文件

日常运维过程中,咱们常常须要解决磁盘空间问题,当接到告警后,第一工夫会去找那些大文件,个别比方 Centos,可能大文件就是 /var/log/messages

但有的时候,会呈现怎么也查不到大文件的状况,通过 du 查找的时候,统计进去的大小,跟 df 显示的占用空间对应不上。

如果通过 df -i 查看 inode 没有满的话,那么极有可能,是有大文件被间接 rm 了,然而依然有过程关上了这个文件。

这种状况,因为过程没有退出,因而文件占用的空间并不会开释;直到过程退出,磁盘空间才会真正开释。

如何找到是哪个过程关上了该文件

Linux 上,因为过程依然存活,因而能够通过查看所有过程关上的 fd,如果该文件曾经被删除,则查看时,会显示 (deleted)

示例如下:

$ sudo find /proc/*/fd -ls | grep  '(deleted)'
   388609      0 lrwx------   1 zerotier-one zerotier-one       64 Aug 21 00:19 /proc/29400/fd/4 -> /tmp/ibpX85Vd\ (deleted)
   388610      0 lrwx------   1 zerotier-one zerotier-one       64 Aug 21 00:19 /proc/29400/fd/5 -> /tmp/ibCwAgAj\ (deleted)
   388611      0 lrwx------   1 zerotier-one zerotier-one       64 Aug 21 00:19 /proc/29400/fd/6 -> /tmp/ibRZ5rep\ (deleted)
   388612      0 lrwx------   1 zerotier-one zerotier-one       64 Aug 21 00:19 /proc/29400/fd/7 -> /tmp/ibBuNEzA\ (deleted)
   388616      0 lrwx------   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

本文转自:「Zlatan Eevee」

原文:https://tinyurl.com/y89mq5oq

近期热文举荐:

1.600+ 道 Java 面试题及答案整顿 (2021 最新版)

2. 终于靠开源我的项目弄到 IntelliJ IDEA 激活码了,真香!

3. 阿里 Mock 工具正式开源,干掉市面上所有 Mock 工具!

4.Spring Cloud 2020.0.0 正式公布,全新颠覆性版本!

5.《Java 开发手册(嵩山版)》最新公布,速速下载!

感觉不错,别忘了顺手点赞 + 转发哦!

退出移动版