本文将带你学会如何备份Android设备的字库文件(包含基带)。
如需观看视频教程可跳转本人视频。
一、什么是字库,为什么要备份字库?
字库可以简单理解为Android设备的分区。刷机时也会刷入分区,但刷入不完整。如果设备刚好是其他分区损坏了,那么即使线刷完整包也无法修复。所以为了预防特殊分区损坏、也为了预防不小心刷入格机模块(rm -rf /),玩机前我们需要自行备份Android设备的字库文件。
二、备份的前提条件
· 设备需获取Root权限
我选择使用Magisk获取Root权限,获取方式参考我的视频。当然,如果你没有获取Root权限,或者说连Bootloader锁都没有解开,那也没有必要备份字库,正常用就行,多一事不如少一事。
· 开启设备的USB调试
在开发者选项中打开。
· 给予Shell以Root权限
将设备连接至电脑,在终端进入adb shell(需提前拥有platform-tools,如何安装参考我的视频中安装驱动部分。首次使用设备会提示“是否给予Root权限”,给予即可。指令如下:
1 | adb shell |
· 在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脚本即可。
备份分区列表的部分暂未更新!