现象描述
为解决日本雷能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,但是前面空间不够,打包失败,只能备份一小部分文件,进而导致程序完全运行不起来,恢复机制失败。
- 程序文件齐全
- 程序文件缺失
从其它设备保存下来的重启日志分析,所有设备都是上述原因导致升级失败。
解决方案
不更改升级包里面的升级脚本,在升级盒子里的程序加入对目标设备擦除分区重新挂载的命令,即可解决。
- 使用网线将电脑与升级盒子连接
- 打开浏览器,如果是谷歌浏览器使用无痕模式,如果是微软浏览器使用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是否正常,正常执行升级流程,异常报失败,升级盒子亮红灯。