EC2实例A启动时健康检查失败且存储不足问题排查求助
EC2实例启动时存储不足(健康检查失败)的进程排查与解决方案
已知场景:EC2实例A启动时健康检查失败,系统日志提示Out of Storage,已完成卷扩容、跨实例挂载验证、AMI创建验证,确认卷本身容量无问题,锁定为启动时的进程导致存储耗尽。
排查与修复步骤:
1. 挂载故障卷到临时实例分析日志
将实例A的根卷挂载到临时实例的额外挂载点(如/mnt/troubleshoot),重点检查启动相关日志:
- 查看系统日志:
cat /mnt/troubleshoot/var/log/messages | grep -i "out of space\|disk full"(CentOS/RHEL)或cat /mnt/troubleshoot/var/log/syslog | grep -i "out of space\|disk full"(Ubuntu/Debian),定位启动时触发存储耗尽的进程 - 检查云初始化日志:
cat /mnt/troubleshoot/var/log/cloud-init.log,排查云初始化阶段是否有异常写入行为 - 查看审计日志:
cat /mnt/troubleshoot/var/log/audit/audit.log | grep -i write,筛选启动时的大量写入操作
2. 排查开机自启进程/服务
列出所有开机自启的服务,定位可能异常的进程:
- Systemd系统:
systemctl list-unit-files --type=service --state=enabled --root=/mnt/troubleshoot - SysVinit系统:
chkconfig --root=/mnt/troubleshoot --list
重点关注: - 日志服务(rsyslog、fluentd等):是否未配置日志轮转,导致日志无限增长
- 备份服务:是否开机自动执行本地全量备份,瞬间占用大量空间
- 应用服务:是否启动时生成大量临时文件、缓存且未清理
- 监控代理:是否异常采集本地数据并大量存储
3. 检查临时文件与日志轮转配置
- 查看临时目录占用:
du -sh /mnt/troubleshoot/tmp /mnt/troubleshoot/var/tmp,确认是否有启动时生成的大文件 - 验证日志轮转配置:
- 检查
/mnt/troubleshoot/etc/logrotate.conf和/mnt/troubleshoot/etc/logrotate.d/下的规则,确认是否设置了日志大小限制、保留数量 - 测试轮转执行:
logrotate -v --root=/mnt/troubleshoot /etc/logrotate.conf,排查是否有配置错误导致轮转失败
- 检查
4. 排查隐藏的磁盘占用
- 查找已删除但未释放的文件:
lsof +D /mnt/troubleshoot | grep deleted,这类文件虽已删除,但进程未关闭时仍会占用磁盘空间 - 检查挂载点覆盖问题:对比
du -sh /mnt/troubleshoot/var和df -h /mnt/troubleshoot/var的结果,若差异过大,说明原目录文件被新挂载的磁盘覆盖,实际占用未被统计
5. 修复后验证
- 针对排查出的问题修改配置:如调整日志轮转规则、禁用不必要的开机服务、清理冗余临时文件
- 将修复后的卷重新挂载回实例A,启动实例后检查健康状态和磁盘使用情况
- 添加定期清理任务(如通过cron执行
rm -rf /tmp/*或触发日志轮转),防止问题复发
内容的提问来源于stack exchange,提问作者Aryan
相关产品推荐
相关产品推荐

