概述
客户在华为云平台上创建了两台虚拟机并部署aarch64 V10 OS,2021-10-28其中一台虚拟机业务出现异常,运维重启虚拟机后系统进不去,左上角光标闪烁,接着重启另一台虚拟机同样起不来,现象一致。
分析
通过分析现场收集的message日志,确认2021-10-28日11:17进行系统重启,重启后,系统仍然无法正常进入,日志显示在11:09左右,有大量dbus-daemon服务异常信息:
可以看出,dbus-daemon报出大量和用户名有关异常日志,且重启系统后,查看boot.log中也存在一些基础服务失败的现象,使用单用户进入系统,禁用图形化显示服务,重启进入正常模式系统,通过systemctl list-units --failed列出失败服务:
以系统基础组件的dbus服务异常为例,尝试再次启动dbus服务,发现启动仍然失败,由于该服务为系统底层的基础通信服务,就会造成其他一系列的服务异常。
结合前面分析的dbus-daemon报出的大量用户相关日志,查看系统的/etc/passwd文件,发现/etc/passwd以及/etc/shadow不存在,只有/etc/passwd-和/etc/shadow-备份文件,因此证实了dbus服务异常是无法找到系统用户造成的。
为了保证业务,采用临时的手段,即首先复制备份文件passwd-文件到/etc/passwd,然后手动添加dbus用户,接着重启系统,查看系统其他服务恢复正常的,问题初步解决,接着通过执行pwconv恢复/etc/shadow文件,至此,可以认为系统恢复正常。需要注意的是,上述的操作是一种应急方案。
经过现场环境梳理,麒麟虚拟机运行在华为云平台之上,虚拟机中部署的业务应用使用的是root用户运行,且业务对外的web前端应用。
结论
此次故障,初步分析为系统丢失/etc/passwd以及/etc/shadow文件,引起一系列系统服务失败,导致业务因系统故障出现崩溃。
建议
- 强烈建议业务应用使用非root权限用户运行,防止外部不可控因素通过对外应用获取特权,从而造成系统故障。
- 建议协调云平台排查相关日志,分析是否存在平台因素,导致虚拟机系统发生故障。(案例参考链接/etc/passwd文件损坏导致云服务器登录失败怎么办?_弹性云服务器 ECS_故障排除_SSH连接_华为云 (huaweicloud.com)
- 建议协调运维人员,增加对虚拟机的监控。