手动恢复MIUI备份数据

同样可以使用下面的方式恢复小米助手备份的数据,不过需要把小米助手备份的数据从bak所属的文件夹里面取出来再进行操作

问题描述

自用小米10 pro经常死机,于是打算恢复出厂设置,恢复之前进行了备份,有40G的数据,并且将MIUI/back/AllBackup文件夹备份至了电脑
可是当重置手机后,发现备份文件夹中没有descript.xml文件,所以无法将文件夹放回原有目录进行数据恢复,新建备份再替换也不行,因为没有上述配置文件,于是就想办法从单独bak文件和新建descript.xml两种方式入手进行恢复

注意:有些软件无法恢复,比如我的Chrome就无法恢复,不知道是备份出错还是什么原因

注意:恢复的APP会覆盖当前已经安装的APP,特别是聊天记录会覆盖当前已有的,所以请恢复前再次备份!!!

逐个恢复方式

  1. 新建一个app的备份(只选择一个APP即可)
  2. MIUI/back/AllBackup/备份文件夹中复制已备份文件的名称(xxxxx.bak)
  3. 将想要恢复的BAK数据重命名为上面复制的文件名(xxxxx.bak)
  4. 替换MIUI/back/AllBackup/备份文件夹中的原有文件(xxxxx.bak)
  5. 回到数据恢复界面
  6. 点击恢复

批量恢复(descript.xml)

批量恢复的思路是,自己重新生成descript.xml文件

  1. 新建一个备份(只选择一个APP即可)
  2. 编辑MIUI/back/AllBackup/备份文件夹中的descript.xml文件
  3. <packages>...<packages>中添加需要恢复的app数据,数据格式如下
    <package>
        <packageName>com.lingkou.leetcode</packageName>
        <feature>-1</feature>
        <bakFile>LeetCode(com.lingkou.leetcode).bak</bakFile>
        <bakType>2</bakType>
        <pkgSize>53026614</pkgSize>
        <sdSize>0</sdSize>
        <state>1</state>
        <completedSize>53025792</completedSize>
        <error>0</error>
        <progType>0</progType>
        <bakFileSize>0</bakFileSize>
        <transingCompletedSize>0</transingCompletedSize>
        <transingTotalSize>0</transingTotalSize>
        <transingSdCompletedSize>0</transingSdCompletedSize>
        <sectionSize>0</sectionSize>
        <sendingIndex>0</sendingIndex>
    </package>
    
    上方代码为格式化之后的代码,请勿使用格式化后的代码进行添加,否则无法识别
    一键生成descript.xml的脚本见下一部分
  4. 将需要恢复的bak文件放置到MIUI/back/AllBackup/备份文件夹
  5. 回到数据恢复界面
  6. 点击恢复
  7. 如果数据恢复的时候卡在某一项,说明无法恢复,删除无法恢复和已经恢复的bak文件再重新恢复即可

descript.xml生成脚本

脚本环境:Python 3.8.5

#coding:utf-8
import os

def bak_files_path(dir):
    #修改一:检查下面5处是否需要修改,尤其是最后两个需要进行检查
    bakVersion = "2"
    brState = "3"
    autoBackup = "false"
    device = "cmi"
    miuiVersion = "V12.5.3.0.RJACNXM"

    outputFile = dir + "/descript.xml"
    f = open(outputFile, 'w', encoding="utf-8")
    content = ""
    for root, dirs, files in os.walk(dir):
        print("当前操作目录: ", root)
        for file in files:
            try:
                content += "<package><packageName>%s</packageName><feature>-1</feature><bakFile>%s</bakFile><bakType>2</bakType><pkgSize>53026614</pkgSize><sdSize>0</sdSize><state>1</state><completedSize>53025792</completedSize><error>0</error><progType>0</progType><bakFileSize>0</bakFileSize><transingCompletedSize>0</transingCompletedSize><transingTotalSize>0</transingTotalSize><transingSdCompletedSize>0</transingSdCompletedSize><sectionSize>0</sectionSize><sendingIndex>0</sendingIndex></package>" % (file[file.index("(") + 1: file.index(")")], file)
            finally:
                # 跳过不规则文件
                continue
        template = "<?xml version='1.0' encoding='UTF-8' standalone='yes' ?><MIUI-backup><jsonMsg></jsonMsg><bakVersion>%s</bakVersion><brState>%s</brState><autoBackup>%s</autoBackup><device>%s</device><miuiVersion>%s</miuiVersion><date>1621923274164</date><size>61445281</size><storageLeft>192279056384</storageLeft><supportReconnect>true</supportReconnect><autoRetransferCnt>0</autoRetransferCnt><transRealCompletedSize>0</transRealCompletedSize><packages>%s</packages><filesModifyTime /></MIUI-backup>"%(bakVersion, brState, autoBackup, device, miuiVersion, content)
        f.write(template)
        f.close()
        # 只操作当前目录,不操作子目录
        print("descript.xml 生成完毕 ->", outputFile)
        return

# 修改二:在此处修改目录
bak_files_path("G:/djzhao/Mi10Pro/AllBackup/20210525_094444")

使用方式:

  1. 检查是否需要修改bakVersionbrStateautoBackupdevicemiuiVersion(如果不知道修改成什么,新建一个备份,查看新建备份的descript.xml文件中这几个变量的值)
  2. 修改bak_files_path参数路径为你需要生成descript.xml文件的目录
  3. 运行此脚本
  4. 将备份数据所在目录所有内容(.bakdescript.xml文件)放置到MIUI/back/AllBackup/备份文件夹
  5. 回到数据恢复界面,打开名称为"5月25日 下午2:14"的备份记录
  6. 点击恢复

小米备份太不省心了。小米助手也是,太不好用!!!

很多网友说,小米售后欠我工资,哈哈哈。

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐