如何完全备份android在系统system分区和data分

安德鲁斯系统备份是非常的情况下,可以使用。下面的这个python脚本。它可以用来备份整个data分:所有data分区的文件和文件夹打包data.zip。并产生recovery专用edify脚本update-script.sh。

当然,备份system分区了,假设再加上几行代码,就能够备份boot,recovery,uboot等等分区。只是这要依据不同的分区来写不同的备份代码:

backup.py

import sys
import os
from os.path import join
from os import path
import zipfile
from zipfile import ZipFile

def packdir(dir,z,dirinfo,emptydirs,linkinfo):
    dirs = os.listdir(dir)
    if not dirs:
        emptydirs.append(dir)
    else:
        for d in dirs:
            absdir = join(dir,d)
            if not path.islink(absdir) and (path.isdir(absdir) or path.isfile(absdir)):
                break
        else:
            emptydirs.append(dir)

    for d in dirs:
        absdir = join(dir,d)
        st = os.lstat(absdir)
        info = [st.st_uid,st.st_gid,st.st_mode]
        if path.islink(absdir):
            info.append(absdir)
            linkdir = os.readlink(absdir)
            linkinfo[linkdir] = info
        elif path.isdir(absdir):
            dirinfo[absdir] = info
            packdir(absdir,z,dirinfo,emptydirs,linkinfo)
        elif path.isfile(absdir):
            dirinfo[absdir] = info
            os.utime(absdir,(1403408099,1403408099))
            z.write(absdir)
        else:
             print 'file type unknow %s'%(absdir,)

zi = ZipFile('data.zip','w',zipfile.ZIP_DEFLATED)
dirinfo = {}
emptydirs = []
linkinfo = {}
packdir('/data',zi,dirinfo,emptydirs,linkinfo)

f = open('update-script.sh','wb');

f.write('ifelse(is_mounted("/data"),unmount("/data"),0);\n')
f.write('format("ext4", "EMMC", "/dev/block/data", "0", "/data");\n')
f.write('mount("ext4", "EMMC", "/dev/block/data", "/data");\n')
f.write('package_extract_dir("data", "/data");\n')

mkdir_cmd = 'run_program("/sbin/busybox","mkdir","-p","'
mkdir_cmd += '","'.join(emptydirs)
mkdir_cmd += '");\n'

f.write(mkdir_cmd)

for key in dirinfo.keys():
    info = dirinfo[key]
    info = list(info)
    info.append(key)
    info = tuple(info)
    set_perm = 'set_perm(%d, %d, %d, "%s");\n'%info
    f.write(set_perm)

for key in linkinfo:
    info = linkinfo[key]
    info = tuple(info)
    symlink = 'symlink("%s", "%s");\n'%(key,info[3])
    set_perm = 'run_program("/sbin/busybox","chown","-h","install:install","%s");\n'%(info[3],)
    f.write(symlink)
    f.write(set_perm)

f.write('unmount("/data");')

f.close()
update_script='update-script.sh'
os.utime(update_script,(1403408099,1403408099))
zi.write(update_script)

zi.close()

怎样执行:

先要有root权限,另外,该脚本的执行依赖于python-for-android。

然后要将该包装脚本apk在。要么adb shell通过命令行运行。

版权声明:本文博客原创文章。博客,未经同意,不得转载。

时间: 2024-08-27 10:23:12

如何完全备份android在系统system分区和data分的相关文章

如何完全备份android系统上的system分区和data分区

安卓的系统备份在很多场合下可能会用到,下面这个python的脚本,可以用来备份整个的data分区:将所有data分区的文件和目录打包到data.zip,并生成recovery的专用edify脚本到update-script.sh.当然,简单的修改下脚本的备份路径就可以备份system分区了,如果再加上几行代码,就可以备份boot,recovery,uboot等等分区,不过这要根据不同的分区来写不同的备份代码: backup.py import sys import os from os.path

修改Android模拟器的system分区,以及加入SuperSU

  http://www.claudxiao.net/2013/10/persistent-change-emulator-system-partition/ 对Android的模拟器,如果要修改其system分区里的文件,除了remount之外,还需要对数据进行持久化--因为默认情况下emulator会以只读的形式加载system.img,即便remount之后对其进行的修改也不会实际被保存下来. 网络上提到多种解决这一持久化问题的方案.例如[1],将/system拷贝至清空后的/data分区

Android System分区大小异常

平台:Freescale / Android 4.2.2 问题描述: 用 df 命令,看到/system分区大小275M. 用 busybox fdisk -l /dev/block/mmcblk0p5,看到 536M. Freescale的刷机工具是Mfgtool,分区的动作在mksdcard-android.sh里面完成. SYSTEM_ROM_SIZE=512 dd if=/dev/zero of=${node} bs=1024 count=1 sfdisk --force -uM ${n

Android双系统实现

1. 前言: 刷机,似乎是安卓手机用户的一项专利,可是,会刷机的用户一般都是喜新厌旧的角色. 一个系统用久了.就想换到还有一个系统.或者认为没有原来的好,或者又认为要换回去.这样又要重刷. 可是刷来刷去都麻烦啊,而且每次刷机也不是没有风险的,一不小心就可能造成关键数据的丢失. 没有解决的方法吗? 有.双系统! 甚至三系统,四系统! ! 本文就是解决问题的,而且用本文中的方法,全然能够实现一键安装,一键卸载系统的功能.把系统的安装和卸载变成apk的安装和卸载一样简单. (说明下,以下的方法以三星i

理解 Android Build 系统

http://www.ibm.com/developerworks/cn/opensource/os-cn-android-build/ Android Build 系统是用来编译 Android 系统,Android SDK 以及相关文档的一套框架.众所周知,Android 是一个开源的操作系统.Android 的源码中包含了许许多多的模块. 不同产商的不同设备对于 Android 系统的定制都是不一样的.如何将这些模块统一管理起来,如何能够在不同的操作系统上进行编译,如何在编译时能够支持面向

Android log系统 转

Android log系统 light 2011/11/20 Android 系统log抓取,实现原理分析   一 概述 本文档主要是供Android开发人员使用,特别是Framework开发.因为Framework中95%以上的问题都是靠分析log解决的,所以开发人员必须对android整个log系统十分清楚.什么问题抓什么log, 使用什么工具抓Log,如何分析log, 如何在代码中添加log. 二DDMS log 关于ddms是如何工作的和ddms的详细功能,见下面android sdk中

Android 获取系统或SDCARD剩余空间信息(转)

android.os下的StatFs类主要用来获取文件系统的状态,能够获取sd卡的大小和剩余空间,获取系统内部空间也就是/system的大小和剩余空间等等.      看下读取sd卡的:Java代码 1 void readSDCard() { 2 String state = Environment.getExternalStorageState(); 3 if(Environment.MEDIA_MOUNTED.equals(state)) { 4 File sdcardDir = Envir

【转】理解 Android Build 系统----不错

原文网址:http://www.ibm.com/developerworks/cn/opensource/os-cn-android-build/ Android Build 系统是用来编译 Android 系统,Android SDK 以及相关文档的一套框架.众所周知,Android 是一个开源的操作系统.Android 的源码中包含了许许多多的模块. 不同产商的不同设备对于 Android 系统的定制都是不一样的.如何将这些模块统一管理起来,如何能够在不同的操作系统上进行编译,如何在编译时能

查看Android设备上的分区信息

Android设备上,一般都会存在一块eMMC存储芯片来存放系统和用户数据,甚至部分的引导程序. 一般设备出厂时,各个厂商都会将这块存储芯片分成很多的分区,每个分区内存放不同的内容.具体分区的布局每个厂商或者芯片供应商都会不一样. 可以通过下面的命令来查看目前系统中到底有多少分区:(项目车机上) cat /proc/partitions 如果想知道每个挂载到文件系统上的分区大小和使用情况的信息,可以像普通Linux一样使用:df -h 不过df命令只显示了在文件系统上的挂载点,并没有显示对应的块