H3C NX30PRO 半砖救回记

机器是刚出来的时候买的,系统刷的别人改过的,东西太多了,哪怕硬件资源有空,也很慢,而且很多应用其实处于不可用的状态,配置固定到了某一次保存的状态,每次重启都会回到那个状态,配置是否应用成功完全是个迷,很长时间都是当中继路由在使用了

这次虽然中间变砖了,但救回来进入新系统后能感觉能质的飞跃

找到另一篇文章,好你默认就是没有web界面,必须要 TFTP 服务的,参考 H3C-NX30PRO.html#进入-u-boot-并刷入固件

版本跨度太大,导致中间变半砖了,操作忘记截图了,就这样吧,原厂小分区就24Mb,啥也干不了

主机当前信息

  • 主机型号:H3C NX30PRO
  • 架构:ARMv8 Processor rev 4 (v8l) x 2 (1298MHz)
  • 目标平台:mediatek/mt7981
  • 固件版本:ImmortalWrt 18.06-5.4-SNAPSHOT r11814-ef0c86bdb0 / LuCI branch (git-22.323.17670-f9380b5)
  • 内核版本: 5.4.224

目标&操作计划

准备通过下面方法升级到 25.12.0,这是 AI 提供的方案,方案是没有问题的,但是没有比较明显的警告

  1. 下载文件备用: ImortalWrt Firmware Selector
    • Bootloader 镜像:文件名包含 …-u-boot.bin 或 …-bl31-uboot.fip
    • 恢复内核镜像 (Recovery):文件名包含 …-initramfs-recovery.itb
    • 系统升级镜像 (Sysupgrade):文件名包含 …-squashfs-sysupgrade.itb
    • preloader.bin:我没刷,但没问题,应该是我是升级,而不是从原版系统刷
  2. 通过 SCP 将 Bootloader 文件传至 /tmp SCP 基本使用方法
  3. SSH 连接路由查看分区表,运行 cat /proc/mtd, 检查列表中是否有名为 “FIP”“fip” 的分区(大小通常为 00200000)
  4. 写入引导 mtd write /tmp/immortalwrt-25.12.0-xxx-u-boot.bin FIP (上一步查到的分区名是小写,最后的 FIP 也要改成小写 fip),如果是原版系统,还需要 mtd write /tmp/immortalwrt-mediatek-filogic-h3c_magic-nx30-pro-preloader.bin BL2
  5. 断电重启:提示写入成功后,直接拔掉路由器电源。此时旧系统已被破坏,无法正常开机,接下来必须通过 U-Boot 救砖模式注入新系统。(下面进入下一阶段,利用U-Boot 恢复模式安装新系统)
  6. 设置静态IP 192.168.1.254,子网掩码 255.255.255.0,网关 192.168.1.1,网线连接路由 LAN 口
  7. 触发 U-Boot界面:路由器在断电状态下,用卡针按住背部的 Reset(恢复)按钮不放,插上路由器电源,继续按住 Reset 键保持 10-15 秒左右(H3C NX30PRO 的状态灯是常绿的,不会变化,注意时间就行)
  8. 进入刷机网页:打开电脑浏览器,在地址栏输入 192.168.1.1 并回车。此时网页会展现出全新的 ImmortalWrt U-Boot 恢复页面。
  9. 刷入恢复固件    在 U-Boot 网页中点击“选择文件”,上传【恢复内核镜像 (Recovery)】文件。点击 Update / Flash。等待大约 1-2 分钟,路由器会自动重启。 (下面进入下一阶段:最终 Sysupgrade 写入与完成)
  10. 进入临时系统:在浏览器中访问 192.168.1.1,此时会进入一个界面简陋的临时 Recovery 系统(不需要密码,直接登录),这个时候会有两个提示,一个设置root密码,一个是提示上传sysupgrade 固件包(我的版本有的)
  11. 直接按提示进入【系统 (System) -> 备份/升级 (Backup / Flash Firmware)】,选择更新固件,上传系统升级镜像 (Sysupgrade)并点【刷写固件】
  12. 等待2-3分钟,将电脑网卡的 IP 地址重新改回 “自动获取 IP (DHCP)” (可选项)
  13. 重新进入 192.168.1.1,默认账户root,无密码,完成

正题:半砖与救回

上面的方案是没有问题的,但可能我选的版本跨度太大,根据信息 25.12 底层架构和系统组件有全面升级,不知道是否是这个原因,总之在第七步触发 U-Boot界面时出现了问题,无法正常进入刷机网页。

新砖状态

经过测试状态如下:

  • 能ping 192.168.1.1;TTL64;每20秒断1秒,很规律;
  • 无法连接至网页服务,测试超时
    • curl -I http://192.168.1.1
    • curl -k https://192.168.1.1
  • 端口不可用,测试超时
    • nc -zv 192.168.1.1 22
    • nc -zv 192.168.1.1 80
    • nc -zv 192.168.1.1 443

经过 AI 分析,认为 Bootloader 还活着,没完全变砖,U-Boot 启动了,Linux启没启动不知道,第四步 mtd write 命令只更新了 FIP 分区,而旧的 BL2 分区没动,导致两个核心引导组件不匹配。现在的状态是 U-Boot 卡在初始化环节,无法加载完整的系统,所以只有 ICMP 协议(ping)有响应,而 HTTP、SSH 等服务都无法工作

使用 TFTP 服务进行恢复

参考:

操作步骤

  1. 设置静态IP 192.168.1.254/24,网关 192.168.1.1,网线连接路由 LAN 口 (不同路由 tftp 服务器要求的服务器IP不一样)
  2. 准备Recovery恢复固件,这次我选的 24.10.0
  3. 准备 tftp 服务软件(强烈建议使用GUI界面的软件,有日志信息输出,我在 macOS 使用系统自带的 tftp 没有日志,导致完全不知道发生了什么)
  4. 将Recovery恢复固件名改成 openwrt-mediatek-filogic-h3c_magic-nx30-pro-initramfs-recovery.itb (需要用TFTP日志确认,包名非常重要,我因为这个卡了很久,也是因为上一步没日志导致的)
  5. 打开 tftp64 软件,点击打开”log viewer”选项卡,设置“Current Directory”目录为Recovery恢复固件所在目录,设置“Server Interface”为192.168.1.254所在接口 ( tftp64这好像是Windows 下的软件,我没用过)
  6. 触发 U-Boot界面:路由器在断电状态下,用卡针按住背部的 Reset(恢复)按钮不放,插上路由器电源,继续按住 Reset 键保持 10-15 秒左右(H3C NX30PRO 的状态灯是常绿的,不会变化,注意时间就行)
  7. 稍等一下,注意 ping 稳定了,http://192.168.1.1 应该就能访问了
  8. 继续之前的第十步,进入临时 Recovery 系统系统继续刷固件,是的,你没猜错, tftp 服务的作用就是半砖状态下(无法使用 SSH 和网页)刷 Recovery 固件的备用方案

以上的每一步都很重要,比如 ip 地址,tftp 的使用,固件的名字等,不熟悉的话每一步都是坑


题外: 建议使用带日志功能的 TFTP 服务端软件

macOS 自带 TFTP 功能,但默认是关闭的,我用的就是它。

但是建议使用有GUI界面的软件,它们一般有日志功能,可以知道路由那边请求的文件名是什么,我是因为用资料里的文件名尝试成功了,否则还要去找软件。

TFTP刷路由固件和 FTP/SSH 不一样,它是由路由向服务端(电脑)主动请求文件的:路由器(TFTP客户端)→ 启动时发送请求 → TFTP服务器(你的电脑)。路由器是主动方,你的电脑是被动提供文件,路由会自动”拉取”指定文件,所以文件名非常重要,如果你不知道,那么TFTP 服务器软件的日志就非常重要

我改完名字后尝试手动上传固件,报超时,但无意发现 ping 正常了,不再中断,尝试了一下网页,发现已经好了

下面是macOS 自带 TFTP 功能的使用方法

打开 Mac 的“终端”(Terminal),按顺序输入以下命令:

# 切换到 TFTP 目录(通常根目录下的 tftpboot 文件夹需要自己创建):
cd /private/tftpboot

# 把你下载好的 recovery.itb 文件复制到这个文件夹里。
sudo /PathToRecovery.itb /private/tftpboot/openwrt-mediatek-filogic-h3c_magic-nx30-pro-initramfs-recovery.itb

# 启动 TFTP 服务:
sudo launchctl load -F /System/Library/LaunchDaemons/tftp.plist

# 检查,如果显示 PID 数字,就说明服务已成功运行。
sudo launchctl list | grep tftp

# 路由器断电,按住路由器背后的 Reset 按钮通电,Reset 持续按 10-15 秒,路由开始找 tftp 服务器获取特定名字的固件

# 手动上传(不知道固件名字的时候我尝试过,报超时,没成功)
tftp 192.168.1.1
put openwrt-mediatek-filogic-h3c_magic-nx30-pro-initramfs-recovery.itb

# 用完关闭 sftp
sudo launchctl unload -F /System/Library/LaunchDaemons/tftp.plist

弄完好像发现也没有什么好玩的,我有一台Debian,各种设备上也配置了需要的环境,这个路由除了用了扩展一点点信号之外没有任何作用

Leave a Reply

Your email address will not be published. Required fields are marked *