现象描述

为解决日本雷能ALARM2告警问题,进行了软件修复,需要给基站上的FSU进行软件升级,在升级过程中遇到了升级失败情况,现象为:FSU升级失败后,整流器RUN灯常亮,FSU无法访问。尝试几次都失败。先升级了一次AC/DC再次执行升级FSU还是失败。


升级方式

升级盒子运行给目标FSU升级的程序,存放的升级包为:upgrade_cloneFile_v1.8.1_202309061749.tar.pack,当按下升级盒子的升级按键时,传送升级包到目标FSU,并下发重启指令。目标FSU重启后检测到升级包的存在,会进行解压替换文件。


原因分析

通过远程查看问题设备,发现缺少了一个appbak的分区

  • 正常分区

  • 异常分区

分区缺失原因

设备FLASH存在坏块,该分区挂载失败

分区缺失影响

程序升级完毕,在首次运行正常后会将程序所在的/app文件夹打包到/appbak下,分区缺失会导致压缩包存放到根目录,根目录空间放不下备份包,会导致程序打包失败,系统重启,如此循环5次达到系统异常的恢复机制:删除/app,从备份包解压文件到/app,但是前面空间不够,打包失败,只能备份一小部分文件,进而导致程序完全运行不起来,恢复机制失败。

  • 程序文件齐全

  • 程序文件缺失

从其它设备保存下来的重启日志分析,所有设备都是上述原因导致升级失败。

20240830_upgrade_fail_log.zip


解决方案

不更改升级包里面的升级脚本,在升级盒子里的程序加入对目标设备擦除分区重新挂载的命令,即可解决。

  • 使用网线将电脑与升级盒子连接


  • 打开浏览器,如果是谷歌浏览器使用无痕模式,如果是微软浏览器使用InPrivate模式


  • 登录web页面

IP: 192.168.1.172

账号:admin

密码:msj123


  • 进入扩展模块配置界面,替换扩展模块 
    • 删除模块

点击【配置管理】—【扩展模块】—【删除】

    • 导入模块

点击【选择文件】---【导入】---【启用】---【保存】


方案实现

升级盒子程序要解决两种情况,并且升级盒子运行的扩展模块要有版本号的变更,用于确认升级盒子的程序升级成功。

目标程序正常

GatewayServer正常运行,则检查是否存在/appbak分区

存在:拷贝升级包升级

不存在:擦除并重新挂载分区,检查分区挂载成功后,拷贝升级包升级

为了防止连续升级导致异常,擦除挂载前应当检查是否有tar进程,因为GatewayServer在升级后会将/app打包到/appbak,分区使用期间重挂载会失败。擦除挂载指令如下:

umount /appbak;
flash_eraseall /dev/mtd10;
ubidetach -m 10;
ubiformat /dev/mtd10;
ubiattach /dev/ubi_ctrl -m 10 -d 10;
ubimkvol /dev/ubi10 -s 38MiB -N appbak;
mount -t ubifs ubi10_0 /appbak;


目标程序异常

GatewayServer没在运行,执行看门狗,防止系统重启

wdt &

检查是否存在/appbak分区

存在:进行下一步操作

不存在:擦除并重新挂载分区,检查分区挂载成功

将盒子内部的升级包解压,得到appBak.tar.gz

将appBak.tar.gz传到目标,解压到/app

重启目标,检查目标GatewayServer是否正常,正常执行升级流程,异常报失败,升级盒子亮红灯。





  • 无标签
写评论...