服务器磁盘空间神秘占满、文件删不掉怎么办?清理与排查流程

一、先定位:到底什么占满了磁盘
磁盘满的第一动作不是乱删,而是定位占用来源:
- Linux:用
df -h看分区占用,du -sh /* 逐层或du -h --max-depth=1找大目录,lsof | grep deleted找被删除但仍占用空间的进程; - Windows:用资源监视器/磁盘占用工具按目录排序,注意回收站、系统还原点、休眠文件也会占空间。
很多"文件删了但空间没释放"的情况,其实是文件被进程占用(尤其日志和数据库文件),要重启服务或进程后才能释放。服务器常用命令的完整清单可看服务器常用命令速查。
二、常见占满元凶:按出现频率排序
| 元凶 | 特征 | 处理 |
|---|---|---|
| 系统/应用日志膨胀 | 单日几十GB、日志目录巨大 | 配置日志轮转+定期归档 |
| 数据库日志(如SQL Server .ldf) | 单个文件几十上百GB | 备份后收缩日志 |
| 备份/镜像文件堆积 | 按日期命名的全量备份 | 只保留N份,其余转冷存储 |
| 临时/缓存文件 | /tmp、Temp目录巨大 | 清理并设自动清理 |
| 回收站/快照残留 | 不可见但占空间 | 清空回收站、删过期快照 |
数据库日志膨胀是中小企业最常见又最容易被忽略的——SQL Server 的 .ldf 文件默认不自动收缩,几年下来可能比数据文件还大。数据库日志与磁盘管理的专项处理可看服务器磁盘空间清理完整指南。
三、安全清理六步流程
- 先备份或确认数据可恢复(清理前必做,参考3-2-1备份原则);
- 定位大文件与占用进程(df/du/lsof);
- 区分"可删"与"不可删":系统文件、正在使用的数据库文件不能直接删;
- 处理日志:配置 logrotate / 日志轮转,而不是手动删;
- 处理数据库:先备份日志再收缩(SHRINK),别直接删 .ldf;
- 清理后复查 df,确认空间真正释放。
四、删不掉?三个常见原因与解法
1. 文件被进程占用
Linux 下 lsof | grep deleted 可查到占用已删除文件的进程,重启该进程即释放;Windows 下用资源监视器"磁盘"标签按文件句柄定位。
2. 权限不足
服务账户没有删除权限时,用系统管理员权限或调整 ACL,别硬删系统文件。
3. 文件系统错误/只读
磁盘报错挂载为只读时文件"删不掉",先修复文件系统。只读挂载的排查可看服务器文件系统变只读怎么办。
五、防止再满:四件事
- 对系统盘、数据盘设置空间告警(80%预警、90%严重),监控方案可看Zabbix/Prometheus监控部署;
- 日志统一轮转,保留周期固定(如30天);
- 数据库日志计划性收缩或配置自动管理;
- 备份保留策略写进制度,避免无限堆积。
六、结语
服务器磁盘神秘占满、文件删不掉,先定位再清理:用 df/du/lsof 找到元凶,区分日志、数据库、备份几类来源分别处理,删除前务必确认备份。多数"删不掉"是进程占用或只读挂载,对症下药即可。把空间告警和日志轮转设好,能避免绝大多数"磁盘爆满"事故。
延伸阅读推荐:

