已 Root 的 Android OTA 升级失败:先诊断,再重刷
已 Root 的手机 OTA 失败,通常是更新引擎在正常工作。在动手整包刷机之前,先弄清它拒绝的是什么。

目录
已 Root 手机上 OTA 被拒绝,通常是更新引擎在正常工作。它检查了即将更新的分区,发现被改动过,于是停了下来。这是校验结果,不是损坏,正确做法是弄清它拒绝的是哪个分区,而不是在上面直接刷一个完整的固件包。
更新为什么被拒绝
Android 的更新流程在写入任何内容之前,会先校验它准备替换的分区的当前状态。如果某个分区与更新包预期的不一致,更新就会停止,而不是生成一个不可预测的半更新系统。
Root 会修改启动链,机制就是这么简单。所以已 Root 的设备恰好呈现出这项检查要拦截的那种不一致。
理解这一点很有用,因为它改变了你看待问题的方式。设备没有坏,硬件层面也没出任何问题。只是某处被改动了,更新程序发现了,于是拒绝执行。你要做的是找出那是什么。
另外要注意,分区被改动不一定是 Root 造成的。被允许修改系统的自定义 Recovery、改动过系统文件的 Root 级应用,或之前某次改动的残留,即使 Root 早已移除,也会产生同样的拒绝。
先弄清:你的设备用哪种分区方案?
这几乎决定了你所有的选择,是第一个要回答的问题。
A/B 设备会保留相关分区的两份副本。更新会安装到未使用的那一组,而你继续使用当前这一组,重启时设备再切换过去。这就是无缝更新模式。
非 A/B 设备只有一份副本。更新直接应用到你正在运行的分区上,通常通过 Recovery 完成。
没有可靠的办法能从宣传名称判断你的设备是哪种。请在设备上检查分区布局,或查阅厂商针对你具体型号的文档。判断错了,你就会走上一套不适用的流程。
实际区别:
| A/B | 非 A/B | |
|---|---|---|
| 更新写入的位置 | 未使用的槽位 | 正在使用的分区 |
| 失败后的退路 | 另一个槽位仍然完好 | 没有第二份副本 |
| 升级后能否保留 Root | 可以,按文档流程操作 | 通常需要事后重新获取 Root |
| 更新失败的风险 | 较低,可用的槽位不受影响 | 较高 |
可能的原因
以下只是可能的原因,具体是哪一个取决于你的设备和你装过什么。
1. boot 镜像被修改。 最直接的情况。Root 修补了启动链,更新程序检查后发现不一致。
2. 从未备份原厂镜像。 Root 框架可以在更新前还原原始镜像,但前提是有备份。如果设备是直接刷入预先修补的镜像来获取 Root,而不是通过框架自带的安装流程,那么可能没有东西可还原,还原步骤就会失败。
3. system 分区被修改。 被允许修改系统的自定义 Recovery,或写入过 system 的 Root 应用,会留下更新程序能发现的改动。这种情况在移除 Root 后依然存在,很容易让人困惑:取消 Root,重试,却得到同样的拒绝。
4. 模块干扰。 改变系统行为或系统文件的模块,可能影响校验或更新后的启动。
5. 槽位状态。 在 A/B 设备上,更新时当前使用的槽位以及更新针对的槽位都很重要。之前的某次更新是否让槽位处于意外状态,也同样重要。
6. Recovery 状态。 用自定义 Recovery 取代原厂 Recovery,会改变更新尝试使用它时的行为。
诊断顺序
在碰任何固件包之前,请先按这个顺序排查。
读懂失败信息
记录确切的错误、失败发生在流程的哪一步,以及之后设备是否重启进入了 Recovery。下载阶段失败的更新,与校验阶段失败的更新不是同一个问题,而安装完成后无法启动又是另一回事。
如果设备现在是无法启动,而不只是更新失败,请就此停下,转去看各种开机症状的含义,因为你面对的是另一种情况。
弄清哪些部分被改过
要把某个部分还原为原厂状态,你得先知道哪些部分不是原厂的。boot 是最明显的一个,较新的设备上还可能有另一个存放 ramdisk 的镜像。system 是人们容易忘的,Recovery 则是第二个容易被忘的。
如果改动不是你自己做的,或者设备是别人转给你的,就当作自己不清楚,把每一种可能都视为未排除。
先还原,再升级,不要反过来
Magisk 自己的文档直接描述了建议的流程:用 Magisk 安装时创建的备份还原原厂镜像,让更新前的校验能够通过,并且特别强调还原后不要重启,因为此时重启会完成卸载。之后设备就能正常接收更新,更新完成后再按文档所述的方法重新获取 Root。
请阅读你实际安装的 Root 方案的最新文档,并按你设备的分区方案来读。这套流程在不同版本之间有变化,A/B 与非 A/B 的处理差异也很大。旧论坛帖子里的操作说明,描述的可能是已经不存在的机制。
Magisk 的文档也坦率地说明,非 A/B 设备没有无缝方案,之后需要用电脑手动重新获取 Root。最好在开始之前就知道这一点,而不是做到一半才发现。
备好正确的原厂镜像
如果框架的备份丢了,你需要的是针对你确切型号、确切当前版本的原始镜像,并且要来自厂商自己的发布渠道。不能是相近的版本,也不能是其他地区的版本。版本匹配是最常出错的地方,后果是设备能顺利刷入,却无法启动。
回到可正常启动的状态
如果设备还能启动,你就有时间,也有选择。请好好利用。
如果尝试之后设备无法再启动,首要任务就变成恢复到可启动的状态,在 A/B 设备上,首先要看的是另一个槽位。里面是否有可用的内容取决于你的更新历史,但检查它不花任何成本,也不会破坏数据。
还原正确的原始 boot 镜像只会写入 boot 分区,不会碰用户数据,这正是你要的操作。完整刷入固件是另一种操作,后果不同,见下文。
数据风险,实话实说
上述诊断过程不会碰用户数据。以下操作会:
| 操作 | 会清除数据? |
|---|---|
| 还原原厂 boot 镜像 | 不会,只涉及 boot 分区 |
| 应用官方 OTA | 不会影响用户数据 |
| 侧载官方签名的更新包 | 不会影响用户数据 |
| 切换当前使用的槽位 | 本身不会 |
| 在 Recovery 或设置中恢复出厂设置 | 会,且不可撤销 |
| 格式化 data | 会,且不可撤销 |
带清除选项或 -w 参数的固件刷入 | 会,且不可撤销 |
| 重新锁定或解锁 Bootloader | 会,解锁会触发数据清除 |
陷阱在于默认包含清除步骤的厂商刷机脚本。有人用它来修复失败的更新,结果设备上的一切都没了。请打开脚本,看清楚里面写了什么。在使用文件级加密的设备上,清除会连同数据一起删除密钥,之后无法恢复。我们的不丢数据修复开机循环指南解释了为什么这会改变你应该遵循的操作顺序。
如果设备上有没备份的数据,趁它还能启动,现在就备份。就是这个时机,过了就没有了。
为什么没有通用的操作顺序
每个厂商实现更新的方式都不同。Samsung的刷机模型与Google不同,Xiaomi的与 OnePlus 不同。同一品牌内,不同世代、地区和运营商版本的设备也有差异。
所以本文给你的是分类和思考的顺序,而不是命令清单。命令清单对某些读者来说是错的,错的代价是数据,而且没法写出一份在所有机型上都安全的清单。
请找到针对你确切型号和版本的具体流程,来源应是厂商或持续维护的机型专属资料。我们的可 Root 设备列表说明了各品牌差异最大的地方。
常见问题
可以直接跳过这次更新吗? 可以,跳过一个版本也算合理。但时间长了,会累积错过的安全补丁,你的版本与最新固件之间的差距越拉越大,最终的更新只会更难,不会更容易。
取消 Root 能解决吗? 有时能,有时不能,这正是让人困惑的地方。如果只有启动链被改过,还原它就能解决不一致。如果 system 分区或 Recovery 也被改过,移除 Root 并不会撤销这些改动,更新仍会被拒绝。
手机更新了但 Root 丢了,算失败吗? 不算,这是文档中说明的结果之一,在非 A/B 设备上尤其如此。更新成功了,改动被替换掉了。之后按常规方法,用新版本的镜像重新 Root 即可。
更新装好了,现在无法启动。 这是另一个问题,也更紧急。请看各种开机症状的含义,如果设备进了 Recovery,请看一直启动进入 Recovery 时要检查什么。不要恢复出厂设置。
应该使用厂商的修复工具吗? 这类工具一般是下载原厂固件再刷入,这是正当的做法。关键在于这次刷入在你的具体设备上是否保留用户数据,这取决于固件和所用模式,而不是工具的界面。运行之前请先确认。
如果更新总是失败,还值得保持 Root 吗? 这取决于 Root 对你有什么价值。我们的Root 风险坦诚分析谈到了这笔取舍,包括更新的麻烦,这是持续的成本,不是一次性的。
相关阅读: Magisk 刷入失败 · 不丢数据修复开机循环 · Android 总是启动进入 Recovery · Samsung Odin FAIL 错误 · 必装的 Magisk 模块
资料来源: Magisk 官方 OTA 升级文档。Android Open Source Project 的 A/B 系统更新文档。
最后核实:2026 年 8 月 19 日。更新机制、分区方案和厂商刷机流程因机型、地区和版本而异。请以你设备的官方文档为准。