玩机有风险,刷机需谨慎!!!

本文将带你学会如何备份Android设备的字库文件(包含基带)。

如需观看视频教程可跳转本人视频,文章、视频如有错误,欢迎指出!

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

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

1
2
3
基带分区
高通机型:fsg,fsc,modemst1,modemst2
联发科机型:nvram,nvdata,nvcfg,persist,protect1,protect2,seccfg

请注意!!!如果是高通机型,可直接使用本文的命令,如果是联发科机型,请将下面命令中的/dev/block/bootdevice/by-name修改为/dev/block/by-name

备份字库

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

备份的前提条件

· 设备需获取Root权限

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

· 开启设备的USB调试

在开发者选项中打开。

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

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

· 给予Shell以Root权限

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

1
2
adb shell
su

备份流程

· 创建工作目录

首先,我们在设备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

然后我们给它打包一下:

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

等处理完,我们就可以在sdcard根目录下就可以看到PartitionBackup.tgz,我们将tgz压缩文件备份至电脑端,以后要用直接解压就很方便了。到此为止,备份工作结束,我们可以删除设备存储中的000_Backup目录,释放空间。

恢复字库

当我们的设备分区损坏后,我们就可以通过我们备份的分区进行修复。我们只需要解压备份文件,将手机启动至Fastboot模式连接电脑,在终端执行我们备份文件中的002_Restore.bat脚本,我们备份的分区就会被写入设备,写完后我们再线刷一下官方线刷包,格式化data分区后就可以正常开机进系统了!
如果批量恢复后设备系统还是有问题,可以尝试在fastboot模式下擦除某分区,然后手动刷入该分区的备份,当然这么做有很大的风险。

擦除某分区

1
fastboot erase 分区名称

刷写某分区

1
fastboot flash 分区名称 用户刷写的文件路径

【本文完】

参考资料:
维基百科
百度百科
MIUI历史版本
极客Root站