安卓系统级备份与恢复:TWRP、adb shell、APP数据备份

注:以下内容仅面向小白及一般读者,作者仅为爱好者发言不具备权威性,若有错误(估计还不少,流汗滑稽)欢迎大家指出;且刷机有风险,作者不对刷机造成的任何潜在损失负责!

就在 9 个月前……

sh2.png

于是就咕了 9 个整月,嗯。

正好这不是换了红米 K30S 了嘛,正好用得上安卓系统的备份与恢复,毕竟玩机还是有风险的,砖的几率不小,万一真砖了还能留一手回天之术(流汗滑稽)。

请注意:本教程主要面向安卓系统级的备份与恢复、救砖过程,不涉及 app 级备份与恢复,不涉及高通 9008 恢复方式,不涉及联发科 SP TOOL 恢复方式,不涉及刷写硬件颗粒恢复方式;需要前置工作如下:1. 手机解锁 BL(Bootloader)锁并已经获取到 root 权限 2. 一台 PC(本例以 Windows 11 为例) 3. 一根 USB 数据线 4. 任何计算机与手机通信期间保持手机电量在 25% 以上且不能意外断连(手机 fastboot 期间不会向电池内充电!)

零、杂项

1. 查看手机 AB 分区状态

VAB 分区的各种系统级操作都稍微与非 VAB 分区不同,本文主要针对非 VAB 分区机型,但 VAB 分区用户也可以举一反三一下,操作大同小异。

2. 小米文件管理器开启临时 FTP

3. 设置 ADB 到 Windows 环境变量中

Why-cn:个人安卓刷机经验(附小米 6 刷机指南)之一 - 二 - 0 中,我省去了设置 ADB 环境变量的操作,不过鉴于在备份还原过程中可能出现多次 ADB 操作,设置 ADB 到环境变量中还是比较有用的。

一、TWRP 备份与恢复

本文默认手机已经安装了 TWRP 且获取了 root 权限(已安装 Magisk),不知道如何操作请移步:Why-cn:个人安卓刷机经验(附小米 6 刷机指南)之一

下文中所有的 “刷过机” 均定义为:“Why-cn:个人安卓刷机经验(附小米 6 刷机指南)之一 - 一 - 1 - 刷机是什么?” 中的刷机定义,但排除了单纯安装 TWRP 和 Magisk 这两项操作。即:未刷机的手机仅刷了 TWRP 和 Magisk,在下文中定义为 “未刷过机”,再进行其他刷机操作均定义为 “刷过机”

1. 挂载全部分区

在 TWRP 的挂载菜单中,挂载除 “外置 U 盘” 外的所有分区。

sh2.png

2. 执行备份

在 TWRP 的备份菜单中,先点选 “选项” 选项卡,选中“启用压缩”,这样能够让生成的备份文件小一点。根据个人喜好,可以选择加密与否。

sh2.png

回到 “备份” 选项卡,在 “选择要备份的分区” 中选择要备份的分区。以下列表展示了你可能遇到的分区选项:

sh2.png

  • 所有基带、蓝牙、WiFi 相关的分区都是不能够被 TWRP 备份和恢复的;线刷可能能够恢复这些分区,也可能恢复不了;这些分区一机一号,因为每个手机的 IMEI 号、MAC 地址等数据都是独一无二的。
  • 以上标 “不清楚” 的分区,线刷可能能恢复,也可能恢复不了;TWRP 刷可能能恢复,也可能恢复不了;总之这些分区在正常使用和轻度刷机是不会被修改的,但不排除特殊情况如刷入了恶意模组 / 刷机包。
  • 如果有当前系统的线刷包且 “未刷过机”,可以不用备份部分分区,如果系统遭到损坏直接通过线刷恢复或者解压线刷包中的对应镜像通过 TWRP 安装到对应分区即可。
  • 非 VAB 分区可能包含 super 分区,但 super 分区中不包含 recovery;VAB 分区必定包含 Super 分区且 Super 分区中必定包含 recovery。

sh2.png

选好之后,向右滑动最下方的滑块进行备份。

sh2.png

备份存储在选择的存储位置  TWRP<设备 ID>< 备份时间 > 文件夹下。最好将这个文件夹拷贝出来归档。这些文件只能通过 TWRP 恢复。

3. 执行恢复

将归档的备份文件放在手机的内部存储(sdcard 等)<设备 ID>< 备份时间 > 文件夹下,就像它们被创建时一样。如果不按照这种地址放,TWRP 会识别不到。你也可以插 OTG U 盘,但我不建议这么做。

sh2.png

点选要恢复的备份包,进入恢复页面,选中 “启用 Digest 校验备份文件”,防止文件在传输过程中出现错误导致恢复失败;然后向右滑动最下方滑块来进行恢复。

sh2.png

请注意:根据你备份时的状况,可能出现掉 TWRP、掉 Magisk 的情况发生。

二、基带备份与恢复(高通 QCN)

上文中说,基带相关的分区均无法通过 TWRP 备份和恢复,你或许可以这么操作,但迎接你的是卡第一屏;基带一机一码,就算线刷和 9008 也救不了掉基带;售后只会让你换主板。这么重要又危险的文件该如何备份呢?

高通设备可以通过高通工程工具 QPST(Qualcomm Product Support Tools)生成高通专用的 QCN 文件(Qualcomm Calibration Network File,高通网络校准文件)来对基带等敏感信息进行备份和恢复。以下为操作流程:

0. 准备工作

  1. 下载并安装最新版的 QPST 工具。

Download Archives - QPST Tool

选择最左上角的最新版本,点击进入下载页下载。

  1. 安装 QPST 工具。

1. 打开手机端高通调试端口

将手机连接电脑并打开开发者选项,打开 USB 调试(某些手机可能需要等待 10 秒,可以播放一曲小米圣经度过这难忍的等待时间),当手机弹出 “允许这台电脑进行 USB 调试吗” 选中一律允许并同意。

在电脑上打开命令提示符,输入

adb shell su setprop sys.usb.config diag,adb

来打开调试端口。

请注意:

  1. 此时 Magisk 会弹出 shell 获取超级用户的权限提醒,选择 “永久” 并允许。
  2. 如果手机弹出 “选择 USB 连接方式”,不要动,否则会覆盖掉刚才的设置
  3. 如果没反应,可能需要在手机上使用一些终端模拟设备来进行操作
  4. 如果调试端口打开成功,在 Windows 的设备管理器中会出现一个名为 “Qualcomm HS-USB Android DIAG 901D” 的端口设备

sh2.png

此时端口打开成功。

如果几次尝试均不成功,请搜索 “高通 USB 驱动” 并安装。

2. 使用 QPST 工具对 QCN 进行备份

打开 “QPST Configuration” 软件。如果端口打开且成功被软件探测到,则会在 “Active Phones” 处显示该机。本例中使用的红米 K30S 为高通骁龙 865 SoC,编码为 SM8250。

sh2.png

关掉 QPST Configuration,打开 “QFIL” 软件。

先点击右面的 “Select Port” 按钮,在弹出的窗口中选择刚才看到的端口,点击“OK”。

sh2.png

点击菜单栏的 “Tools”- QCN Backup Restore

sh2.png

选择一个地址保存,双卡机选中 “Enable Multi-SIM”,然后点击 “Backup QCN”。

sh2.png

下方 Status 开始滚动,说明程序开始备份。

sh2.png

然后——失败了。

查了一下,好像 865 的机型全都无法备份;但骁龙 625、660 机型均成功,故这个方法还是有一定可行性。

3. 使用 QPST 工具对 QCN 进行恢复

还是上面的方法,直到 “Backup QCN” 处,此时不点击 “Backup QCN” 而是点击 “Restore QCN” 进行恢复。

请注意:由于在酷安有人反映恢复后掉 IMEI 1,所以没出现掉基带的问题,不要随意恢复 QCN!

手机 USB 模式会在重新插拔 USB 线后恢复默认。

三、整个 ROM 备份与恢复

1. 备份

毕竟手机系统还是由数据组成,无法备份 QCN,我大不了把整个 ROM 全都备份了。

这里请出酷安大佬 @Rannki 开发的 “多系统工具箱”:

多系统工具箱 (com.example.ourom) - 应用 - 酷安

打开多系统工具箱,允许获得超级用户权限,点击左上角的 “三” 打开菜单,点击“字库备份与还原”。

sh2.png

具体操作和注意事项,作者已经很详尽地标明了:

sh2.png

sh2.png

大佬说的自行刷写 ROM,见下面的第四部分。

备份后的文件通常都比较大,因为这是从分区一比特一比特 dump 下来的;当初什么样,恢复后也是什么样,这样就算分区加密了也无所谓。特别提一句,备份出的文件中不含 data.img,也就是说 data 分区是不会被备份的。

sh2.png

建议将备份文件从手机中拷贝出来归档。

2. 恢复

还是用该 app 恢复即可。

我手机都砖了欸,根本进不去系统怎么办?

别急,就在刚才归档的文件夹内,找到 fastboot.bat 文件:

sh2.png

只要还没黑砖到 fastboot 都无法启动,将手机连接到电脑并重启到 fastboot 模式,执行该批处理文件就好。

再次感谢酷安大佬 @Rannki 开发的如此 NB 的工具!

四、线刷恢复与 img 刷入

线刷恢复可以恢复大部分因刷机造成的软件故障,但线刷不保证能够修复基带缺失、分区表改变等问题。获取线刷包,可以从手机厂商提供的地址,或者询问售后获得。

1. 小米系线刷恢复

[教程] 小米手机解 BL 锁、线刷详细教程,适用于小米全系列手机 - 小米社区

2. img 镜像文件刷入

从上文中多系统工具箱备份出来的文件,或者从线刷包解压出来的文件可以看出,大部分的文件都是 img 格式,这就是磁盘镜像文件,特点是其根据磁盘的二进制数据一分不差地复制并保存成一个单独的文件,不仅保留了数据,还保留了分区格式,甚至是数据为空的纯 0 字段,所以文件常常占用大小与原始分区大小一致。优点是恢复方便且完整,缺点是占用空间较大。

对于任意. img 文件,可以直接刷写至设备分区中,方法如下:

2.1 adb 刷入

将手机连接至电脑并重启到 fastboot 模式(关机状态下长按音量键减 + 电源键,或者在启动时长按音量键减),在保存. img 文件夹处打开命令提示符,输入:

fastboot flash <安卓目标分区> <.img文件文件名>

并按回车执行。比如要将一个名为 TWRP_3.6.0_Andriod11-RedmiK30S_apollo_Coolapk-mi_block_v3.1[RAM].img 的镜像文件刷入手机的 Recovery 分区,那么命令将是:

fastboot flash recovery “TWRP_3.6.0_Andriod11-RedmiK30S_apollo_Coolapk-mi_block_v3.1[RAM].img”

2.2 TWRP 刷入

首先将需要刷入的 img 文件放在手机内部存储中,以 / sdcard/download/TWRP_3.6.0_Andriod11-RedmiK30S_apollo_Coolapk-mi_block_v3.1[RAM].img 为例;

重启手机到 Recovery 模式,进入 TWRP,选择 “安装”,点击右下角 “刷入镜像”。

sh2.png

选中要刷入的镜像,点击之,进入刷入 Image 镜像页面,选择要刷入的目标分区:

sh2.png

向右滑动滑块,完成刷入。

2.3 终端刷入

由于安卓是一个高度集成化的 Linux 系统变体,我们可以借助 Linux 命令来刷入 img 镜像。

2.3.1 打开安卓终端

要执行 Linux 命令,首先要打开安卓终端。有以下几种办法:

  • ADB 法:手机开机进入 OS,打开 USB 调试,连接电脑,打开 PC 命令提示符输入
adb shell su

回车,此时手机上会弹出 shell 获取 root 权限的提示,永久允许。

sh2.png

  • TWRP 法:重启手机到 Recovery 模式进入 TWRP,点选高级 - 终端命令,

sh2.png

打开的页面即是已经获取了 root 权限的安卓终端。

sh2.png

  • 终端模拟器法:在手机中安装任意(来源可信的)终端模拟器,推荐 “MT 管理器” 自带的终端模拟器:

MT 管理器 (bin.mt.plus) - 应用 - 酷安

sh2.png

sh2.png

同样地,终端模拟器要运行超级用户权限的命令,也需要获得 root 权限。

这三种方法开启的终端基本相同,不过要注意连接了 shell 的 Windows 命令提示符不能再获取到 Windows 上的文件。

2.3.2* 寻找要刷入的真实分区

(请注意:这一步不是必须的;不同的手机分区软链接方式不同;本操作建议拥有一定 Linux 知识再继续)

由于 Linux 系统的文件特性,系统挂载的分区往往是真实分区的一个软链接,有点像 Windows 上的文件夹快捷方式,不过仍然会被系统认作为实际存在的分区。

输入命令显示所有软链接挂载的真实分区:

ls -al /dev/block/by-name

在输出中,最后面的一列给出了挂载分区 -> 真实分区的信息,如我们要找 Recovery 分区挂载的真实分区,那么就要找 recovery 字样:

sh2.png

可见挂载到 recovery 分区的真实分区为 / dev/block/sda28。

2.3.3 刷入镜像到分区

找到要刷入的分区,使用 dd 命令将 img 镜像文件写入该分区即可。还是在终端中,输入命令并执行:

dd if=<输入镜像> of=<输出分区>

还是以上面的例子为例,这里的命令为:

dd if=/sdcard/download/TWRP_3.6.0_Andriod11-RedmiK30S_apollo_Coolapk-mi_block_v3.1[RAM].img of=/dev/block/sda28

回车执行命令后重启,recovery 已经刷入了我们想要的镜像。

2.4 获取、备份 img 镜像

前面介绍了如何恢复 img 镜像到分区,那么如何生成这样的镜像呢?

在已知分区地址的情况下,可以用上面提到的终端执行 cat 命令来提取分区到镜像文件中。

cat <分区地址> > <输出镜像地址>

比如我想制作 super 分区的镜像 super.img 保存在手机内部存储空间 / Download/,可以用以下命令:

cat /dev/block/super > /sdcard/Download/super.img

当命令执行完成后,在手机内部存储空间 / Download / 下会出现刚才制作的 img 镜像。

除了这种方法,提取线刷包的 img 出厂镜像也可以。以红米 K30S 的 MIUI 稳定版 V12.5.8.0 线刷包为例,解压 tgz 线刷包获得一个 tar 压缩包,在该压缩包内部,打开 images 文件夹,里面有各种出厂 img 镜像可用:

sh2.png

五、TWRP 日常备份

日常使用(“未刷过机”)下,仅需要手动备份手机内部存储文件和通过 TWRP 备份 Data 分区即可。请注意 TWRP 是无法增量备份的,每次备份可以把上一次的备份删除。

如果改动过其他分区的文件(常见为 system, vendor, super 等,刷个模块就有可能发生改变),如果知道是哪个分区,再次备份该分区即可;如果不知道,可以都备份一下,然后对照生成的对应分区的. sha2 文件内容进行比较;如果内容相同,说明该分区没有发生变化,反之则发生了变化。对于一些敏感分区如 system,vendor,boot 等,应多留几个版本的备份,防止在一段时间后发生问题想恢复,却发现之前的备份已经被删除了。

sh2.png

六、免责声明及警告

刷机有风险,操作要谨慎!

备份并不是万金油,恢复不一定能完全修复问题,甚至可能完全无法修复问题,或造成更多的问题!

这里讲的方法只是为了让你在刷机路上多一条路,但不一定就是后路!

(我以前恢复 TWRP 备份就把原来能正常开机的手机刷成卡第一屏过,不过我自己清楚是怎么造成的,后来恢复回来了)

每次操作刷机前一定要清楚自己在干什么!不要信任和使用来历不明的工具、脚本、卡刷包和模块,一些恶意或伪造的模块会包含恶意代码,清除手机上的所有数据!导致线刷都救不回来的那种!

本文章(半经验半教程)主要是为了给给位玩家提供思路,请一定要在具备一定计算机知识、命令行操作经验、Linux 操作经验下再举一反三地执行;各软硬件条件及情况可能不同,以上的步骤不一定都能成功执行(尤其是二和四),部分命令可能需要根据实际情况修改(尤其是二和四);每次操作想好步骤、看清命令、做好回退准备,出了问题冷静思考挽救方法,寻求帮助描述好问题原因和现状。

!!!再次声明:作者仅为爱好者发言不具备权威性,不对刷机造成的任何潜在损失负责!!!

七、一些可以尝试的 App 备份工具

这些工具在取得 Root 权限后可以很方便地对 App 进行备份与更新,不过并不建议在任何情况下跨系统版本恢复、跨 ROM 恢复、跨安卓版本恢复,成功率依次递减。App 应常通过其内部备份来备份(比如导出设置、导出记录等),而不应一味地依赖第三方备份恢复工具——甚至是系统自带的工具,因为安卓应用在备份恢复过后偶发玄学失败问题,且一些应用依赖于机器 ID 等,在恢复后拒绝使用恢复的数据(某小而美等)。这里列举一些可以尝试的应用备份恢复工具,但不再写明操作方法。

7.1 由于钛备份不再更新,故不推荐使用钛备份。

7.2 【推荐】Swift Backup【支持云备份,授权也不贵,5美元】

Swift Backup - Google Play 上的应用

7.3 数据备份

数据备份 (com.xayah.databackup) - Beta-4.2.8 - 应用 - 酷安


欢迎指出任何有错误或不够清晰的表达,可以在下面评论区评论。

×

喜欢就点赞,疼爱就打赏

//