本文将带你学会如何备份Android设备的字库文件(包含基带)。
如需观看视频教程可跳转本人视频

一、什么是字库,为什么要备份字库?

字库可以简单理解为Android设备的分区。刷机时也会刷入分区,但刷入不完整。如果设备刚好是其他分区损坏了,那么即使线刷完整包也无法修复。所以为了预防特殊分区损坏、也为了预防不小心刷入格机模块(rm -rf /),玩机前我们需要自行备份Android设备的字库文件。

二、备份的前提条件

· 设备需获取Root权限

我选择使用Magisk获取Root权限,获取方式参考我的视频。当然,如果你没有获取Root权限,或者说连Bootloader锁都没有解开,那也没有必要备份字库,正常用就行,多一事不如少一事。

· 开启设备的USB调试

在开发者选项中打开。

· 给予Shell以Root权限

将设备连接至电脑,在终端进入adb shell(需提前拥有platform-tools,如何安装参考我的视频中安装驱动部分。首次使用设备会提示“是否给予Root权限”,给予即可。指令如下:

1
2
adb shell
su

· 在Android至少预留20GB可用空间

现代Android设备分区很多,占用空间也很大,本人的小米平板6(pipa)备份文件大约十几GB。

三、备份字库

本文使用的方法是手动在Shell中键入指令以达成备份字库的目的,酷安上有教程可在手机上直接执行备份和恢复,写的很好,但本人认为恢复部分有些许问题,因此不采用这种方法。缘由我已经在视频里说了,所以不要再在我视频评论区里说什么“XXX直接秒”之类的了,等你需要恢复字库的时候手机屏幕都不一定亮得起来。

· 创建工作目录

首先,我们在设备sdcard目录下创建一个用于存储备份字库的目录:

1
mkdir /sdcard/000_Backup

这个时候我们就可以在设备的文件浏览器看到了。

· 读取设备的分区信息

在终端中输入以下命令,这里注意,我的指令中屏蔽了userdata和缓存分区(没有必要)。

1
ls -1 /dev/block/bootdevice/by-name | grep -ixvE "userdata|cache" | while IFS= read -r name; do echo "dd if=/dev/block/bootdevice/by-name/$name of=/sdcard/000_Backup/$name.img" >> /sdcard/000_Backup/001_Backup.sh; echo "fastboot flash $name $name.img" >> /sdcard/000_Backup/002_Restore.bat; done

执行完成后,000_Backup目录下会多出一个sh脚本和一个bat脚本,sh脚本用于读取备份,bat用于还原备份。

· 执行备份脚本

我们使用001_Backup.sh脚本执行备份:

1
sh /sdcard/000_Backup/001_Backup.sh

随后终端会显示备份的进度,耐心等待。

· 创建MD5值表(可不看)

备份完成后我们执行下面这条命令,它会计算我们备份出来的所有文件的MD5值并将其全部整理至003_MD5Hsah.txt这个文本中。

1
cd /sdcard/000_Backup && md5sum * > /sdcard/000_Backup/003_MD5Hsah.txt

备份MD5值是为了防止在存储过程中备份文件出现损坏,而我们浑然不知,将这个损坏的分区刷进手机导致出错。

到这里基础备份工作就完成了!

四、修改bat脚本(可不看)

我们备份字库的目的就是还原那些刷机包中没有的分区文件,如果刷机包中包含某些文件,我们就没有必要还原,不然可能会导致版本冲突,并且浪费时间。我们可以修改bat脚本中的指令,使还原的时候不会恢复super等分区

1
sed -i -e '/ super.img/s/^/::/g' -e '/ system.img/s/^/::/g' -e '/ system_a.img/s/^/::/g' -e '/ system_b.img/s/^/::/g' -e '/ vendor.img/s/^/::/g' -e '/ vendor_a.img/s/^/::/g' -e '/ vendor_b.img/s/^/::/g' -e '/ mmcblk0.img/s/^/::/g' -e '/ sda.img/s/^/::/g' -e '/ sdb.img/s/^/::/g' -e '/ sdc.img/s/^/::/g' -e '/ sdd.img/s/^/::/g' -e '/ sde.img/s/^/::/g' -e '/ sdf.img/s/^/::/g' -e '/ sdg.img/s/^/::/g' /sdcard/000_Backup/002_Restore.bat

然后我们给它打包一下,在sdcard根目录下就可以看到PartitionBackup.tgz了。

1
cd /sdcard && tar -zcpvf PartitionBackup.tgz 000_Backup

我们将tgz压缩文件备份至电脑端,以后要用直接解压就很方便了。这时我们就可以删除设备存储中的000_Backup目录,释放空间。以后需要还原的时候我们只需要解压目录,将手机启动至Fastboot模式,在终端执行bat脚本即可。



备份分区列表的部分暂未更新!