Linux 删除文件后磁盘空间未释放的排查
发布时间 - 2026-01-25 00:00:00 点击率:次Linux中文件被rm删除后若进程仍持有句柄,磁盘空间不会释放,因inode和数据块仍被占用;需用lsof +L1排查,通过kill -USR1或重启进程释放fd,而非再次rm。
进程仍持有已删除文件的句柄
Linux 中文件被 rm 删除后,若仍有进程打开该文件(即持有其文件描述符),磁盘空间不会立即释放——内核仅将目录项移除,但 inode 和数据块仍被占用,直到所有引用该文件的 fd 关闭。
常见于日志类服务(如 nginx、java 应用、rsyslog)持续写入被删文件,或运维误删正在滚动的日志。
排查方法:
- 用
lsof +L1列出所有“已删除但仍被打开”的文件(+L1表示 link count 为 0) - 或用
lsof | grep deleted筛选含deleted字样的行 - 关注输出中的
PID、COMMAND、FD(如12w表示写入模式的第 12 号 fd)和文件路径(末尾带(deleted))
确认空间是否真未释放
别只看 df,它反映的是文件系统级使用量;而 du -sh 统计的是目录下可见文件大小之和。二者差异大时,大概率是“已删文件仍被进程占用”。
执行以下命令交叉验证:
-
df -h /查看挂载点整体使用率 -
du -sh /* 2>/dev/null | sort -hr | head -5快速定位大目录(忽略权限错误) -
du -sh /proc/*/fd/* 2>/dev/null | grep 'deleted' | head -5直接搜进程 fd 下的 deleted 文件(需 root 权限)
注意:du 不会统计被删但未关闭的文件,所以 du 总和远小于 df 已用空间,就是典型信号。
释放空间的正确操作
不能靠再次 rm 或重启机器来“解决”——必须让持有句柄的进程释放 fd。方式取决于进程是否支持热重载:
- 对支持
kill -USR1重开日志的程序(如nginx、httpd),执行kill -USR1,它会关闭旧日志 fd 并新建 - 对
systemd管理的服务,优先用systemctl kill --signal=USR1 - 若进程不支持重载,且业务允许中断,可
kill -HUP(部分服务接受 HUP 重开日志)或直接systemctl restart - 极端情况(如僵尸进程或无法重启的服务),可用
echo > /proc/清空 fd 内容(仅限可写文件,且不推荐生产环境盲操作)/fd/
操作后,再运行 lsof +L1 应无输出,df 显示的空间也会立刻回落。
预防与监控建议
这类问题往往在磁盘告警后才暴露,但根源在于运维习惯和日志管理策略。
关键点:
- 禁用直接
rm *.log清日志,改用logrotate配置 rotate +copytruncate或发送SIGUSR1 - 定期检查
lsof +L1(可加入巡检脚本),尤其在批量清理日志后 - 对 Java 应用,确认
logback或log4j2的 rolling policy 是否配置了deleteOnRollover或依赖外部 rotate -
/proc/sys/fs/inotify/max_user_watches过低也可能导致某些日志轮转失败,间接引发堆积
真正棘手的不是找不到谁占着空间,而是某个老版本中间件静默持有 fd 十几天,期间没人动过它——这种 case 一定要查 lsof +L1,而不是反复 du。
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Python文件操作最佳实践_稳定性说明【指导】
通义万相免费版怎么用_通义万相免费版使用方法详细指南【教程】
Laravel API路由如何设计_Laravel构建RESTful API的路由最佳实践
INTERNET浏览器怎样恢复关闭标签页_INTERNET浏览器标签恢复快捷键与方法【指南】
Java类加载基本过程详细介绍
Laravel Admin后台管理框架推荐_Laravel快速开发后台工具
JavaScript中如何操作剪贴板_ClipboardAPI怎么用
郑州企业网站制作公司,郑州招聘网站有哪些?
如何快速上传建站程序避免常见错误?
Laravel如何使用Facades(门面)及其工作原理_Laravel门面模式与底层机制
js实现点击每个li节点,都弹出其文本值及修改
Laravel怎么在Controller之外的地方验证数据
网站图片在线制作软件,怎么在图片上做链接?
谷歌Google入口永久地址_Google搜索引擎官网首页永久入口
Laravel怎么配置.env环境变量_Laravel生产环境敏感数据保护与读取【方法】
bootstrap日历插件datetimepicker使用方法
在Oracle关闭情况下如何修改spfile的参数
Win11应用商店下载慢怎么办 Win11更改DNS提速下载【修复】
北京网站制作的公司有哪些,北京白云观官方网站?
java获取注册ip实例
如何用美橙互联一键搭建多站合一网站?
UC浏览器如何设置启动页 UC浏览器启动页设置方法
今日头条AI怎样推荐抢票工具_今日头条AI抢票工具推荐算法与筛选【技巧】
怎么用AI帮你设计一套个性化的手机App图标?
米侠浏览器网页背景异常怎么办 米侠显示修复
html5源代码发行怎么设置权限_访问权限控制方法与实践【指南】
如何用AWS免费套餐快速搭建高效网站?
Laravel如何使用.env文件管理环境变量?(最佳实践)
Laravel如何实现本地化和多语言支持_Laravel多语言配置与翻译文件管理
什么是JavaScript解构赋值_解构赋值有哪些实用技巧
公司网站制作价格怎么算,公司办个官网需要多少钱?
开心动漫网站制作软件下载,十分开心动画为何停播?
百度浏览器网页无法复制文字怎么办 百度浏览器复制修复
西安专业网站制作公司有哪些,陕西省建行官方网站?
如何基于云服务器快速搭建网站及云盘系统?
七夕网站制作视频,七夕大促活动怎么报名?
轻松掌握MySQL函数中的last_insert_id()
Android自定义控件实现温度旋转按钮效果
网站建设保证美观性,需要考虑的几点问题!
Laravel怎么返回JSON格式数据_Laravel API资源Response响应格式化【技巧】
Laravel Blade组件怎么用_Laravel可复用视图组件的创建与使用
Laravel如何生成PDF或Excel文件_Laravel文档导出工具与使用教程
如何自定义建站之星网站的导航菜单样式?
php json中文编码为null的解决办法
Midjourney怎样加参数调细节_Midjourney参数调整技巧【指南】
Laravel事件和监听器如何实现_Laravel Events & Listeners解耦应用的实战教程
东莞专业网站制作公司有哪些,东莞招聘网站哪个好?
Laravel如何实现用户密码重置功能?(完整流程代码)
简单实现Android文件上传
Laravel如何实现事件和监听器?(Event & Listener实战)

