步骤一:导出分区原始数据,生成img文件。

经过多年迭代,F2FS文件系统越来越稳定可靠。目前被大量地运用到Android中,用于存放用户数据(userdata分区)。而随着硬件成本的降低,手机中存储的容量也在激增,甚至达到了1T的容量。另外一方面,为了提升用户数据的安全性,Google也在Android中引入了用户数据加密的特性。这些都为分析用户数据分区增加了障碍。

由于用户数据分区(userdata分区)过大,如果我们把它完整导出来需要花费巨大的人力、物力。一个是需要准备足够大的磁盘,另外则是需要等待较长的时间。但是,对于F2FS分区,我们一般不会这么做。由于F2FS的文件系统元数据(metadata)只存放于分区开头。我们的问题如果只是涉及到分析这部分,那么我们只需要导出超过元数据(metadata)大小即可。例如,对于100G大小的分区,我们只需要导出前面1G就远远足够了。

目前,用于对整个分区进行加密的方法有两种。一种是采用内联加密,另外则是使用device-mapper来实现。如果是第一种内联加密的方式,只要分区进行了解密动作。那么,我们直接读取该块设备的设备节点即可获得解密后的数据。而Android对用户数据(metadata分区)的解密动作分为两段。最后一段是发生在开机输入用户秘钥解锁手机的阶段。所以,我们可以在解锁屏幕后,使用以下命令导出数据:

# dd if=/dev/block/by-name/userdata of=./userdata.bak bs=512M count=2

而对于使用了device-mapper技术进行加解密的。则我们需要找到经过device-mapper层后的块设备节点。寻找device-mapper层的挂载节点可以通过执行如下指令获得:

# cat /proc/mounts | grep data
/dev/block/dm-5 /data ext4 rw,lazytime,seclabel,nosuid,nodev,noatime,discard,noauto_da_alloc,errors=panic,data=ordered 0 0

然后,我们就可以使用如下指令把用户数据导出来:

# dd if=/dev/block/dm-5 of=./userdata.bak bs=512M count=2

而后,这里还存在一个问题,那就是这个导出来的用户数据分区(userdata)可以存在哪里。我这里提供两个选择,一个是直接把它存在用户数据分区(userdata)中;另外一个则是新建一个tmpfs分区,然后把导出来的数据存在其中。可以使用如下指令挂载一个tmpfs分区:

# mkdir /mnt/tmpfs
# mount -t tmpfs tmpfs /mnt/tmpfs

步骤二:使用dump.e2fs工具,分析文件系统的super block、checkpoint信息。

为方便分析,当把用户数据分区(userdata)导出来后,我们可以把分区数据给传送到电脑上。采用如下命令即可:

# adb pull /data/userdata.bak ./

这时候,我们就可以请出我们的分析工具dump.e2fs了。它静静地躺在编译后的AOSP源码目录下:

./out/host/linux-x86/bin/dump.f2fs

我们直接执行它,即可得到如下帮助信息:

chenyuwen@chenyuwen-Precision-T1700:/mnt/mydisk/AOSP$ ./out/host/linux-x86/bin/dump.f2fs Error: Device not specifiedUsage: dump.f2fs [options] device
[options]:-d debug level [default:0]-i inode no (hex)-n [NAT dump nid from #1~#2 (decimal), for all 0~-1]-s [SIT dump segno from #1~#2 (decimal), for all 0~-1]-S sparse_mode-a [SSA dump segno from #1~#2 (decimal), for all 0~-1]-b blk_addr (in 4KB)-V print the version number and exit

这帮助信息简单明了。通过不同的参数,可以导出文件系统的NAT、SIT、和SSA信息等。参数后面跟一个数字范围,代表需要导出的信息的范围。当使用参数0~-1的时候,即可导出所有的信息。例如,导出所有的NAT信息:

# dump.f2fs -n 1~-1 ./userdata.bak

执行这个指令之后,就会在当前目录下生成一个dump_nat文件。使用vim打开它,即可查看。

在Android系统中,F2FS 文件系统问题分析步骤相关推荐

  1. Android系统中固件崩溃后使用uevent机制重新加载固件 流程分析

    [前言] Android系统为了保证各商业公司的利益,允许在系统中使用不开源的固件.因此我们可以看到比如用于音频处理的.用于键盘支持的等等大量固件.既然这么多模块要用到固件,那么我们也有必要来了解一下 ...

  2. Android系统中的Binder通信机制分析(7)- Java 层的 Binder 机制

    声明 其实对于Android系统Binder通信的机制早就有分析的想法,记得2019年6.7月份Mr.Deng离职期间约定一起对其进行研究的,但因为我个人问题没能实施这个计划,留下些许遗憾- 文中参考 ...

  3. Android系统中震动器服务-VibratorService的分析,从App层到硬件抽象层(HAL层)

    简介: VibratorService是Android系统中的一个服务,作用是设置手机震动.Vibrator,即震动器,或者称之为马达,在真实的设备中,对应有一个小马达,是安装在手机里的硬件设备. A ...

  4. Android系统中的进程管理:进程的创建

    对于操作系统来说,进程管理是其最重要的职责之一. 考虑到这部分的内容较多,因此会拆分成几篇文章来讲解. 本文是进程管理系统文章的第一篇,会讲解Android系统中的进程创建. 本文适合Android平 ...

  5. Android系统中的进程管理:进程的优先级

    本文是Android进程管理系列文章的第二篇,会讲解进程管理中的优先级管理. 进程管理的第一篇文章:<进程的创建>请跳转至这里. 本文适合Android平台的应用程序开发者,也适合对于An ...

  6. android流量控制的实现,Android系统中P2P应用数据包捕获及流量控制研究

    摘要: P2P应用产生的流量正大肆吞噬着网络带宽,增加了网络运营商的管理压力.同时随着以Android为主的移动设备用户群变得越来越庞大,相应的流量吸费问题也随之产生,特别是Android手机上的P2 ...

  7. android启动流程之lk,Android系统之LK启动流程分析(一)

    1.前言 LK是Little Kernel的缩写,在Qualcomm平台的Android系统中普遍采用LK作为bootloader,它是一个开源项目,LK是整个系统的引导部分,所以不是独立存在的,但是 ...

  8. 【Android 逆向】修改运行中的 Android 进程的内存数据 ( Android 系统中调试器进程内存流程 | 编译内存调试动态库以及调试程序 )

    文章目录 一.Android 系统中调试器进程内存流程 二.编译内存调试动态库以及调试程序 三.博客资源 一.Android 系统中调试器进程内存流程 修改游戏运行中的内存 , 游戏运行之后 , 游戏 ...

  9. 【Android 逆向】Android 权限 ( Android 逆向中使用的 android.permission 权限 | Android 系统中的 Linux 用户权限 )

    文章目录 一.Android 逆向中使用的 android.permission 权限 二.Android 系统中的 Linux 用户权限 一.Android 逆向中使用的 android.permi ...

  10. Android 系统中 Location Service 的实现与架构

    定位服务是移动设备上最常用的功能之一,本文以 Android 源码为基础,详细分析了 Android 系统中定位服务的架构和实现. 在 Android 系统中,所有系统服务的实现都是类似的.只要明白其 ...

最新文章

  1. PostgreSQL学习笔记(1)
  2. java vertx http_佛系学习Vert.x之创建你的HttpServer
  3. matlab 计算大型距离方阵,distance matrix
  4. python下载完以后是什么样子_python下载后怎么用
  5. Flex与后台交互的4种方法
  6. 史上最全推荐系统传统算法合集
  7. Hive _分桶及抽样查询
  8. dbname, instance, sid
  9. ssas还原数据库_SSAS数据库管理
  10. MUSIC算法的参数设置
  11. 一个将汉字转换成拼音的npm包
  12. 攒机笔记二十二:台式组装机(2022.9)
  13. 四川大学计算机专业调剂,2019年四川大学计算机学院(软件学院)考研调剂信息
  14. 在虚幻引擎4中播放视频文件超详细教程
  15. 《30天自制操作系统》从入门到放弃
  16. 推荐4款最好用的远程桌面访问软件,亲测好评
  17. 常用CV数据集(持续更新中)
  18. Java中计算处理中文两个字符长度问题解决(中文2个字符,英文1个字符)
  19. 如何将项目代码放到github上
  20. OJ C++ 今夕是何年(判断闰年)

热门文章

  1. 阵列信号处理仿真一——延时求和滤波器
  2. 软件测试用例设计练习
  3. sql连接本地数据库
  4. android svg 编辑器,Android svg 格式使用小结
  5. svnadmin hotcopy
  6. 【涡动协方差及能量平衡系统】
  7. 数据库迁移工具-kettle下载
  8. 结构化技术写作标准之S1000D——缘起
  9. 西门子S7200PLC连接CHNet-S7200PD实现以太网通信配置方法
  10. PMP考试提分必刷题