首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Linux 磁盘空间告警排查:df 与 du 对不上、inode 耗尽与已删除未释放文件

Linux 磁盘空间告警排查:df 与 du 对不上、inode 耗尽与已删除未释放文件

原创
作者头像
一只特立独行的兔先生
发布于 2026-10-17 18:03:43
发布于 2026-10-17 18:03:43
360
举报

现象

监控提示云服务器数据盘使用率超过 90%,登录后 df -h 显示几乎写满,但 du 汇总出来的目录大小却小得多;或者磁盘明明还有空间,写文件却报 No space left on device。这类问题通常落在三种原因上:真实大文件占用、inode 耗尽、文件已删除但进程仍持有句柄。下面按顺序排查。

第一步:确认是空间还是 inode

代码语言:bash
复制
df -hT          # 空间使用率与文件系统类型
df -i           # inode 使用率
  • df -h 的 Use% 高:空间被占满,进入第二步。
  • df -i 的 IUse% 高而空间有余:小文件过多导致 inode 耗尽,直接看第四步。

第二步:逐层定位大目录

代码语言:bash
复制
# 只统计当前文件系统,避免跨挂载点;逐层下钻
du -xh --max-depth=1 / 2>/dev/null | sort -rh | head -15
du -xh --max-depth=1 /var 2>/dev/null | sort -rh | head -15

-x 表示不跨文件系统,sort -rh 按人类可读大小倒序。常见元凶:

  • /var/log:应用日志未轮转、journal 日志膨胀。
  • /var/lib/docker:镜像、容器可写层、容器 json 日志。
  • 业务目录下的临时文件、dump 文件、core 文件。

查找单个大文件:

代码语言:bash
复制
find / -xdev -type f -size +500M -exec ls -lh {} \; 2>/dev/null

第三步:df 比 du 大很多——已删除但未释放的文件

典型场景:直接 rm 了正在写入的日志文件,进程仍持有文件句柄,空间不会释放,du 看不到这些文件,df 却照常计入。

代码语言:bash
复制
lsof +L1                      # 列出链接数为 0(已删除)但仍打开的文件
lsof -nP | grep deleted | sort -k7 -n -r | head

处理方式:

  • 优先重启或重载持有句柄的进程(如 systemctl reload nginx),句柄关闭后空间自动释放。
  • 无法重启时,可清空该句柄指向的文件:
代码语言:bash
复制
# <PID> 与 <FD> 取自 lsof 输出
: > /proc/<PID>/fd/<FD>

注意:这会直接截断文件内容,只用于确认可丢弃的日志。

第四步:inode 耗尽

代码语言:bash
复制
# 统计各一级子目录下的文件数量,找出小文件最多的目录
for d in /var/*; do echo "$(find "$d" -xdev 2>/dev/null | wc -l) $d"; done | sort -rn | head

常见原因是会话文件、邮件队列、缓存碎片文件堆积。清理对应目录并给应用加上过期清理机制即可。

第五步:处理与预防

  • 日志:配置 logrotate(按大小或天数切割、压缩、保留份数),journald 可在 /etc/systemd/journald.conf 中设置 SystemMaxUse。
  • Docker:为容器日志设置 max-size 与 max-file,定期 docker system df 查看占用,确认无用后再 docker system prune。
  • 监控:对磁盘使用率与 inode 使用率分别配置云监控告警,阈值建议 80% 预警、90% 严重,具体以业务实际为准。
  • 扩容:云硬盘支持在线扩容,扩容后还需在系统内扩展分区与文件系统(如 growpart、resize2fs 或 xfs_growfs),具体操作以控制台和官方文档为准。

小结

排查顺序:df -h 与 df -i 定类型 → du -x 逐层下钻 → lsof +L1 找已删除未释放文件 → 清理并补上轮转与监控。记住一条经验:删除正在写入的日志要用截断或重载进程,而不是直接 rm。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

目录
  • 现象
  • 第一步:确认是空间还是 inode
  • 第二步:逐层定位大目录
  • 第三步:df 比 du 大很多——已删除但未释放的文件
  • 第四步:inode 耗尽
  • 第五步:处理与预防
  • 小结
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档