ECS磁盘使用率告警先别急着扩容:四步定位占用,再决定清理还是扩容
一、问题:磁盘告警来了,先不要点扩容
凌晨收到云监控告警:某台 Linux 弹性云服务器(ECS)的根分区使用率已经超过 90%,应用开始写日志失败,个别服务重启后无法正常启动。很多人的第一反应是直接扩容云硬盘:贵一点,但最省事。实际上,这个顺序常常是错的。
如果占用来自可以安全清理的日志、缓存或临时文件,扩容只是把问题推迟到下一次告警;如果占用来自业务数据持续增长,清理只能换来几天喘息,最终还是要扩容。正确的做法是先定位,再决策:先花十分钟确认“是谁把磁盘吃满了”,再决定清理还是扩容,以及扩容多少。
二、前提:动手前先确认这三件事
第一,确认操作系统和权限。本文以 Linux ECS 为例,需要能够登录服务器并使用 sudo 或 root 权限执行查看命令;没有权限时,先向管理员申请,不要绕过权限管理。
第二,确认数据是否可以动。清理前要分清三类数据:系统和业务运行必需的数据不能删;可以重建的缓存、临时文件可以删;日志要先确认保留期限和合规要求,重要日志先归档再清理。
第三,生产环境先做备份或快照。扩容、清理、重启服务都属于变更操作,重要数据先备份,变更后要能回滚。本文不涉及任何付费开通操作,只讲定位和判断方法;是否扩容、扩容多大,由你结合业务增长和成本再决定。
三、分步操作:四步定位磁盘占用
第一步:看整体,先确认是哪块盘满了
先看所有挂载点的使用率,确认告警说的是根分区、数据分区还是某个挂载目录:
df -h
重点看 Use% 和 Mounted on 两列。根分区满和数据盘满的处理路径完全不同:根分区满会影响系统服务和日志写入,数据盘满通常只影响该盘上的业务。只看总量还不够,还要看第二步。
第二步:看 inode,排除“空间还有、文件建不出来”的情况
有一种容易误判的情况:df 显示空间还有剩余,但应用仍然写不进文件,原因是 inode(文件索引节点)用完了。大量小文件会先耗尽 inode,而不是耗尽空间。
df -i
如果 IUse% 接近 100%,问题往往是某个目录下堆积了海量小文件,例如缓存、会话文件或未清理的临时文件。这时扩容磁盘容量并不能解决问题,需要清理小文件或调整存放策略。
第三步:自上而下找大目录,不要一开始就翻全盘
定位大目录要从根目录逐层下钻,而不是直接对整个文件系统做全量扫描。先看根目录下各一级目录的大小,再进入最大的目录继续下钻:
du -sh /* | sort -rh | head -20
找到可疑目录后,再对该目录做同样的操作,例如先看 /var,再看 /var/log,最后看具体是哪个日志文件或应用目录在增长。逐层下钻的好处是快、干扰小,也不会因为扫描海量小文件而长时间卡住。
第四步:区分“能清、能压、必须留”三类占用
定位到目录后,先做分类,再动手:
- 能清理:过期日志、可以重建的缓存、下载后已用完的临时包、明确无用的临时文件。
- 能压缩或归档:需要保留但不常访问的历史日志,可以先压缩归档到对象存储或备份位置,再从磁盘上清理。
- 必须保留:业务数据、数据库文件、正在运行的服务依赖文件。这一类不要直接删除,先看增长趋势,再决定扩容。
还有一种特殊情况:文件已经删除,但空间没有释放。这通常是因为某个进程还持有已删除文件的句柄,文件在磁盘上仍被占用。可以用以下命令查看:
lsof | grep deleted
如果确认是日志进程持有已删除文件,重启相关服务或让应用重新打开日志文件后,空间才会真正释放。不要只删文件不处理进程,否则 df 的数值不会下降,容易误以为清理无效。
四、验证:清理或扩容后必须复查的三项
第一,重新执行 df -h 和 df -i,确认使用率和 inode 使用率都回落到安全范围,而不是只看其中一项。
第二,确认应用可以正常写文件、写日志,服务状态正常。只看磁盘数值回落是不够的,还要看业务是否恢复。
第三,观察一段时间。清理后如果使用率在几小时内又快速回升,说明增长源没有根除,需要回到第三步重新定位,而不是反复清理。
五、常见坑:这六个错误最容易返工
- 只看 df,不看 inode:空间明明还有,应用却写不进文件。
- 删除日志文件后不处理持有进程:空间没有释放,还以为磁盘坏了。
- 直接删除数据库文件或业务数据:空间是腾出来了,业务也丢了。
- 扩容云硬盘后不扩展分区和文件系统:控制台容量变大了,服务器里 df 却没有变化。
- 没有先备份就清理生产日志:事后需要排查问题时,已经没有日志可用。
- 只清理一次、不设告警和轮转:下一次告警只是时间问题。
关于第四点,华为云帮助中心在云硬盘扩容相关文档中明确说明:扩容云硬盘后,还需要扩展分区和文件系统,新增容量才能被使用。具体操作应以华为云帮助中心当前文档为准,不同文件系统和分区方式的命令并不相同,操作前请先确认分区类型和文件系统类型。
六、小结清单:下次告警时按这个顺序做
- [ ] 执行 df -h,确认是哪块盘、哪个挂载点满了。
- [ ] 执行 df -i,确认是不是 inode 先用完了。
- [ ] 用 du 自上而下逐层定位最大目录,不要全盘盲扫。
- [ ] 分类处理:能清的清,能归档的归档,必须留的不要删。
- [ ] 检查已删除但仍被进程持有的文件,必要时重启相关服务。
- [ ] 复查 df、inode 和应用写文件能力,确认业务恢复。
- [ ] 如果是业务持续增长,再评估扩容容量,并记得扩容后扩展分区和文件系统。
- [ ] 最后补上日志轮转、清理策略和告警阈值,避免同一问题反复出现。
参考来源:华为云帮助中心云硬盘扩容相关文档(扩容后需扩展分区和文件系统);Linux 常用命令 df、du、lsof 的常规用法。本文为原创经验总结,不涉及任何付费开通操作。
- 点赞
- 收藏
- 关注作者
评论(0)