在linux运维中,磁盘满了是最经常遇到df查看磁盘还是100%
。
- 通常情况下面,我们会先通过find 命令找出大文件,比如下面的命令找出大于10g的文件。
find / -size +10G
- 找出后我们可以通过echo 命令清空这个文件,有时间直接删除这个文件,但删除后df 发现磁盘还是100%,资源并没有释放。
那是因为虽然文件被删除,但如果还有程序打开(占用)这个文件,真实文件内容并没有释放。
[undefined]
可以通过lsof 命令查看处于删除状态的文件句柄。
$ lsof | egrep "deleted|COMMAND"COMMAND PID TID TASKCMD USER FD TYPE DEVICE SIZE/OFF NODE NAMEora 23411 8194 oracle oracle 33 REG 65,65 4294983680 31014933 /oradata/DATAPRE/file.dbf (deleted)
就可以发现PID为 23411 的进程正在打开这个文件,并且连接已经失效了。
$ file /proc/23411/fd/33
/proc/23411/fd/33: broken symbolic link to `/oradata/DATAPRE/file.dbf (deleted)'
此时有两种解决办法,方法一比较粗暴,直接kill 掉这个进程,但如果不能杀死进程的话,方法二比较优雅,清空这个fd的内容。
$ echo > /proc/23411/fd/33