作为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+了. 
 

未完待续...

浅谈REFS文件系统数据恢复研发经历(1)的更多相关文章

  1. 浅谈Linux文件系统

    Linux 与其他类 UNIX 系统一样并不区分文件与目录:目录是记录了其他文件名的文件.使用命令 mkdir 创建目录时,若期望创建的目录的名称与现有的文件名(或目录名)重复,则会创建失败. Lin ...

  2. 浅谈个人学DP的经历和感受

    动态规划的定义! 首先,我们看一下官方定义:定义:动态规划算法是通过拆分问题,定义问题状态和状态之间的关系,使得问题能够以递推(或者说分治)的方式去解决.动态规划算法的基本思想与分治法类似,也是将待求 ...

  3. 浅谈算法和数据结构: 七 二叉查找树 八 平衡查找树之2-3树 九 平衡查找树之红黑树 十 平衡查找树之B树

    http://www.cnblogs.com/yangecnu/p/Introduce-Binary-Search-Tree.html 前文介绍了符号表的两种实现,无序链表和有序数组,无序链表在插入的 ...

  4. pb传输优化浅谈

    在正式切入今天要谈的优化之前,先碎碎念一些自己过去这几年的经历.很久没有登录过博客园了,今天也是偶然兴起打开上来看一下,翻看了下自己的随笔,最后一篇原创文章发布时间是2015年的4月,今天是2017年 ...

  5. 【转】浅谈分布式服务协调技术 Zookeeper

    非常好介绍Zookeeper的文章, Google的三篇论文影响了很多很多人,也影响了很多很多系统.这三篇论文一直是分布式领域传阅的经典.根据MapReduce,于是我们有了Hadoop:根据GFS, ...

  6. 浅谈FPGA

    浅谈FPGA 前言 生活中永远都不会缺少「 为什么 」,于最近就被合胜学长了,问了一个看似简单却又极具意义的问题,为什么需要FPGA?FPGA与单片机的区别是什么?瞬间刷新了我入门三天FPGA的冲击感 ...

  7. 浅谈数据库系统中的cache(转)

    http://www.cnblogs.com/benshan/archive/2013/05/26/3099719.html 浅谈数据库系统中的cache(转)   Cache和Buffer是两个不同 ...

  8. 浅谈原子操作、volatile、CPU执行顺序

    浅谈原子操作.volatile.CPU执行顺序 在计算机发展的鸿蒙年代,程序都是顺序执行,编译器也只是简单地翻译指令,随着硬件和软件的飞速增长,原来的工具和硬件渐渐地力不从心,也逐渐涌现出各路大神在原 ...

  9. 【Fiori系列】浅谈SAP Fiori的设计美感与发展历程

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[Fiori系列]浅谈SAP Fiori的设计美 ...

  10. [转] [知乎] 浅谈Roguelike

    浅谈Roguelike 从柏林诠释说起 在2008年召开的国际Roguelike开发会议上,众多的Roguelike开发者与爱好者共同制定了<柏林诠释>,规定了Roguelike游戏需要具 ...

随机推荐

  1. Spring Boot 整合 Kafka

    Kafka 环境搭建 kafka 安装.配置.启动.测试说明: 1. 安装:直接官网下载安装包,解压到指定位置即可(kafka 依赖的 Zookeeper 在文件中已包含) 下载地址:https:// ...

  2. day93:flask:Cookie&Session&请求钩子&捕获错误&上下文&Flask-Script

    目录 1.HTTP的会话控制 2.Cookie 3.Session 4.请求钩子 5.捕获错误 6.上下文:context 7.Flask-Script 1.HTTP的会话控制 1.什么是会话控制? ...

  3. 最新版新款影视直播粉红色UI的CMS源码/带教程/支付已接

    demo软件园每日更新资源,请看到最后就能获取你想要的: 1.最新版新款影视直播粉红色UI的麻豆CMS源码/带教程/支付已接 基于苹果CMS v10影视系统框架开发的前端模板,带会员中心,可设置试看付 ...

  4. Django框架——可视化界面之数据增删改查、Django请求生命周期、Django路由层、反向解析

    可视化界面之数据增删改查 针对数据对象主键字段的获取可以使用更加方便的 obj.pk获取 在模型类中定义双下str方法可以在数据对象被执行打印操作的时候方便的查看 ''' form表单中能够触发调剂动 ...

  5. windows查看占用端口

    1. 查看占用 执行:netstat -ano 或者 netstat -aon|findstr 8080 2. 查看指定 PID 的进程 tasklist|findstr 3104 3. 结束进程 t ...

  6. react 兄弟组件传值(发布订阅,使用于任何组件传值,包括vue)

    react中兄弟组件传值常规操作一般是,A组件传给父组件,父组件再传给B组件 非常规操作 利用  pubsub-js 在Home组件内调用 PubSub.publish("第一个参数是事件名 ...

  7. ECharts 环形饼图配置

    官网文档:https://echarts.apache.org/zh/option.html#series-pie.type 使用案例指导:https://echarts.apache.org/zh/ ...

  8. TED--10 ways to have a better conversation

    10 ways to have a better conversation All right, I want to see a show of hands: how many of you have ...

  9. Spring源码:Bean的生命周期(二)

    前言 让我们继续讲解Spring的Bean实例化过程.在上一节中,我们已经讲解了Spring是如何将Bean定义加入到IoC容器中,并使用合并的Bean定义来包装原始的Bean定义.接下来,我们将继续 ...

  10. MAUI开发Android程序使PDA扫码广播消息转发至Web页面

    前言 公司系统的手持终端(PDA)是用的Vue写的前端代码 在PDA上用浏览器直接打开Web页面 PDA扫码的时候,输出模式直接用模拟键盘按键的方式输出 这样在Web页面上,如果一个输入框在当前有焦点 ...