🧠 Linux 删除文件后空间未释放问题处理(知识库)
🔍 问题原因
在 Linux 中,删除文件只是减少链接数,如果该文件仍被某个进程占用(有打开的文件句柄),磁盘空间不会立即释放。
📌 常见现象
df
显示磁盘已满,但du
查看目录空间较小。- 日志文件已被删除(如 logrotate 或手动 rm),但空间未释放。
🔎 定位方法
方法1:查找 deleted 文件
lsof | grep deleted
输出示例:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
java 1234 root 4w REG 253,0 ... /var/log/app.log (deleted)
方法2:查找链接数为0的文件
lsof +L1
🛠️ 解决方法
✅ 推荐方式:重启对应进程
获取进程信息:
ps -p PID
netstat -antp | grep PID
重启服务或终止进程:
systemctl restart <service-name>
kill -9 PID
⚠️ 注意:谨慎操作,避免影响业务。
⚠️ 应急方式:清空文件内容(慎用)
echo > /proc/PID/fd/FD_NUMBER
例如:
echo > /proc/1234/fd/4
✅ 仅适用于日志类文件,不能真正释放句柄,需配合进程重载使用。
🧠 文件删除机制简述
rm file
→ 减少链接数。- 若仍有进程持有 fd → 文件不真正删除。
- 只有当链接数为 0 且无进程持有 fd → 空间才释放。
🧹 排查流程总结(快捷步骤)
df -h # 查看磁盘空间
lsof | grep deleted # 查找 deleted 文件
ps -p PID # 查看进程信息
systemctl restart xxx # 或 kill 进程
df -h # 再次确认空间是否释放