麒麟软件产品专区:https://product.kylinos.cn
开发者专区:https://developer.kylinos.cn
文档中心:https://documentkylinos.cn
现象描述
裸金属物理服务器开机卡在EFI stub页面,无法正常进入系统。
现象分析
单用户
针对开机类问题首先通过grub中添加参数进入单用户模式,尝试恢复系统,但通过添加对应参数进入单用户模式同样会卡在EFI stub页面依旧无法正常进入系统。
救援模式
因单用户无法进入,尝试通过挂载iso镜像至光驱,通过iso镜像进行救援模式操作,挂载的为银河麒麟高级服务器操作系统SP3-iso镜像,通过进入Troubleshooting →Rescue中进救援模式,在救援模式正常进入后,通过chroot /mnt/sysimage进入问题系统进行排查,查看/var/log/messages看到,在5月13日后日志出现停止记录现象,最后记录的信息为符号组成乱码,无有效信息。从日志记录现象得知系统死机时为突发情况,且疑似记录日志的rsyslog等服务写入日志动作未成功完成,偏突发情况。
通过救援模式查看对应/var/crash目录,并未发现生成kernel生成的对应vmcore文件,已知vmcore为系统层分析宕机类问题的重要调试工具,/var/crash为默认vmcore存储目录,以此推断系统本身并无时间主动生成异常日志。
文件系统
通过救援模式观察系统内文件系统分布可知根目录为ext4格式,尝试使用fsck.ext4对/dev/mapper/klas-root等重要文件系统进行检测修复。结果反馈文件系统本身并未出现异常损坏,无法开机问题非常规掉电导致系统内文件系统损坏而无法开机。
尝试对存储磁盘分区的/etc/fstab文件中对除根目录挂载点以外的目录进行注释,排除其他磁盘分区带来的影响,直接重启操作系统测试发现,仍然无法正常进入系统,此时排除其他磁盘分区异常。
串口日志
因系统内无有效日志信息,于是通过开启串口日志,捕获系统侧外的日志信息,观察无法正常开机启动原因。
通过串口日志捕获到在最初存在对应驱动存在mem内存处异常,怀疑为对应驱动模块BUG导致问题,于是在内核加载的grub阶段,对串口日志的报错模块进行禁止加载(modprobe.blacklist)动作,以此排除系统在启动时因个别驱动模块异常导致的无法开机问题。
进行如上图的操作后,发现串口日志仍有Call trace日志输出,如下图。
由该串口日志可以看到,已知comm提示异常进程为systemd-udevd,该进程主要负责系统中的设备管理,处理设备的初始化、热插拔事件和设备节点管理等工作;输出对应的stack limit=0x(ptrval_)堆栈限制指向该进程在对应堆栈出存在异常。造成该异常可能原因包括内存异常、硬件问题和内核代码问题等。
从现有的堆栈我们可以看到最后的Call trace指向的地址为十六进制的0xffff22563e000008,这可能表示内存地址或内存操作的相关动作,该位置并未打印出对应的内核内部函数,偏向于内存地址本身存在异常,并非在内核函数内部崩溃。
如图中表示的Code:bad PC value通常在系统或应用程序崩溃时出现,说明存在无效的程序计数器(PC)值,PC通常为指向正在执行的指令的寄存器,存储下一条要执行的指令的内存地址,当PC值无效或指向错误地址时,便会出现bad PC value错误。该错误的出现大部分可能由:1、硬件故障;2、软件代码错误;导致。
分析结论
截至现有信息,系统层并++++无更多有效信息++++(vmcore)可用于分析死机原因,串口提供的日志更多的指向底层内存异常。且系统侧的恢复手段均无法启动操作系统。
因此建议整机侧协助对底层硬件内存相关设备进行更换检测,后续整机同事更换内存等主板硬件后整机侧反馈可正常开机。
解决建议
整机侧更换服务器主板。