在 V/A B 分区结构的设备上,手动通过 Fastboot 刷入从 payload.bin 提取的镜像时,不需要也不建议手动为每个分区指定后缀(如 _a_b)。

以下是具体的操作逻辑和建议步骤:

1. 为什么不需要手动指定 _a_b

当你执行 fastboot flash system system.img 而不带后缀时,Fastboot 工具会自动将镜像刷入当前的活动槽位(Current Active Slot)

  • 如果你的原系统在 B 分区,且当前手机处于 B 槽位,直接刷入会覆盖 B 分区(这通常用于系统修复)。
  • 如果你想把系统刷入 A 分区,正确的做法是先切换槽位,而不是手动给命令加后缀。

2. 正确的操作流程

为了确保刷入过程安全且不混乱,建议遵循以下流程:

第一步:确认当前槽位

fastboot getvar current-slot

假设返回 current-slot: b

第二步:决定刷入位置

  • 方案 A(覆盖原系统): 继续停留在 B 槽位刷入。
  • 方案 B(刷入新分区,保留旧系统): 切换到 A 槽位再刷入(更推荐,因为失败了还能切回 B)。

    fastboot --set-active=a

第三步:进入 Fastbootd 模式(关键)
由于 systemvendorproduct 等分区现在大多被包含在 super 动态分区中,普通的 Fastboot 模式无法直接刷入,必须进入 Fastbootd

fastboot reboot fastboot

(此时屏幕应显示蓝色字样的 Fastbootd 菜单)

第四步:批量刷入
在 Fastbootd 模式下,直接执行不带后缀的命令:

fastboot flash boot boot.img
fastboot flash system system.img
fastboot flash vendor vendor.img
...(其他镜像)

3. 特殊情况:何时需要指定后缀?

只有在极少数情况下,或者你非常确定自己在做什么时,才使用 _a_b。例如,你身处 A 槽位,但想强行修改 B 槽位的某个镜像:

fastboot flash boot_b boot.img

风险提示: 手动指定后缀容易导致“槽位污染”,即 A 槽位的内核配上了 B 槽位的系统,导致手机彻底无法启动。

总结建议

  1. 先切槽位fastboot --set-active=a
  2. 再进 Fastbootdfastboot reboot fastboot
  3. 直接刷入:不加任何 _a_b 后缀。

这样操作,Fastboot 会根据你设置的活动槽位,自动帮你完成所有分区对应关系,是最稳妥的做法。由于你之前提到需要保留数据,请务必跳过 userdata.img 的刷入。