问题

在基于 Linux 的系统上,根文件系统被一些未知进程填满。
无论从文件系统中移动或者清除了哪些文件,它都会继续。

# df -hP /
/dev/mapper/VGExaDb-LVDbSys1    ext3     30G   29G     0 100%    /

没有大文件来说明整个文件系统:

# find / -xdev -type f -size +100M -exec ls -lh {} \;

没有大目录来说明整个文件系统:

# du -h --max-depth=1 /
42M     /sbin
13M     /etc
2.4G    /usr
45M    /tmp
451M   /var
192M   /lib
(and so on)
...
更多: zhilu jiaocheng

解决方案

过去,有两个或者多个进程在使用一个文件;例如,/tmp/top.log。
一个进程通过删除它(实际上是目录条目)来停止它对 /tmp/top.log 的访问,另一个进程继续写入 inode 引用,从而允许文件继续增长。

这可以在以下输出中看到:“lsof +L 1”

# lsof +L 1
COMMAND    PID      USER   FD     TYPE   DEVICE     SIZE/OFF      NLINK          NODE       NAME
top        34261    root   1W     REG   252,0       21460567592   0              1785896    /tmp/top.log (deleted)

其他文件也被列出,但要小得多。

这表明 user=root 正在运行一个正在假脱机到 /tmp/top.log 的 top 命令,并且当前没有指向该文件的链接。
该假脱机文件大小为 21Gb,但未在“du -h -max-depth=1 /”输出中报告,其中 /tmp 仅列为 45M。

请按照以下步骤识别并终止此类进程。

  1. 使用以下命令识别系统上链接少于 1 个的文件:
# lsof +L 1
  1. 终止任何正在写入任何异常大文件的进程。
    在上面的示例中,我们将运行:
# kill 34261
  1. 当最终进程停止使用该文件时,空间将被释放。
Linux 文件系统使用率100%
日期:2020-09-17 00:11:03 来源:oir作者:oir