磁盘空间告急怎么处置
分区写满会连锁引发故障:日志写不进去、数据库停止写入、服务异常退出,甚至影响登录。处置顺序是先确认到底是哪个挂载点满,再沿三条线回收——日志与轮转文件、临时文件、大文件与目录;同时评估是否需要扩容。生产环境的删除动作属于止血手段,删之前要确认文件用途,数据库目录下的文件更不能凭大小直接删除。
基本信息
| 定位命令 | df -hT 看挂载点,du 逐层下钻 |
|---|---|
| 日志回收 | journalctl --vacuum-size 或按时间清理压缩日志 |
| 临时文件 | 按修改时间清理 /tmp 与业务临时目录 |
| 常见差异原因 | 句柄未释放导致 df 与 du 对不上 |
| 后续动作 | 评估扩容或迁移数据,避免反复发生 |
典型使用场景
- 日志暴涨把根分区写满,服务开始报写入失败
- 数据库分区空间不足导致写入中断,需要紧急释放空间
- 临时目录堆积历史文件,应用反复失败
- 审计与安全日志长期未轮转,占用持续增长
- 排查 df 与 du 差异,判断是否存在被删文件仍被占用
- 规划扩容:确认是短期突增还是长期容量不足
定位与回收
定位与回收
df -hT # 先确认哪个挂载点满
du -x -h --max-depth=1 /var | sort -h | tail -15 # 逐层下钻找占用大户
du -x -h --max-depth=1 / | sort -h | tail -15
journalctl --disk-usage # journal 当前占用规模
journalctl --vacuum-size=500M # 收缩 journal 到指定大小
find /var/log -name '*.gz' -mtime +15 -delete # 清理较旧的压缩日志
find /tmp -type f -mtime +7 -delete # 确认无业务依赖后再清理
# 删除的文件仍被占用时:lsof +L1 | head
# 定位到的大文件先确认用途,再决定删除、压缩还是迁移回收手段对照
| 对象 | 手段 | 注意 |
|---|---|---|
| journal 日志 | journalctl --vacuum-size 或 --vacuum-time | 收缩后无法恢复历史日志 |
| 轮转日志 | 按时间清理已压缩文件 | 保留近期用于追溯 |
| 临时目录 | 按修改时间批量清理 | 确认无业务正在使用 |
| 大文件 | 迁移到其它分区或压缩归档 | 先确认文件用途与所有人 |
| 被删占用 | 重启或重载持有句柄的进程 | 评估业务可中断性 |
生产环境删除文件只是止血:不解决根因的话空间很快再次被填满,处置完成后必须评估扩容或迁移,并检查日志轮转策略是否合理。
df 与 du 数字差距明显时优先怀疑文件已被删除但句柄仍被持有,用 lsof 查找这类文件,而不是怀疑文件系统损坏。