一次曲折的设备修复过程

原始故障

某 x86 定制设备,因业务原因需进行全系统升级。由于设备需求,各组件含 grub、systemd、kernel、influxdb 等均为上游最新的稳定版本。全系统升级完成后,尚未重启系统,也未观察稳定情况,直接进行其余变更。运行约140秒后,系统宕机。重启后正常进入系统,但运行若干秒后,再次宕机。

故障扩大

由于设备具有显示接口,因此使用外接KVM接入设备。在版本回退过程中,由于更新grub版本配置时,没有注意到引导安装失败,因此在重启后,grub失败,提示:

error: file '/boot/grub/x86_64-efi/bli.mod' not found

尝试使用维护终端,提供USB虚拟镜像,启动设备。但重启后发现,设备在EFI引导阶段无任何显示,因此无法从USB虚拟镜像启动。

尝试使用设备的Console线,但一旦将设备Console口和维护终端连接,终端即有大量不明字符。从维护终端输入重启命令,无响应。在其他设备上,测试维护终端与Console线,工作正常,因此判定设备Console口工作异常。清洁Console口后,问题依旧。反复上电后,彻底无输出。

故障收敛

由于系统存在Console口,因此优先恢复Console口的正常功能。字符紊乱,可能是线路电压不稳定,也可能是上游信号故障。由于现场条件限制,没有维修资料和工具,仅有USB-TTL模块以及指针式万用表,需通过猜测调试设备。

拆机后,测量Console口相关电路。观察发现Console口和上游电路间,使用一片GD75232进行电平转换。测量Console口TXD端子输出电压,发现在-11V左右,且指针有抖动。怀疑电容漏电导致电压不稳,破拆去耦电容后,故障依旧。继续追查电路,发现TXD引脚在电平转换器的另一侧,电压稳定。测量电平转换器的工作电压,正常。但断电后,测量各管脚对地阻值,发现TXD引脚和其他同类引脚,阻值有显著变化,因此推断为电平转换芯片出现问题。由于现场除USB-TTL模块外无其他器件,因此手动修改线材后,人工将模块引脚对准主板上电平转换器的对应引脚。开机后,可以在维护终端上看到BIOS的启动信息。

检查BIOS配置,发现该设备CSM配置中,Video被配置为EFI Only。然而,此设备的Video模块必须在Legacy下才能正常工作。修改配置后,BIOS启动画面正常显示,EFI引导信息正常显示。

使用USB虚拟镜像,启动恢复系统,并chroot进原磁盘。重新安装grub引导配置后,故障变为在grub选单界面前卡住。再次使用USB镜像启动,并在grub配置中加入:

set pager=1
set debug=all

重新启动,发现在加载 serial 模块时,日志停住。推测是新版本软件兼容性问题,因此在/etc/default/grub中修改相应配置后,重新生成配置。系统成功引导,可以进入到操作系统选择菜单,至此,原始故障已经恢复。

故障解决

进一步调查发现,系统宕机原因为内核兼容性问题,合入补丁后宕机现象消失,故障修复。

由于此机器Console口已不工作,限制对此机器相关的业务变更,后续择机更换受损元器件。