浅谈REFS文件系统数据恢复研发经历(1)

发布时间 2023-07-10 11:32:28作者: NaExpress
作为80后技术员, 我一直很喜欢李玟, 是我们那个时代的偶像, 一直也很喜欢听他的歌, 看到她的噩耗, 还是很那么的无法理解, 一个那么好的人怎么会得抑郁症呢, 心里多少还是无法接受. 不过联想到自己的工作,多少次也都是在被技术难题折磨的快要到抑郁症犯的边缘上. 
 
作为数据恢复行业的从业者, 行业的技术发展实在是太快了, 几乎每年都会有新的技术出现, 无论是文件系统还是数据库等等, 每年都在推陈出新, 老旧的技术会被直接抛弃, 绝非是在原有技术上进行改良, 作为数据恢复产品作者, 你必须得更上这种升级速度, 而且前面对所有老旧技术的付出基本上算是白搞, 因为随着时间的发展, 这些老旧的技术会类似winxp系统一样淹没在历史的潮流中.
 
在现如今的三大操作系统windows, linux, mac os现在分别对应的最新的文件系统有refs, zfs, btrfs, apfs, 这些我都在产品中做了支持, 底层技术在我看来基本大同小异.  做这几个文件系统的恢复以及解析结束让我吃尽苦头,  他们与上一代文件系统存储技术是如此的不同, 上一代的文件系统结构例如fat, ntfs, ext234, ufs等等, 他们是如此的百花齐放, 个性分明, 你不太容易找到他们的共同点, 他们充斥着各种奇怪的结构和设计理念.
 
但是新一代的文件系统我能够明显的感觉到他们越来越同质化发展, 我虽然不敢保证他们彼此之间有互相抄袭, 但是我觉得至少在架构思路上互相彼此都在借鉴. 

 

 
 
 这次让我吃尽苦头的文件系统是refs, 作为新一代的桌面系统的文件系统, 我本以为他会跟apfs更加类似, 因此在查阅相关资料后, 我很就对refs的结构进行解析, 并且对相关数据进行定位, 刚开始的途中一直没有发现有什么问题. 并且说实话, 因为做了太多的数据库结构分析, 我很明显感觉到了, 他的MSB+ page结构是如此的类似于sql 的页面结构. 所以刚开始的时候, 我轻车熟路的一路分析下去. MSB+ page结构大致如图:
 
根据下图的结构, 可以从data area结构中提取到数据或者是REF参数跳转到子页面中提取数据.
 

 

根据下图的结构, 解析当我分析到checkpointer为止, 我都没有遇到问题. 直到到了object id table结构, 我遇到了前所未有的障碍. 居然找不到正确结构的MSB+了. 
 

 

未完待续...