banner
约 3,900 字
13 分钟

手机 Root 丢失恢复全攻略:提取 boot/init_boot 镜像并重刷 Magisk

手机 Root 丢失恢复全攻略:提取 boot/init_boot 镜像并重刷 Magisk

摘要

Root 丢失恢复:分清 boot 与 init_boot,用 payload-dumper-go 提官方镜像、Magisk 同机修补、fastboot 刷回;A/B 机型另有不丢 Root 做法。

系统升级之后打开 Magisk App,首页的 Installed 变成了 N/A——这是 Root 丢了最常见的样子。原因也不复杂:Magisk 是靠修补 boot 分区(或 init_boot)拿到 root 的,而系统升级会把这两个分区覆盖回原厂内容,补丁自然一起没了。

恢复的路只有一条:拿当前系统版本对应的官方镜像,在同一台手机上重新打补丁,再刷回去。步骤不多,但每一步都踩在分区的要害上,版本、分区名、刷入目标任何一个错位,轻则无效重则开不了机。

一、先判断你属于哪种情况

打开 Magisk App,看首页那张 Magisk 卡片:

Magisk App 首页:Installed 显示 N/A,重点是 Ramdisk 一栏
Magisk App 首页:Installed 显示 N/A,重点是 Ramdisk 一栏
  • Ramdisk = Yes:你的机型在 boot 分区里带 ramdisk,走本文的标准流程。

  • Ramdisk = No:这类机型的 boot 里没有 ramdisk,Magisk 只能去接管 recovery 分区。刷 boot.img 对它没有任何作用,必须改成修补 recovery.img。代价是每次开机想启用 Magisk 都要按组合键进一次 recovery。

  • Installed 有版本号但功能异常:先别急着重刷,去(设置 → 应用)检查是不是残留了「隐藏 Magisk App」留下的存根应用,它会和完整版 App 冲突,导致 App 看不到 root。把隐藏的那份卸掉通常就好了,不需要动分区。

还有两个前提要先确认,不满足的话后面全是无用功:

  1. Bootloader 已解锁。没有解锁的机型连 fastboot flash 都会被拒绝。

  2. 没有改过只读分区。这是官方 OTA 文档里用加粗强调的一条:只要你自己动过 /system/vendor 这类只读分区(哪怕只是挂载成可写),块校验就被破坏了,后续任何官方镜像的校验都过不去。

二、A/B 机型本可以不丢 Root

如果你的机型是 A/B 双槽位,这次不丢 Root 其实是可以避免的,动手重刷之前值得先确认一下自己还能不能走这条路——因为这才是官方推荐的做法。

前提是把「自动系统更新」关掉,否则系统会在你不知情的时候把升级装完:

打开「开发者选项」,关闭自动系统更新

等系统提示有 OTA 可升级时,按这个顺序操作:

  1. 打开 Magisk App → 卸载恢复原厂镜像(Restore Images)

Uninstall Magisk 对话框:要点 RESTORE IMAGES,而不是 COMPLETE UNINSTALL
Uninstall Magisk 对话框:要点 RESTORE IMAGES,而不是 COMPLETE UNINSTALL

⚠️ 这一步做完千万不要重启,重启就等于把 Magisk 卸载掉了。这个动作会用安装 Magisk 时留下的备份,把被 Magisk 修改过的分区还原成原厂内容,目的是让升级前的分区校验能通过。

  1. 正常安装 OTA:设置 → 系统 → 系统更新。

  2. 两个阶段都跑完——「正在安装更新」和「正在优化应用」——全程不要点「立即重启」

  3. 回到 Magisk App → 安装安装到未使用的槽位(Install to Inactive Slot),让 Magisk 把补丁装到升级后的那个槽位。

  4. 再回到系统更新的界面点「重启」,让设备切到新槽位。

这套流程走完,系统升级了、Root 也还在,全程不用电脑。

非 A/B 机型没有这个选项。 官方文档在这件事上的措辞很直接:非 A/B 机型没有真正好用的办法,升级会丢 Root,必须事后用电脑手动重刷——也就是本文剩下的部分。

三、工具与素材准备

1. payload-dumper-go:从固件包里提取单个分区

安卓的官方固件包(payload.bin)把所有分区打包成了一个流式格式,你没法简单解压出 boot.imgpayload-dumper-go 就是干这个的:只挑你要的分区提出来,速度很快。

项目

内容

仓库

https://github.com/ssut/payload-dumper-go

当前版本

2.1.0

许可

Apache-2.0

唯一系统依赖

xz

Release 里提供的不是一个裸二进制,而是打包好的压缩包,命名规则是 payload-dumper-go_<版本>_<系统>_<架构>.tar.gz

你的系统

下载哪个

Windows 64 位

payload-dumper-go_2.1.0_windows_amd64.tar.gz

Windows on ARM

payload-dumper-go_2.1.0_windows_arm64.tar.gz

macOS(Intel)

payload-dumper-go_2.1.0_darwin_amd64.tar.gz

macOS(Apple 芯片)

payload-dumper-go_2.1.0_darwin_arm64.tar.gz

Linux 64 位

payload-dumper-go_2.1.0_linux_amd64.tar.gz

文件名里带 _avx2 的那几个是针对 AVX2 指令集编译的加速版,只有 CPU 支持 AVX2 时才能用。不确定就用不带 _avx2 的标准版,功能一样,只是慢一点。

下载页里还附了一份官方校验文件 payload-dumper-go_sha256checksums.txt,对不上就别用:

bat
certutil -hashfile payload-dumper-go_2.1.0_windows_amd64.tar.gz SHA256

压缩包解出来就是单个可执行文件。Windows 10 及以后的系统自带 tar 命令,也可以直接解:

bat
tar -xf payload-dumper-go_2.1.0_windows_amd64.tar.gz

唯一需要额外装的依赖是 xz。这一点官方 README 写得很明确(它为了性能特意没有用纯 Go 的 xz 实现,纯 Go 版本实测慢 6 倍左右):

系统

装法

Windows

https://tukaani.org/xz/ 下载安装,把 bin 目录加进 PATH;部分系统已自带

macOS

brew install xz(也可以直接 brew install payload-dumper-go

Linux

sudo apt install xz-utils

2. 一份和你手机完全对得上的官方固件包

这是全文最容易出错的一步:固件包必须与设备型号和当前系统版本完全一致

  • 全量包(Full OTA)最稳;增量包(delta)需要额外用 -old 指定旧版镜像才能还原,属于进阶用法。

  • 下载来源优先选厂商官方固件站或已知的官方镜像站;不要用来路不明的「集合包」。

  • 顺便确认一下固件包里到底有没有 init_boot——这一步直接决定第四节你该提哪个分区。

3. 刷写工具:直接上官方 platform-tools

刷回镜像用的是 fastboot,它来自 Google 的 platform-tools,与 Android SDK 是同一套官方发布:

  • 文档页:https://developer.android.com/tools/releases/platform-tools

  • Windows 直链:https://dl.google.com/android/repository/platform-tools-latest-windows.zip

整段流程其实只用到 fastboot devicesfastboot flash 两条命令,没必要为了它去装一个带界面的「一键刷机工具」——图形工具本身没法验证它把哪个镜像刷进了哪个分区,而这几步恰恰是分区写错就直接开不了机的操作。

4. Magisk App

从官方 Release 页取最新版:https://github.com/topjohnwu/Magisk/releases/latest。当前版本 v30.7,资产名是 Magisk-v30.7.apk

⚠️ 一条必须记住的官方警告:永远不要刷别人给的修补镜像,也不要在别的设备上打补丁,哪怕型号完全一样。 补丁必须在你要 Root 的这台手机上生成。

四、判断该提取哪个分区

先把 payload.bin 放进一个路径全是英文的文件夹,然后先列分区,再决定提哪个。-l 是只列不提取:

bat
payload-dumper-go.exe -l payload.bin

输出里会看到形如 boot (67 MB), init_boot (8.4 MB), ... 的分区清单。对照下表决定目标:

固件里的情况

要提取的分区

刷入命令

固件里有 init_boot 分区

init_boot.img

fastboot flash init_boot ...

固件里没有 init_bootRamdisk = Yes

boot.img

fastboot flash boot ...

Ramdisk = No

recovery.img

fastboot flash recovery ...

为什么第一行要单独拎出来? 因为 Android 13 之后不少新机型把 generic ramdisk 从 boot 里拆出来,单独放进了 init_boot 分区,boot 里只剩内核。这类机型上你就算把 boot.img 修补得完全正确,刷进去 Installed 依然是 N/A——补丁写在了没有 ramdisk 的分区上。

判断方法不是背系统版本号,而是看固件里到底有没有这个分区-l 一眼就能看到。

五、提取镜像

只提需要的分区,速度快很多:

bat
payload-dumper-go.exe -p init_boot,vbmeta -o stock payload.bin

对照着改:

  • 上表第一行 → -p init_boot,vbmeta

  • 第二行 → -p boot,vbmeta

  • 第三行 → -p recovery,vbmeta

几个参数值得说明:

参数

作用

-p / -partitions

只提取指定分区,逗号分隔;不带就提取全部分区(动辄几个 GB)

-o / -output

指定输出目录;不带的话默认建 extracted_年月日_时分秒 这样的目录,每次名字都不同

-l / -list

只列出分区,不提取

-c / -concurrency

并发线程数,默认等于 CPU 核数

-old

增量包必需的旧版镜像目录

-m / -machine-readable

输出机器可读格式,适合写脚本

建议显式加 -o stock,原因有两个:一是默认目录名带时间戳,事后不好找;二是这份提取出来的原始镜像要留着当回滚保险——刷坏了用它能刷回原厂。

提取完成后,目录里会出现 <分区名>.img,比如 init_boot.imgvbmeta.img

2.1.0 版本会对源镜像和输出镜像做 sha256 校验,对不上会直接报错并非 0 退出。看到红色报错不要忽略,那说明固件包下载不全或者被改过。

还有两个参数平时不要碰:

  • -no-verify:跳过 sha256 校验。校验正是你发现固件损坏的唯一手段。

  • -no-fec:跳过 dm-verity 的 FEC 生成。官方明确说明跳过 FEC 的输出镜像与自己的 sha256 都对不上,绝对不许刷,只能用来看看内容。

六、在手机上打补丁

补丁必须在要 Root 的这台手机上打。

  1. 把刚提取出来的镜像传到手机(用数据线拷进「下载」目录即可),或者直接用 adb:

bat
   adb push init_boot.img /sdcard/Download/
  1. 打开 Magisk App → Magisk 卡片上的 安装 → 方法选 选择并修补一个文件 → 选中刚传进去的镜像。

  2. 如果你修补的是 recovery.img,这里还要额外勾上 Recovery Mode,否则补丁打出来是错的。

  3. 等它跑完,用官方给的那条命令把产物拉回电脑:

bat
   adb pull /sdcard/Download/magisk_patched_[随机字符串].img

注意产物文件名是 magisk_patched_ 后面跟一串随机字符,不是你想象的固定 magisk_patched.imgadb pull 时记得换成实际名字。

七、进入 fastboot 并刷入

最省事的进入方式是用命令(前提是 USB 调试已开):

bat
adb reboot bootloader

按键组合各机型不同,比如小米/Redmi 是关机后按住音量减 + 电源;其他机型请以官方文档为准。进不去时优先回到命令方式。

到了 fastboot 界面,先确认连上了:

bat
fastboot devices

能列出设备再往下走,然后按第四节那张表选命令:

bat
fastboot flash init_boot "C:\stock\magisk_patched_xxxxx.img"
fastboot flash boot     "C:\stock\magisk_patched_xxxxx.img"
fastboot flash recovery "C:\stock\magisk_patched_xxxxx.img"

三条命令只会用到一条,看的是第四节那张表,不是随便挑一条。把补丁刷进 recovery 之外的分区(比如 systemvendor)会让设备无法开机。

如果你的固件里有独立的 vbmeta 分区,可以顺手处理一下 AVB 校验(官方提示这条命令可能会清空数据,先想清楚):

bat
fastboot flash vbmeta --disable-verity --disable-verification vbmeta.img

最后重启:

bat
fastboot reboot

首次开机因为 Magisk 要做初始化,可能比平时慢一些,耐心等,不要在这个阶段强制断电

八、验证是否恢复

  • 打开 Magisk App,首页 Installed 一栏应当显示出版本号,而不是 N/A

  • 想直接看已安装的二进制版本,在终端模拟器里跑:

bash
  magisk -c

它会打印 Magisk 二进制自身的版本与版本号。App 里显示 Installed = N/Amagisk -c 有输出,说明二进制在跑、只是 App 读不到,这时按第一节的第 3 种情况去查隐藏 App 的残留。

九、排错手册

现象

原因

处理

xz: not found

系统没装 xz 或没进 PATH

按第三节表格安装;Windows 装好后要重开终端

partition xxx not found / 提取出来是 0 字节

固件包与机型或版本不匹配

换成与当前系统版本完全一致的全量包

init_boot 报不存在

这个固件的 ramdisk 还在 boot

按第四节改提 boot,不要硬凑

remote: 'unknown command'not allowed in locked state

分区名写错,或 Bootloader 未解锁

-l 核对分区名;解锁状态在 fastboot 首屏会有提示

writing 'boot'... FAILED

分区名与镜像不匹配(比如把 init_boot 的补丁往 boot 里刷)

回到第四节重新对表

刷完卡在开机 Logo / 无限重启

补丁与固件版本不符,或刷错了分区

长按进入 fastboot,用第五节留下的原厂镜像刷回对应分区

刷对了但 Installed 仍是 N/A

该机型实际要刷 init_boot

按第四节重新判断

装完模块后开不了机

模块冲突

连电脑执行 magisk --remove-modules(会自动重启);没开 USB 调试就用音量减的组合键引导进 Magisk 安全模式,它会自动禁用所有模块

error: cannot load '...'

路径含中文或空格

路径全用英文,含空格时加引号

adb: device unauthorized

手机没点「允许 USB 调试」

手机上重新确认授权

增量包提取报 PUFFDIFF / ZUCCHINI 不支持

delta 操作不支持的格式

-p 只提需要的分区,其余跳过;或直接换全量包

十、常见问题

只刷 boot/init_boot 会清数据吗?

不会。这两条 fastboot flash 只写内核相关分区,用户数据区不动。会清数据的是两件事:解锁 Bootloader(必清),以及上面那条可选的 vbmeta --disable-verity --disable-verification(官方提示可能清空数据)。

Root 之后还能正常收系统 OTA 吗?

A/B 机型可以,按第二节的流程走就能升级且不丢 Root。非 A/B 机型不行——官方文档的说法是这类机型没有好办法,每次升级完都得手动重刷一遍。

还能用 Magisk 隐藏 Root 绕过检测吗?

官方 FAQ 的答复是:Magisk 本身已经不再负责隐藏 root,这部分功能由各类 Zygisk 模块提供。所以「装了 Magisk 就能骗过银行 App」这个预期本身就不成立。

为什么不直接把 bootvbmeta 都刷一遍?

因为没必要,而且有代价。Magisk 只改内核/ramdisk 分区,vbmeta 只在 AVB 校验确实拦住你的时候才需要动。多刷一个分区就多一次写错的机会,而 vbmeta 那条命令还可能清数据。

三星机型为什么流程不一样?

三星没有 fastboot,用的是 Download 模式 + Odin,而且解锁会永久熔断 Knox 保修位、首次安装 Magisk 还需要一次完整数据擦除。另外三星机型的官方文档里有一条硬规矩:绝对不要把 bootinit_bootrecoveryvbmeta 任何一个分区刷回原厂,那会直接变砖,只能靠 Odin 全量恢复 + 清数据救回来。三星请单独按官方文档走。

一加、小米这些品牌的解锁政策还有效吗?

各家政策调整都很频繁(等待时长、账号资格、是否关闭通道都变过),而且一旦关闭就不再开放。以厂商官方解锁页面当时公布的规则为准,不要照着几年前教程里的「绑定 7 天」直接照做。华为/荣耀自 2018 年起已停止提供解锁码,这部分机型基本没有可行路径。

十一、写在最后

整件事的难点不在命令,而在对齐:固件版本要和系统对齐,提取的分区要和机型对齐,补丁要和设备对齐。三条对齐里错一条,结果都是「刷成功了但没 Root」或者「刷完开不了机」。

所以动手前多做三件事:用 -l 看清分区清单;用 -o 把原厂镜像留一份;打补丁一定用同一台手机。这三步麻烦不到两分钟,但它们是出问题时你唯一的退路。

另外,如果你的机型是 A/B 双槽位,真正值得收藏的是第二节那套「升级前恢复原厂镜像 → 升级 → 安装到未激活槽位」的流程——它让你根本不需要用到这篇文章的后半段。

官方地址速查

纯文本
payload-dumper-go 仓库   https://github.com/ssut/payload-dumper-go
payload-dumper-go 下载   https://github.com/ssut/payload-dumper-go/releases/latest
xz (Windows/macOS/Linux) https://tukaani.org/xz/
Magisk 仓库              https://github.com/topjohnwu/Magisk
Magisk 下载              https://github.com/topjohnwu/Magisk/releases/latest
Magisk 官方安装文档      https://topjohnwu.github.io/Magisk/install.html
Magisk 官方 OTA 文档     https://topjohnwu.github.io/Magisk/ota.html
Magisk 常见问题          https://topjohnwu.github.io/Magisk/faq.html
Android platform-tools   https://developer.android.com/tools/releases/platform-tools
platform-tools 直链      https://dl.google.com/android/repository/platform-tools-latest-windows.zip
END