跳至主要內容

linux磁盘空间不足

日常积累日常问题服务器约 297 字小于 1 分钟

问题描述

线上服务器突然告警磁盘空间不足,于是登录服务器,运行df -h .du -sh .,发现返回使用大小不一致。

df,du输出不一致
df,du输出不一致

修复方法

这种情况一般是文件被删除,但是还被进程占用,df 输出的占用情况一般大于 du

  1. 查询删除状态的文件PID

提示

可以看到delete状态的文件占用了64441629016KB,约60GB。

# 查找未能删掉的文件
lsof +L1
# 获取PID
lsof +L1 | awk '{print $2}' | uniq
  1. 查找文件句柄
# 查找文件句柄
ll /proc/${PID}/fd/* | grep ${FileName}
# 例如
ll /proc/9197/fd/* | grep /data/docker/containers/e4c57a7c707053d047d44ebb7e9ec3e08839866b1d5c1601e693080b26691625/e4c57a7c707053d047d44ebb7e9ec3e08839866b1d5c1601e693080b26691625-json.log
  1. 将无效的文件句柄置为空
# 将无效的文件句柄置为空
echo > /proc/${PID}/fd/${FD}
# 例如
echo > /proc/9197/fd/53
  1. 查询磁盘占用情况

提示

delete状态的文件占用磁盘空间已经清除,磁盘df的Used输出由原来99G下降为39G。

# 系统磁盘使用情况
df -h .
# 占用磁盘空间
du -sh .
清除删除状态文件句柄
清除删除状态文件句柄