客户在华为云平台上创建了两台虚拟机并部署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文件,引起一系列系统服务失败,导致业务因系统故障出现崩溃。