小米刷机卡Fastboot?VAB/AB分区脚本适配与实操指南
2026/9/24 6:33:32 网站建设 项目流程

1. 刷机卡Fastboot这件事,到底卡在了哪里

小米和红米手机的用户群体里,玩机刷机的比例一直不低。不管是想降级回老版本系统、刷第三方ROM,还是手机变砖之后自救,线刷几乎是绕不开的一步。但很多人第一次遇到的情况是:照着教程一步步操作,手机进入了Fastboot界面,插上数据线,电脑上脚本也跑了,结果屏幕上的小米兔子一动不动,命令行窗口里刷机进度条卡在某个位置再也不动,或者干脆报错退出。反复重试、换线、换USB口、换电脑,折腾几个小时甚至一整天,手机还是那个Fastboot界面。

这个问题不是个例。在各大数码社区和玩机群里,关于“小米刷机卡Fastboot”的求助帖几乎每天都有。而其中相当一部分案例,根源并不在数据线、驱动或者手机硬件,而在于官方线刷脚本本身没有适配你手上这台机器的分区结构

具体来说,近几年发布的小米和红米机型,大量采用了VAB(Virtual A/B)分区AB分区方案。传统的线刷脚本是按照老式A-only分区、单一super分区的逻辑写的,刷到新机型上就会出现分区找不到、镜像写入地址错位、刷写顺序不对等问题。表现就是卡在Fastboot界面,或者刷到某个分区时直接报错。

这篇文章就是围绕这个核心问题展开的。我会从分区结构的基础讲起,把VAB和AB分区的差异说清楚,然后手把手带你修改官方线刷脚本,让它在你的机器上能正常跑完。同时也会覆盖GPT分区表相关的注意事项、fastboot传文件到手机的正确姿势、驱动安装的坑,以及一些常见报错的排查思路。不管你是第一次刷机的新手,还是刷过几台机器但被VAB搞懵的老玩家,应该都能从里面找到能直接用的东西。

注意:刷机有风险,操作前务必备份好个人数据。本文讨论的是基于官方线刷包的脚本修改,不涉及任何非官方渠道或违规内容。

2. 先搞懂分区:A-only、AB分区和VAB到底差在哪

2.1 从A-only到AB分区:安卓分区方案的演进逻辑

早期的安卓手机,系统分区就是一套:boot、system、vendor、recovery等等,各有一份。系统更新的时候,手机需要重启进入recovery模式,把新系统写入这些分区,写入过程中手机是不能正常使用的。这种方案叫A-only,结构简单,但更新体验差,而且一旦写入过程中断电或者出错,手机就可能变砖。

为了解决这个问题,谷歌在安卓7.0时代引入了AB分区方案(也叫A/B seamless update)。核心思路是:手机里有两套完整的系统分区,一套叫slot A,一套叫slot B。当前运行的是A,系统更新的时候把新系统写入B,写完之后重启切换到B,A就变成了备用。这样更新过程完全在后台进行,用户该干嘛干嘛,重启一下就用上新系统了。而且如果B启动失败,还能自动回滚到A,安全性大大提高。

AB分区的代价是存储空间翻倍。系统分区本来就不小,再复制一份,对存储空间是很大的浪费。所以后来谷歌又推出了**VAB(Virtual A/B)**方案,也就是虚拟AB分区。它的思路是:不再物理上保留两套完整分区,而是只保留一套super分区(里面装着system、vendor、product等逻辑分区),更新的时候通过snapshot技术做一份虚拟的快照,写入新数据,重启后切换。这样既保留了AB分区的无缝更新和回滚能力,又节省了存储空间。

2.2 VAB和AB分区在刷机场景下的关键差异

对于日常使用来说,AB和VAB的差异用户基本感知不到。但在刷机场景下,这两者的差异就非常关键了。

AB分区的机器,fastboot刷写的时候需要指定slot。比如fastboot flash boot_a boot.imgfastboot flash boot_b boot.img是分开的。而VAB分区的机器,虽然底层也有slot概念,但很多分区是通过super分区动态管理的,fastboot刷写逻辑和传统AB不完全一样。

更关键的是,小米的官方线刷包(就是那种.tgz格式的完整包)里面包含了一个flash_all.bat(Windows)或flash_all.sh(Linux/Mac)脚本。这个脚本里写死了一系列fastboot命令,指定了要刷哪些分区、刷到哪个slot、按什么顺序刷。如果这个脚本是按照A-only或者早期AB的逻辑写的,刷到VAB机型上就会出问题。

我实测过几台机器,比如Redmi Note系列的一些VAB机型,用官方脚本刷的时候,脚本会尝试刷system分区,但VAB机型上根本没有独立的system分区,system是包含在super分区里的逻辑分区。结果就是fastboot报错“partition not found”,或者脚本跳过某些步骤导致刷完之后无法启动,卡在Fastboot。

2.3 怎么判断自己的手机是哪种分区方案

判断方法其实不复杂,有几种途径:

第一种,看手机型号和发布时间。一般来说,2020年之后发布的中高端小米/红米机型,很多都是VAB。但这不是绝对的,最准确的方法还是实际查看。

第二种,手机能进系统的话,用ADB命令查看。连接手机,开启USB调试,在电脑上执行:

adb shell getprop ro.boot.slot_suffix

如果返回_a_b,说明有slot概念。再执行:

adb shell getprop ro.virtual_ab.enabled

如果返回true,那就是VAB。返回false或者空,可能是传统AB或A-only。

第三种,手机已经卡在Fastboot了,可以在Fastboot模式下执行:

fastboot getvar current-slot

如果返回current-slot: a之类的,说明有slot。再执行:

fastboot getvar is-userspace

以及查看分区列表:

fastboot getvar all

在输出里找partition-type:super之类的信息。如果有super分区,基本可以确定是VAB或动态分区方案。

第四种,直接看线刷包里的脚本内容。打开flash_all.bat,看看里面有没有--slot参数,有没有刷super分区的命令,有没有system分区的独立刷写命令。这些都能帮你判断脚本是按哪种分区方案写的。

实操心得:我一般会先用fastboot getvar all把手机的分区信息全部导出来,存成一个文本文件。这样后面改脚本的时候,对着实际分区列表来改,比凭记忆靠谱得多。这个命令的输出很长,建议重定向到文件里慢慢看。

3. 官方线刷脚本拆解:它到底在干什么

3.1 flash_all脚本的整体结构

小米官方线刷包解压之后,根目录下会有几个关键文件:flash_all.batflash_all.shflash_all_except_storage.batflash_all_lock.bat等等。其中flash_all.bat是最常用的,它会刷写所有分区并清除数据。

打开这个bat文件,你会看到它大致分为几个部分:

第一部分是环境检查和变量定义。它会检查fastboot工具是否存在,定义一些路径变量。

第二部分是刷写前的准备操作。比如fastboot erase一些分区,fastboot set_active切换slot,fastboot reboot-bootloader重启到bootloader等等。

第三部分是核心的刷写命令序列。一条一条的fastboot flash命令,把各个img文件写入对应的分区。

第四部分是刷写后的收尾操作。比如fastboot reboot重启手机,或者fastboot oem执行一些厂商特定的命令。

3.2 脚本里和分区相关的关键命令

脚本里最核心的就是那些fastboot flash命令。我拿一个典型的官方脚本片段举例:

fastboot flash boot boot.img fastboot flash system system.img fastboot flash vendor vendor.img fastboot flash recovery recovery.img

这是A-only机型的写法。到了AB分区机型,会变成:

fastboot flash boot_a boot.img fastboot flash boot_b boot.img fastboot flash system_a system.img fastboot flash system_b system.img

而VAB机型的脚本,通常会看到:

fastboot flash super super.img fastboot flash boot boot.img fastboot flash vbmeta vbmeta.img

注意,VAB机型上,system、vendor、product这些都在super.img里面,不需要单独刷。脚本只需要刷super分区,然后刷boot、vbmeta等独立分区就行了。

如果你拿到的官方脚本是A-only版本的,但你的手机是VAB,脚本就会尝试刷system分区,而你的手机上没有这个分区,fastboot就会报错。有些脚本在报错后不会停止,继续往下执行,结果就是刷了一半,手机状态不完整,重启后卡在Fastboot。

3.3 脚本执行顺序的重要性

刷机脚本里命令的顺序不是随便排的。一般来说,要先刷底层分区,再刷上层分区。比如先刷super,再刷boot,再刷vbmeta。如果顺序反了,可能会出现依赖问题。

另外,fastboot set_active这个命令的位置也很关键。它用来切换当前活动的slot。如果在刷写之前就切换了slot,但刷写过程中出错,可能会导致两个slot都不完整,手机无法启动。通常的做法是:先刷当前slot,刷完之后如果需要,再切换slot刷另一个,最后设置回正确的活动slot。

还有一个容易忽略的点:fastboot reboot-bootloader。有些脚本在刷完一部分分区后会重启bootloader,让新的分区表生效。如果你手动改脚本的时候把这个命令删了或者放错位置,可能会导致后续刷写找不到分区。

注意:改脚本之前,一定要把原始脚本备份一份。我见过有人改完脚本刷机失败,想恢复原脚本结果发现原始文件被覆盖了,只能重新下载整个线刷包,浪费时间和流量。

4. 动手改脚本:VAB和AB机型的适配方案

4.1 准备工作:确认分区列表和镜像文件

改脚本之前,先把两样东西准备好:手机的实际分区列表,和线刷包里的镜像文件列表。

分区列表用fastboot getvar all导出,重点看这几个:

  • 有没有super分区
  • 有没有systemvendorproduct这些独立分区
  • slot相关的变量,比如current-slotslot-count
  • partition-type信息

镜像文件列表就是线刷包解压后根目录下的所有.img文件。用ls或者文件管理器看一下,记下有哪些img。

然后做一个对照:哪些img对应哪些分区,哪些img在VAB机型上不需要单独刷。

4.2 VAB机型的脚本修改要点

假设你拿到的官方脚本是A-only版本的,手机是VAB机型。修改的核心思路是:把刷写独立system/vendor/product分区的命令删掉,改成刷super分区。

具体操作:

第一步,找到脚本里所有fastboot flash systemfastboot flash vendorfastboot flash product之类的命令,全部删除或者注释掉。

第二步,确认线刷包里有super.img文件。如果有,在合适的位置加上:

fastboot flash super super.img

如果没有super.img,而是有多个分散的img(比如system.imgvendor.imgproduct.img),那说明这个线刷包可能不是给VAB机型用的,需要找对应机型的线刷包。

第三步,检查boot、vbmeta、dtbo这些独立分区的刷写命令。VAB机型上这些分区通常还是独立的,但要注意slot后缀。有些VAB机型刷boot的时候不需要指定slot,有些需要。以fastboot getvar all的输出为准。

第四步,处理fastboot set_active命令。VAB机型通常不需要手动切换slot来刷写,因为super分区是共享的。如果脚本里有切换slot的命令,确认一下是否必要。不必要的可以删掉,避免刷写出错。

第五步,检查fastboot erase命令。VAB机型上,erase super分区可能会导致分区表损坏,需要重新刷完整包才能恢复。所以脚本里如果有fastboot erase super,建议删掉,改成直接flash覆盖。

4.3 AB分区机型的脚本修改要点

AB分区机型的修改相对简单一些,因为分区结构更接近传统方案。核心是确保每个分区都刷到正确的slot。

第一步,确认当前活动slot。用fastboot getvar current-slot查看。

第二步,脚本里所有fastboot flash命令,都要加上slot后缀。比如:

fastboot flash boot_a boot.img fastboot flash boot_b boot.img fastboot flash system_a system.img fastboot flash system_b system.img

如果脚本里只刷了一个slot,另一个slot没刷,手机切换slot后可能无法启动。所以两个slot都要刷。

第三步,注意fastboot set_active的位置。通常的做法是:先设置活动slot为a,刷a的所有分区;然后设置活动slot为b,刷b的所有分区;最后设置回你想要的slot。

第四步,vbmeta分区的处理。AB机型上vbmeta也有两个slot,需要分别刷写。有些机型还需要刷vbmeta_system,看具体分区列表。

4.4 一个实际修改案例

我拿一台Redmi的VAB机型举例。原始官方脚本(简化版)是这样的:

fastboot flash boot boot.img fastboot flash system system.img fastboot flash vendor vendor.img fastboot flash product product.img fastboot flash vbmeta vbmeta.img fastboot reboot

这台手机实际是VAB,有super分区,没有独立的system/vendor/product。修改后的脚本:

fastboot flash super super.img fastboot flash boot boot.img fastboot flash vbmeta vbmeta.img fastboot flash dtbo dtbo.img fastboot reboot

改完之后跑一遍,刷机顺利完成,手机正常启动。关键就是把不存在的分区刷写命令删掉,换成super分区刷写。

实操心得:改脚本的时候,建议一行一行地改,改完一行在旁边加个注释说明为什么改。这样如果刷机出问题,回头排查的时候能快速定位是哪一步改错了。我一般会把改过的脚本另存为flash_all_custom.bat,保留原始脚本不动。

5. 刷机实操全流程:从驱动安装到刷完重启

5.1 驱动安装:fastboot驱动不装好后面全是坑

很多人刷机卡住,第一步就错了:驱动没装对。Windows上,手机进入Fastboot模式后,设备管理器里可能会显示为一个未知设备,或者显示为“Android”但带黄色感叹号。这时候fastboot命令是识别不到设备的。

正确的做法是:下载小米官方的MiFlash工具,它里面自带了fastboot驱动。或者下载通用的Google USB Driver,手动安装。安装的时候,在设备管理器里右键那个未知设备,选择“更新驱动程序”,然后手动指向驱动目录。

安装成功后,设备管理器里应该能看到“Android Bootloader Interface”或者类似的名称,没有黄色感叹号。这时候在命令行执行:

fastboot devices

应该能返回设备序列号。如果返回空,说明驱动还是有问题。

Linux和Mac用户通常不需要额外装驱动,但可能需要配置udev规则(Linux)或者信任设备(Mac)。Linux下如果fastboot devices没输出,可以试试用sudo运行,或者添加udev规则。

5.2 进入Fastboot模式的正确姿势

小米/红米手机进入Fastboot模式的方法:关机状态下,同时按住音量减键电源键,直到屏幕上出现小米兔子修安卓机器人的画面。这就是Fastboot模式。

有些机型可能需要先进入Recovery,再从Recovery选择进入Fastboot。具体看机型。

进入Fastboot后,用数据线连接电脑。建议用原装线或者质量好的线,劣质线可能会导致传输不稳定,刷机中途断开。

注意:刷机过程中不要拔线、不要按电源键、不要让电脑休眠。我见过有人刷机刷到一半电脑自动休眠,结果手机变砖的案例。刷机前把电源计划改成“高性能”,关闭休眠。

5.3 执行修改后的脚本

把修改好的脚本和线刷包放在同一个目录下。在Windows上,双击bat文件运行。或者在命令行里cd到该目录,执行:

flash_all_custom.bat

脚本会开始逐条执行fastboot命令。屏幕上会显示每条命令的执行结果。正常情况下,你会看到一系列OKAY或者Finished的提示。

如果某条命令报错,脚本可能会停止,也可能继续。注意看报错信息。常见的报错有:

  • Partition not found:分区不存在,说明脚本里的分区名和手机实际分区不匹配。
  • Failed to write:写入失败,可能是镜像文件损坏或者存储空间不足。
  • Device not found:设备未连接,检查数据线和驱动。

5.4 刷完之后的检查和首次启动

脚本跑完之后,通常会执行fastboot reboot重启手机。首次启动会比较慢,因为系统需要初始化。耐心等几分钟,不要急着断电。

如果重启后还是进入Fastboot,说明刷机没有完全成功。可能的原因:某个关键分区没刷上,或者slot设置不对。这时候需要重新进Fastboot,检查分区状态,重新刷写。

如果重启后进入Recovery或者卡在开机logo,可能是数据分区需要清除。在Recovery里执行双清(清除数据和缓存),然后重启。

实操心得:刷完机第一次启动,我一般会等至少5分钟。有些机型首次启动要优化应用,时间更长。如果超过10分钟还没进系统,再考虑是不是有问题。不要一看到logo不动就以为变砖了,耐心很重要。

6. 常见问题排查:卡Fastboot、报错、驱动异常

6.1 常见问题速查表

问题现象可能原因排查方法解决方案
fastboot devices无输出驱动未安装或异常检查设备管理器重装fastboot驱动
刷机卡在某个分区分区名不匹配对比getvar all输出修改脚本分区名
报错partition not found脚本按A-only写,手机是VAB检查是否有super分区改用super.img刷写
刷完卡Fastbootslot设置错误fastboot getvar current-slot重新设置活动slot
刷完卡开机logo数据分区未清除进Recovery双清清除data和cache
刷机中途断开数据线或USB口问题换线换口用原装线,直连主板USB
脚本执行到一半停止某条命令报错看命令行输出定位报错命令,手动执行

6.2 fastboot连接不到设备的排查思路

这是最常见的问题之一。手机明明在Fastboot界面,线也插着,但fastboot devices就是没输出。

排查顺序:

先换USB口。台式机的话,插到主板后面的USB口,不要插机箱前面的。机箱前置USB口供电和信号质量可能不稳定。

再换数据线。有些线只能充电不能传数据,或者传输质量差。用原装线最稳。

然后检查驱动。Windows设备管理器里看有没有未知设备。有的话装驱动。

如果还不行,试试在Linux下操作。Linux对fastboot设备的识别通常比Windows省心,不需要装驱动。找个Ubuntu的Live USB启动,在Linux下执行fastboot命令,往往能直接识别。

最后,检查手机Fastboot模式是否正常。有些时候手机虽然显示Fastboot界面,但fastboot服务没起来。可以试试fastboot reboot-bootloader重新进入。

6.3 刷机报错后的恢复方法

如果刷机刷到一半报错,手机处于不完整状态,不要慌。只要Fastboot还能进,就还有救。

第一步,不要拔线,不要重启手机。保持Fastboot模式。

第二步,根据报错信息,手动执行剩下的刷写命令。比如脚本在刷super的时候报错停了,你可以手动执行:

fastboot flash super super.img

然后再继续刷后面的分区。

第三步,如果手动执行也报错,检查镜像文件是否完整。可以对比线刷包里img文件的MD5或SHA256校验值,看是否和官方提供的一致。下载过程中文件损坏是常见问题。

第四步,如果所有方法都试过还是不行,重新下载线刷包,重新解压,重新改脚本,从头再来。有时候问题就出在包本身。

注意:如果手机连Fastboot都进不去了,那可能需要更高级的救砖方法,比如高通的9008模式或者联发科的SP Flash Tool。这些方法涉及更底层的操作,风险更高,建议找有经验的人帮忙。

6.4 关于GPT分区表的补充说明

有些用户在改脚本或者手动分区的时候会接触到GPT分区表的概念。GPT是GUID Partition Table的缩写,是现代硬盘和手机存储常用的分区表格式,取代了老式的MBR。

在手机刷机场景下,GPT分区表通常不需要手动修改。线刷包里的分区表信息是包含在刷机流程里的,fastboot刷写的时候会自动处理。但如果分区表损坏了,可能需要通过特定工具重新写入。

Linux下用gdisk或者parted可以查看和修改GPT分区表,但手机存储不像电脑硬盘那样可以直接挂载操作。手机的分区表操作通常需要通过fastboot或者厂商特定的工具来完成。

对于普通刷机用户来说,GPT分区表这个概念了解一下就行,实际刷机过程中不太需要直接操作。重点还是放在脚本修改和fastboot命令上。

7. 几个容易被忽略的细节和我的实操体会

7.1 fastboot传文件到手机的正确理解

有人问“fastboot传文件到手机”是什么意思。其实fastboot刷机的过程,本质上就是把电脑上的img文件传输到手机的对应分区里。fastboot flash命令做的就是这件事:读取本地img文件,通过USB传输到手机,写入指定分区。

所以fastboot传文件不是像MTP那样复制文件到存储卡,而是直接写入分区。这也是为什么刷机会清除数据、为什么刷错了会变砖——因为它直接改的是系统分区。

理解这一点,就能明白为什么分区名必须匹配、为什么镜像文件必须对应正确。传错分区,轻则功能异常,重则无法开机。

7.2 脚本里的等待和延时

有些官方脚本里会有timeout或者sleep命令,用来在两条fastboot命令之间等待几秒。这不是多余的。有些操作,比如fastboot reboot-bootloader之后,手机需要时间重新进入bootloader,如果紧接着执行下一条命令,可能会因为设备还没准备好而失败。

改脚本的时候,不要把这些等待命令删掉。如果觉得等待时间不够,可以适当加长。比如把timeout /t 5改成timeout /t 10

7.3 关于slot切换的时机

AB和VAB机型上,slot切换的时机很重要。我的一般原则是:刷写当前活动slot的时候,不要切换。等当前slot刷完了,再切换到另一个slot刷。最后设置回你想要的活动slot。

如果脚本里的slot切换逻辑和这个原则不符,可以手动调整。比如把fastboot set_active b移到所有刷写命令之后。

7.4 刷机前的数据备份

这个必须单独强调。刷机,尤其是线刷,会清除手机上的所有数据。照片、聊天记录、文档,全部没了。刷机前一定要备份。

备份方法:手机能进系统的话,用小米云服务或者本地备份功能。手机已经进不去系统的话,如果之前开了USB调试,可以用ADB拉取数据。如果什么都没开,那数据可能就保不住了。

我个人的习惯是,重要数据永远保持至少两份备份:一份在手机本地,一份在电脑或者云端。这样不管手机出什么问题,数据都不会丢。

7.5 关于“mate60可以用fastboot刷机么”这类问题的回应

经常看到有人问某款特定机型能不能用fastboot刷机。这里统一说一下:fastboot是安卓系统的通用刷机协议,理论上所有安卓手机都支持。但具体到某个机型,能不能刷、怎么刷,取决于厂商有没有提供线刷包、有没有锁定bootloader。

小米和红米手机对fastboot刷机的支持是比较友好的,官方提供线刷包,bootloader解锁之后就可以刷。其他品牌的情况各不相同,有的需要特定工具,有的限制更多。具体机型具体分析,不能一概而论。

7.6 最后分享一个排查小技巧

如果你改完脚本刷机还是失败,但又找不到原因,可以试试这个办法:把脚本里的每一条fastboot命令单独拿出来,在命令行里一条一条手动执行。这样能精确看到是哪条命令报错、报什么错。比脚本一口气跑完然后看日志要直观得多。

手动执行的时候,注意命令的顺序要和脚本里一致。每执行一条,观察手机屏幕和命令行输出。找到报错的那条,针对性地解决。

这个办法虽然慢,但排查问题非常有效。我遇到疑难杂症的时候,基本都是靠这个方法定位到根因的。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询