通常来说,Android有四种提取分区的方式:
- 从刷机包中提取
- 设备已获取root权限,通过root权限提取
- 通过MTK深刷/9008提取(不讨论)
- 大容量模式(不讨论)
从刷机包中提取
从刷机包中提取分区非常简单,对于zip格式的线刷包(其他格式自行寻找解包方法),只需要以压缩文件方式打开线刷包,解压需要提取的分区即可
如果是卡刷包, 参考 如何解包 Android ROM
方法一:通过命令提取
如果设备已经获取Root权限,则可以通过Root权限提取分区
或者设备已刷入第三方Recovery,则可以在Recovery模式下提取(不是Rec内的备份!)。
注意:有些分区提取后可能并不支持直接通过Fastboot刷入
通过Root权限提取分区主要是与块设备通信。 Android中的块设备与Linux相似,可以通过块设备来读写分区
每个机型的提取方式可能不同,请自行在/dev/block
下查看
以红米5P举例,分区所在的块设备路径在:
/dev/block/bootdevice/by-name/分区名
注:大部分新设备可能无需添加/bootdevice
比如,若需要提取system分区,则分区所在的块设备路径为:
/dev/block/bootdevice/by-name/system
对于虚拟分区,它们的路径往往在/dev/block/mapper/
下
比如system分区:
/dev/block/mapper/system
使用前请确保该分区确实存在。
如果你能够读取设备的分区表,通过指定提取分区序号可以忽视路径不同的问题。
对于eMMC设备来说,其设备路径一般为:
/dev/block/mmcblk0pxx #xx为分区号
对于UFS设备来说,通常存在 sda、sdb、sdc、sdd、sde、sdf 多个储存逻辑单元,因此其设备路径一般为:
/dev/block/sdaxx #xx为分区号
取得块设备路径后,有两种方式提取分区:
1.通过cp指令:
cp 块设备路径 要提取到的文件路径
例如
cp /dev/block/bootdevice/by-name/system /sdcard/system.img
这会提取system分区到/sdcard/system.img
2.通过dd指令:
dd if=块设备路径 of=要提取到的文件路径 bs=4M
例如
dd if=/dev/block/bootdevice/by-name/system of=/sdcard/system.img bs=4M
这同样会提取system分区到/sdcard/system.img
bs=4M
意为将块大小指定为4M,由于储存器的特性,小于扇区大小会造成更多的寿命损失并增加读写时间
因此,为了加快速度并减少寿命损失,可使用类似于4M的整数
对于较老的机型,可尝试转为字节,如
bs=4M
可换为
bs=4194304
方法二:使用柚坛工具箱提取
在柚坛工具箱的格式化与提取页面中的提取分区填写需要提取的分区命,如为 ab 或 vab 分区设备请自行添加 _a 或 _b 后缀,物理分区请点击 提取物理分区,虚拟分区请点击 提取虚拟分区。无需考虑设备的块路径到底是什么。