
故障存储:
8GB TF卡/MS fat32文件系统/簇大小:4KB
故障现象:
客户描述此卡被手机APP格式化后重新使用了一小段时间,卡的剩余空间还有7G(如图1),可以看出来卡格式化后写入的数据不算多,理论上讲大多数的视频文件应该是可以恢复的。
图1:卡的剩余空间还有7G
故障分析:
小米的智能摄像头之前处理过不少,基本上规律如下:
1、1分钟生成一个文件。
2、文件格式为MP4,新式摄像头一般使用HVC高清编码。
3、采用的方案是在生成当前MP4文件结构体时,已经在采集新的视频画面数据,此时会导致两个文件碎片交叉。
下边我们聊下小米智能摄像头的恢复难点:
第1个难点:在于第3条,碎片化的文件。这种设计理念会随着写入文件的数量的增加导致碎片化机率暴增,最后小到一个碎片仅有一簇大小,这个就是文件系统的极限了。由于视频文件的结构体和数据区是分开的,所以过于碎片化的文件会导致“音视频”数据区交叉,小米智能摄像机视频编码为HVC音频编码为M4A,都是压缩算法,所以根本没有任何规律而言(有规律的一定是结构体而不是数据本身)。在这种极端情况下使用CHS零壹视频恢复程序高级版也可以恢复出数据,但是很显然在这种情况下程序是无法判断所有碎片的归属关系的,这个时候恢复就需要手工介入,根据恢复时的经验来定数据在进行判断。
第2个难点:则是簇大小,我们恢复小米智能摄像机遇到的最多的文件系统是exfat,簇大小普遍为32KB(如图2),但是这个案例中由于存储卡比较小的原因,使用的是FAT32文件系统簇大小为4K(已经是WIN下自动选择最小的簇大小了),这个也能理解毕竟卡小过大的簇会导致浪费,但是更小的簇容量对应的却是不变的HVC视频编码,这个时候碎片的数量只会比32KB的更多,理论上讲至少难度提升了8倍。
需要注意的是,我们说的难点是文件系统底层方面的,并非逻辑层,做为设备厂商小米的管理方案是很优秀的,安全性和稳定性个人认为属于国内第一梯队。而厂商关注的点肯定是逻辑层,至于exfat和fat32文件系统如何存储数据,这个是文件系统底层的事情。
图2:1.9M的文件在32K簇大小情况下竟然有40个碎片(注:配图和簇参数为其它案例)
故障处理:
根据这种复杂的情况,通用型的恢复软件是无法恢复的,原理如下:
1、删除或者格式化后FAT32或者exfat 都会对FAT表进行清0,清0后存在碎片的文件是无法得到有效的链表的,没有链表就无法得到准确的数据。
2、由于文件不连续存放,所以此时通用型恢复软件只能采用起始簇指针+文件长度进行“野蛮定位”,最终数据全部错误无法播放(如图3)。
图3:通用的恢复软件对于碎片化的文件无能为力
说了这么多难道真的没有办法恢复了?办法有,我们看图说话(如图4),之前的案例解释的很清楚了感兴趣的小伙伴可以爬楼观看,这里只简述就不再码字了 :-) :-) :-)
目录项中有文件起始簇和文件长度, 通过这两项可以定位文件头所在,并且可以获取到文件大小,这些很重要,相等于做了一个初步定位。剩下的精细定位就需要靠经验来判断了,如果实在判断不出来(比如两个视频帧数据交叉了),只能用穷举法来一个个去试。基于这种恢复理念,碎片数量越多工作量越大。
图4:视频、音频帧数据存在碎片的简略图
直接请出我们之前编写的“MOOV视频RAW级重组程序“,程序的精度和便利度已经很好了,所以直接处理即可,目前此程序已经迭代到V2.0了,增加了目录自动处理以、全局分析、扫描结果自动保存和加载等功能,算法上一直在向更好的方向发展,之前只是为了解决这种问题写的一个比较简陋的程序经过近两年的补充目前却快长成了参天大树,有些算法的提出到实现经历了“不可能”到“可以更好”的过程。这些算法在前阵子在另一个大型设备恢复中起到了巨大的作用,这或许就是数据恢复的魅力所在!
当然这个程序目前还仅仅是停留在半自动状态,因为多碎片的问题本身就“不可能”自动化解决,我们是在这种“不可能”中去寻求“效果极佳”的恢复方案!同时在这里也回答一个很多朋友的问题,这款程序不会公开发布,因为它不具备自动化恢复的要素。
图5:MOOV视频RAW级碎片重组程序已经迭代到2.0
下图为恢复效果,20个文件播放没有任何问题,视频帧及音频帧全部正常,基于2.0程序的帮助效率比之前要提升了不少。
图6:重组好的部分视频文件
这就是小米智能摄像机格式化后重新写入后的恢复方法,对于此类智能摄像头,CHS恢复的效果可以做到取证级别:确保每一帧声音、画面都100%正常,目前成功助力各大公检法机构的取证需求,大家在遇到此类问题时,欢迎和我们联系!