首页/系统/Linux 运维命令速查/场景:删除文件后空间不释放
磁盘与文件系统51 条

场景:删除文件后空间不释放

df 显示满、du 找不到大文件——典型是已删除但进程仍持有句柄的文件;定位并安全释放。

Linux 运维命令速查系统更新于 2026-10-12
场景rm 后 df 无变化,磁盘持续告警
目标找到 deleted 句柄并释放空间
工具链lsof → /proc/PID/fd → 重启/截断

第 1 步:定位

第 1 步:定位
lsof +L1 2>/dev/null | sort -k7 -n | tail -n 20
# 或全局扫(较慢)
lsof -nP +L1 | awk '$7>1073741824'

第 2 步:交叉验证

第 2 步:交叉验证
ls -l /proc/<PID>/fd | grep deleted
head /proc/<PID>/fdinfo/<FD>

第 3 步:处置

第 3 步:处置
systemctl restart <持有服务>      # 首选:让应用自己重开文件
# 不能重启时:先重开同名新文件,再评估旧句柄
: > /path/to/new.log
把 deleted 文件当普通文件再 rm 是无效操作;对数据库这类进程,重启前确认复制/主从状态。

易错点

  • lsof 全量输出可能几十万行,先 +L1 再按 SIZE 排序,避免刷屏
  • 只对应用做截断而不重启,若应用仍持有旧偏移写入,新数据可能从巨大 offset 续写产生空洞文件

数据来源与参考

  • man 8 lsof(+L1 语义)
  • proc(5) man(/proc/PID/fd)

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌