当前位置: 首页 > news >正文

成功恢复FAT32误格式化后所有碎片文件(已覆盖的除外)

[摘要]    接至沈阳寄过来的一个FAT32的10GB分区,存储某单位重要的文档(多为DOC和XLS),误格式化!之后客户想过若干种方法,也找过当地一些 数据恢复公司,客户称:用一些数据恢复软件进行恢复(猜测如FINAL DATA等工具),部分文件可找到名称,但恢复出来的数据无法打开,修复后也只能出来少部分数据。
[分析]
    1、接手后观察文件系统损坏情况,格式化前后文件系统结构相同,所以原FAT表全部清0,不可重现。试用几个数据恢复软件进行恢复,只有不到5个文件能够完全打开,还都是像请假条、通知一样的并不很重要的文档。这样可知,市面上所有软件均无法完好恢复。
    2、具体进行磁盘数据区,对原因进行确认。果然,大多数文件均不连续。(原因可能是因为这些重要的文档,像数据库一样频繁改动),直观上看,没有任何规律。格式化后因用户或先前的数据恢复商并未严格遵守不写盘的原则,直接在系统上挂盘,造成系统还原、缩略图、回收站等组件新占用了部分空间,约5000个簇(大约40M),基本占用分区最前边,所以这40M的恢复将很困难。
    3、逆向分析数据的存储过程,根据磁盘扇区的特征及文件内容特性,通过模糊比对算法是有可能进行处理的。但工作量巨大,鉴于客户数据重要,决定一试。
[恢复过程]
    1、通过之前写过的扇区类型分析程序进行扇区类型分析。形成A中间结果
    2、根据A中间结果中的目录节点,分析结构,重组模糊目录树。假设为B中间结果
    3、根据A与B中间结果,结合逆向数据存储过程算法,重建一FAT表。
    4、根据建好的FAT表,映射欲恢复数据的目录项,恢复后测试70%的文件已经恢复成功。
    5、对未成功恢复的文件进行分析,发现这些文件其跳跃性较大,所以程序很难自动分析处理。所以,手工进行分析。
    6、先前正确的文件很有助于进行分析,通过程序将这些不可能存储的空间在虚拟环境中剔除,再将A结果中不符合数据类型的空间剔除。余下的可形成C结果。
    7、针对单个文件,过滤掉存储位置在覆盖范围内的,再分析其特征,与C结果中进行比对,很快发现命中率很高,(此例中,多数文件100%命中),根据分析结构, 恢复数据。将恢复结果,写了一个小程序补充至C结果,减少分析范围和复杂度。
    8、继续第7步,如果有无法恢复的文件,暂时跳过。
    9、待所有文件均处理完成后,返回来再分析8步中遗留的文件,继续7-9步。完成后剩余2个文件还无法恢复。
    10、人工方式仔细分析最后的两个文件,根据簇之间的差异性,做出碎片的判断,经过很长时间的处理(比上面的要复杂得多)。终于恢复成功。两个文件均有4个不连续的碎片,恢复的难度很高。
    11、至此,所以未覆盖的文件100%恢复成功。
[后记]
一、 此例100%恢复也不是必然的,之所以可以完美解决,原因可能有:
        1、文件数目并不是很多,造成存储空间在特征上的复杂程序是有限的,磁盘空间也不很大;
        2、多数文件(尤其在同类型的文件上)表现的碎片还是有一定规律性的,比如客户需要的一个保险的目录,基本其下的所有重要文件都是两个 碎片,且第一个碎片多为1-2个簇,可能是客户先将空表建好后,才后续添入内容的。
        3、程序的自动分析的对关键结构的重建在恢复中起到了至关重要的作用。否则以人工的方式进行分析和恢复,几乎是不可能的。
二、同样的处理方式不光可应用于FAT误格式化,对于只剩下数据、没有文件系统痕迹的恢复同样可以尝试
[广告](转载时请保留)
    如遇相同问题,数据又特别重要,可以通过本文介绍的方式尝试恢复,如果无法自己写出程序或无法理解我的算法,可以联系我进行恢复: [email]zymail@vip.sina.com[/email](张宇) 或13522617215 。 数据恢复服务商在长期合作的前提下可享受代理价。




本文转自 张宇 51CTO博客,原文链接:http://blog.51cto.com/zhangyu/33856,如需转载请自行联系原作者

相关文章:

  • maya羽毛制作插件
  • 如何使用sendEmail发送邮件
  • TightVNC 企业内部部署
  • 请读者帮忙投个票喔
  • 网吧游戏的三层更新
  • DOM常用属性和方法汇总
  • 享元模式(Flyweight)解析例子
  • msdb.dbo.suspect_pages
  • apache做反向代理服务器
  • 家庭调解员
  • XSS 攻击实验 防御方案
  • ORACLE 笔记
  • 浅析重定向与反弹Shell命令
  • JS设置Excel格式
  • Windows系统磁盘分区详解
  • iOS动画编程-View动画[ 1 ] 基础View动画
  • Redash本地开发环境搭建
  • text-decoration与color属性
  • 不用申请服务号就可以开发微信支付/支付宝/QQ钱包支付!附:直接可用的代码+demo...
  • 从@property说起(二)当我们写下@property (nonatomic, weak) id obj时,我们究竟写了什么...
  • 前端技术周刊 2019-02-11 Serverless
  • 线上 python http server profile 实践
  • 小程序 setData 学问多
  • 用quicker-worker.js轻松跑一个大数据遍历
  • 在GitHub多个账号上使用不同的SSH的配置方法
  • 智能合约开发环境搭建及Hello World合约
  • #Linux(帮助手册)
  • $forceUpdate()函数
  • (14)学习笔记:动手深度学习(Pytorch神经网络基础)
  • (C++)栈的链式存储结构(出栈、入栈、判空、遍历、销毁)(数据结构与算法)
  • (Redis使用系列) SpringBoot 中对应2.0.x版本的Redis配置 一
  • (超简单)使用vuepress搭建自己的博客并部署到github pages上
  • (附源码)springboot 校园学生兼职系统 毕业设计 742122
  • (续)使用Django搭建一个完整的项目(Centos7+Nginx)
  • (幽默漫画)有个程序员老公,是怎样的体验?
  • (转) ns2/nam与nam实现相关的文件
  • (转)AS3正则:元子符,元序列,标志,数量表达符
  • (转)大型网站的系统架构
  • (转)树状数组
  • * CIL library *(* CIL module *) : error LNK2005: _DllMain@12 already defined in mfcs120u.lib(dllmodu
  • .NET 6 Mysql Canal (CDC 增量同步,捕获变更数据) 案例版
  • .NET/C# 将一个命令行参数字符串转换为命令行参数数组 args
  • .NET学习全景图
  • [100天算法】-目标和(day 79)
  • [2016.7.Test1] T1 三进制异或
  • [2023年]-hadoop面试真题(一)
  • [BZOJ 4129]Haruna’s Breakfast(树上带修改莫队)
  • [BZOJ2281][SDOI2011]黑白棋(K-Nim博弈)
  • [C#]winform部署yolov9的onnx模型
  • [CERC2017]Cumulative Code
  • [IE技巧] 使IE8以单进程的模式运行
  • [Json.net]快速入门
  • [LeetCode]—Rotate Image 矩阵90度翻转
  • [Linux]进程间通信(system V共享内存 | system V信号量)
  • [oeasy]python0002_终端_CLI_GUI_编程环境_游戏_真实_元宇宙