磁盘告警并不等于整台主机都需要扩容。很多情况下,真正接近满载的只是/var、/home或应用单独挂载的分区。Linux主机管理的第一步,是确认告警对应的文件系统,再判断空间被什么内容占用,避免误删业务数据。
先确认哪个分区触发告警
收到监控通知后,不要直接删除文件。先查看各文件系统的容量和挂载点:
- 执行df -hT,确认总容量、已用空间、剩余空间、文件系统类型和挂载路径。
- 再执行df -ih,检查 inode 使用率。小文件数量过多时,即使还有可用容量,也可能无法继续创建文件。
- 对接近满载的路径执行du -xhd1 /var或对应目录命令,使用-x避免把其他挂载点重复统计。
通常,使用率低于约70%时可以安排例行检查;达到约80%后应确认增长趋势和清理计划;超过约90%则应暂停非必要写入操作,并优先释放安全可删的数据。阈值需要结合分区大小、业务写入速度和告警系统的规则调整。
按照来源进行分区清理
处理系统日志和应用日志
/var/log是常见增长点。可以先用du -sh /var/log/*找出占用较大的日志目录,再检查日志轮转配置是否正常。使用systemd的主机可通过journalctl --disk-usage查看系统日志占用;确认保留要求后,可用journalctl --vacuum-time=14d按时间清理较早的日志。
直接删除正在写入的日志并不总是有效。进程可能仍持有已删除文件,空间不会立即回收。清理后若容量没有下降,应执行lsof +L1,查看名称带有“deleted”的打开文件,并根据应用支持的方式重新加载或重启相关服务。日志轮转的优点是可持续控制增长,缺点是需要正确设置保留周期、压缩方式和权限。
清理缓存与临时文件
包管理器缓存、应用下载缓存和临时目录通常可以释放空间,但删除前要确认用途。Debian或Ubuntu主机可检查/var/cache/apt,RHEL或Fedora系统则常见/var/cache/dnf。临时文件主要位于/tmp和/var/tmp,其中部分内容可能被正在运行的程序使用。
优先使用系统自带的缓存清理功能,不要一次性删除整个目录。对于长期产生的大型缓存,应在应用配置中设置上限、过期时间或定期清理任务。这样比临时手工删除更适合持续的Linux主机管理。
检查容器和用户目录
如果主机运行容器,镜像层、可写层和未使用卷可能占用大量空间。以Podman为例,可先使用podman system df查看镜像、容器和卷的占用,再根据业务确认未使用对象,避免误删仍需回滚的镜像。

用户目录也应单独分析。对/home执行分层统计,重点查看下载文件、备份压缩包和历史构建产物。生产数据、数据库文件、证书私钥等内容不能仅凭文件大小判断后删除,应先确认归属、备份状态和保留要求。
一套稳妥的告警处理流程
- 记录现场:保存告警时间、分区使用率、增长速度和主要目录,便于判断是突发文件还是持续增长。
- 确认责任:区分系统日志、应用日志、缓存、容器数据、用户文件和数据库文件。
- 先释放低风险空间:优先处理已确认过期的缓存、临时文件和旧日志,不碰业务数据。
- 验证服务状态:清理后再次执行df -hT,检查相关服务日志和写入是否恢复正常。
- 修复根因:补充日志轮转、缓存上限、目录配额或独立挂载;如果增长速度没有改变,应评估扩容。
清理、扩容与拆分分区如何选择
分区清理适合短期突发增长、可识别的过期文件和配置失效造成的日志堆积,优点是见效快、成本低,缺点是只能释放已有空间,不能解决持续增长。
扩容适合业务数据确实增加且保留周期合理的场景,但需要确认云盘、逻辑卷、文件系统和备份方案是否支持在线调整。拆分分区适合日志、数据库、上传文件等增长模式不同的目录,可以避免某一类数据挤占系统根分区,不过规划和迁移成本更高。
常见问题
磁盘还有空间,为什么仍然写入失败?
可能是inode耗尽、目录权限异常,或进程仍占用已删除文件。应同时检查df -h、df -i和lsof +L1。
可以直接删除/var/log下的大文件吗?
不建议盲删。先确认文件归属和是否正在写入,优先使用日志轮转或截断机制,并检查应用是否能够重新打开日志。
清理缓存后还需要扩容吗?
如果释放空间后增长速度恢复正常,可以先观察;若短时间内再次达到告警阈值,说明应调整保留策略或扩容。
如何减少下一次磁盘告警?
为关键分区设置分级告警,定期检查日志轮转、目录增长和inode使用率,并为大容量业务数据配置独立挂载。持续记录这些变化,才能让Linux主机管理从临时救火转向预防性维护。


