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