一、鼠鼠告诉你什么是数据恢复

当存储介质出现损伤或由于人员误操作、操作系统本身故障所造成的数据看不见、无法读取、丢失。工程师通过特殊的手段读取却在正常状态下不可见、不可读、无法读的数据。

二、数据恢复原理
零磁道,MBR和分区表DPT:
零磁道处于硬盘上一个非常重要的位置,硬盘的主引导记录区(MBR)就在这个位置上。零磁道一旦受损,将使硬盘的主引导程序和分区表信息遭到严重破坏,从而导致硬盘无法自举。
MBR:
当通过Fdisk或其他分区工具对硬盘进行分区时,分区软件会在硬盘0柱面0磁头1扇区建立MBR(Main Boot Record),即为主引导记录区,位于整个硬盘的第一个扇区,在总共512字节的主引导扇区中,主引导程序只占用了其中的446个字节,64个字节交给了DPT(Disk Partition Table硬盘分区表),最后两个字节(55 AA)属于分区结束标志。主引导程序的作用就是检查分区表是否正确以及确定哪个分区为引导分区,并在程序结束时把该分区的启动程序调入内存加以执行。
DPT:
分区表DPT(Disk Partition Table),把硬盘空间划分为几个独立的连续的存储空间,也就是分区盘中的分区数量,每个分区的起始及终止扇区、大小以及是否为活动分区等。
通过破坏DPT,即可轻易地损毁硬盘分区信息。分区表分为主分区表和扩展分区表。
主分区表位于硬盘MBR的后部。从1BEH字节开始,共占用64个字节,包含四个分区表项,这也就是为什么一个磁盘的主分区和扩展分区之和总共只能有四个的原因。每个分区表项的长度为16个字节,它包含一个分区的引导标志、系统标志、起始和结尾的柱面号、扇区号、磁头号以及本分区前面的扇区数和本分区所占用的扇区数。其中”引导标志”表明此分区是否可引导,即是否活动分区。当引导标志为”80″时,此分区为活动分区;”系统标志”决定了该分区的类型,如”06″为DOS FAT16分区,”0b”为DOS FAT32分,”63″为UNIX分区等;起始和结尾的柱面号、扇区号、磁头号指明了该分区的起始和终止位置。
分区表项的16个字节分配如下:
第1字节: 引导标志 
第2字节: 起始磁头
第3字节: 低6位为起始扇区, 高2位与第4字节为起始柱面
第4字节: 起始柱面的低8位
第5字节: 系统标志
第6字节: 终止磁头
第7字节: 低6位为终止扇区, 高2位与第8字节为终止柱面
第8字节: 终止柱面的低8位
第9-12字节: 该分区前的扇区数目
第13-16字节: 该分区占用的扇区数目
扩展分区作为一个主分区占用了主分区表的一个表项。在扩展分区起始位置所指示的扇区(即该分区的第一个扇区)中,包含有第一个逻辑分区表,同样从1BEH字节开始,每个分区表项占用16个字节。逻辑分区表一般包含两个分区表项,一个指向当前的逻辑分区,另一个则指向下一个扩展分区。下一个扩展分区的首扇区又包含了一个逻辑分区表,这样以此类推,扩展分区中就可以包含多个逻辑分区。为方便说明,我们把这一系列扩展分区和逻辑分区分别编号,主扩展分区为 1号扩展分区,第一个逻辑分区表所包含的两个分区分别标为 1号逻辑分区和 2号扩展分区,依次类推。
主分区表中的分区是主分区,而扩展分区表中的是逻辑分区,并且只能存在一个扩展分区。
FS即文件系统,位于分区之内,用于管理分区中文件的存储以及各种信息,包括文件名字,大小,时间,实际占用的磁盘空间等。windows 目前常用的文件系统包括FAT12,FAT16,FAT32和NTFS系统。
DBR(Dos Boot Record)是*作系统引导记录区。它位于硬盘的每个分区的第一个扇区,是*作系统可以直接访问的第一个扇区,它一般包括一个位于该分区的*作系统的引导程序和相关的分区参数记录表。
簇,是文件系统中最小的数据存储单元,由若干个连续的扇区组成,硬盘的扇区的大小是512字节(几乎是用于所有的。分区表DPT则以80H或00H为开始标志,以55AAH为结束标志。分区表决定了硬盘),也就是既是一个字节的文件也要分配给它1个簇的空间,剩余的空间都被浪费了,簇越小,那么对小文件的存储的效率越高,簇越大,文件访问的效率高,但是浪费空间比较严重。
FAT(file allocation table)即文件分配表,记录了分区中簇的的使用情况,FAT表的大小与硬盘的分区的大小有关,为了数据安全起见,FAT一般做两个, 二FAT为第一FAT的备份,用于FAT12,FAT16,和FAT32文件系统。
DIR是DIRECTORY即根目录区的简写,根目录区存储了文件系统的根目录中的文件或者目录的信息(包括文件的名字,大小,所在的磁盘空间等等),FAT12,FAT16的DIR紧接在第二FAT表之后,而FAT32的根目录区可以在分区的任何一个簇。
MFT(Master File Table)是NTFS中存储有关文件的各种信息的数据结构,包括文件的大小,时间,所占据的数据空间等等。

三、数据恢复方法
  • 分区
硬盘存放数据的基本单位为扇区,我们可以理解为一本书的一页。当我们装机或买来一个移动硬盘,第一步便是为了方便管理--分区。无论用何种分区工具,都会在硬盘的第一个扇区标注上硬盘的分区数量、每个分区的大小,起始位置等信息,术语称为主引导记录(MBR),也有人称为分区信息表。当主引导记录因为各种原因(硬盘坏道、病毒、误操作等)被破坏后,一些或全部分区自然就会丢失不见了,根据数据信息特征,我们可以重新推算计算分区大小及位置,手工标注到分区信息表,“丢失”的分区回来了。
  • 文件分配表
为了管理文件存储,硬盘分区完毕后,接下来的工作是格式化分区。格式化程序根据分区大小,合理的将分区划分为目录文件分配区和数据区,就像我们看得小说,前几页为章节目录,后面才是真正的内容。文件分配表内记录着每一个文件的属性、大小、在数据区的位置。我们对所有文件的操作,都是根据文件分配表来进行的。文件分配表遭到破坏以后,系统无法定位到文件,虽然每个文件的真实内容还存放在数据区,系统仍然会认为文件已经不存在。我们的数据丢失了,就像一本小说的目录被撕掉一样。要想直接去想要的章节,已经不可能了,要想得到想要的内容(恢复数据),只能凭记忆知道具体内容的大约页数,或每页(扇区)寻找你要的内容。我们的数据还可以恢复回来。
  • 删除
我们向硬盘里存放文件时,系统首先会在文件分配表内写上文件名称、大小,并根据数据区的空闲空间在文件分配表上继续写上文件内容在数据区的起始位置。然后开始向数据区写上文件的真实内容,一个文件存放操作才算完毕。
删除操作却简单的很,当我们需要删除一个文件时,系统只是在文件分配表内在该文件前面写一个删除标志,表示该文件已被删除,他所占用的空间已被“释放”, 其他文件可以使用他占用的空间。所以,当我们删除文件又想找回他(数据恢复)时,只需用工具将删除标志去掉,数据被恢复回来了。当然,前提是没有新的文件写入,该文件所占用的空间没有被新内容覆盖。
  • 格式化
格式化操作和删除相似,都只操作文件分配表,不过格式化是将所有文件都加上删除标志,或干脆将文件分配表清空,系统将认为硬盘分区上不存在任何内容。格式化操作并没有对数据区做任何操作,目录空了,内容还在,借助数据恢复知识和相应工具,数据仍然能够被恢复回来。
注意:格式化并不是100%能恢复,有的情况磁盘打不开,需要格式化才能打开。如果数据重要,千万别尝试格式化后再恢复,因为格式化本身就是对磁盘写入的过程,只会破坏残留的信息。
  • 覆盖
数据恢复工程师常说:“只要数据没有被覆盖,数据就有可能恢复回来”。
因为磁盘的存储特性,当我们不需要硬盘上的数据时,数据并没有被拿走。删除时系统只是在文件上写一个删除标志,格式化和低级格式化也是在磁盘上重新覆盖写一遍以数字0为内容的数据,这就是覆盖。
一个文件被标记上删除标志后,他所占用的空间在有新文件写入时,将有可能被新文件占用覆盖写上新内容。这时删除的文件名虽然还在,但他指向数据区的空间内容已经被覆盖改变,恢复出来的将是错误异常内容。同样文件分配表内有删除标记的文件信息所占用的空间也有可能被新文件名文件信息占用覆盖,文件名也将不存在了。
当将一个分区格式化后,有拷贝上新内容,新数据只是覆盖掉分区前部分空间,去掉新内容占用的空间,该分区剩余空间数据区上无序内容仍然有可能被重新组织,将数据恢复出来。
同理,克隆、一键恢复、系统还原等造成的数据丢失,只要新数据占用空间小于破坏前空间容量,数据恢复工程师就有可能恢复你要的分区和数据。

四、数据恢复底层
解析硬盘的第一个扇区,也就是MBR在磁盘上的结构,进而解析该磁盘的分区情况。获取了每个分区卷在磁盘上的分区信息后,就可以直接读取各分区的扇区信息,进而按照文件系统格式解析分区数据。
 MBR占一个扇区,分三部分:
系统引导代码,  占446字节;
分区表信息,    占64字节
结束标志55AA  占2字节
总过512字节
其中,分区表占64字节,每个分区占16个字节,可定义一个主分区;这也就是为什么一块硬盘只能定义四个主分区的原因。在主分区内,又支持扩展分区,这样对于分区就比较灵活了。
分区表结构表示如下:
#pragma pack(1)
typedef struct _PARTITION_ENTRY {
unsigned char boot_ind;    
unsigned char head;      
unsigned char sector;    
unsigned char cyl;      
unsigned char sys_ind;    
unsigned char end_head;    
unsigned char end_sector;  
unsigned char end_cyl;    
unsigned int  start_sect;  
unsigned int  length;    
}PARTITION_ENTRY,* PPARTITION_ENTRY;
#pragma pack()
读取了分区表信息后,现在就可以定位到每个分区的第一个扇区,即所属分区的DBR,也称为分区引导扇区,解析分区引导扇区,如下结构: 
typedef struct _PACKED_BOOT_SECTOR {
UCHAR Jump[3];                                     //  offset = 0x000
UCHAR Oem[8];                                     //  offset = 0x003
BIOS_PARAMETER_BLOCK PackedBpb;                   //  offset = 0x00B
UCHAR Unused[4];                                   //  offset = 0x024
LONGLONG NumberSectors;                           //  offset = 0x028
LCN MftStartLcn;                                    //  offset = 0x030
LCN Mft2StartLcn;                                   //  offset = 0x038
CHAR ClustersPerFileRecordSegment;                   //  offset = 0x040
UCHAR Reserved0[3];
CHAR DefaultClustersPerIndexAllocationBuffer;           //  offset = 0x044
UCHAR Reserved1[3];
LONGLONG SerialNumber;                            //  offset = 0x048
ULONG Checksum;                                  //  offset = 0x050
UCHAR BootStrap[0x200-0x044];                       //  offset = 0x054
} PACKED_BOOT_SECTOR;
通过解析DBR,就能得到该分区加载mount的文件系统类型,每扇区的字节数,每簇的大小等信息。如果是NTFS文件系统,则直接定位到5号MFT记录,$root根目录文件,进行解析。

五、常用数据恢复软件
Easyrecovery
Finaldata
R-Studio,Drive Rescue ,Recover4all
File Scavenger 
getdataback
RecoverNT,Search and Recover,DataExplore,Lost&Found
PCtools(DOS)

六、怎么更好的保护数据
1. 永远不要将你的文件数据保存在操作系统的同一驱动盘上
2. 定期备份你的文件数据,不管它们被存储在什么位置
3. 提防用户错误
鼠鼠给您提供一个写的比较好的文章:http://blog.csdn.net/shanndyw/article/details/8461301

鼠鼠百科--数据恢复相关推荐

  1. 使用中断后不停止_仓鼠偷吃鼠粮,被发现后立刻停止,但鼠鼠满脸不情愿

    贪玩馋嘴,是很多宠物的天性,在主人不在家的时候,往往是它们暴露本性的时候. 提起贪玩,人们往往会想到哈士奇,因为它们能在主人不在家的时候,把整个屋子给拆了:而提起贪吃,仓鼠却总被人们忽视. 小巧可爱的 ...

  2. 【每日一道智力题】之 药瓶毒鼠鼠

    题目: 有1000个一模一样的瓶子,其中有999瓶是普通的水,有1瓶是毒药.任何喝下毒药的生命都会在一星期之后死亡.现在你只有10只鼠鼠和1个星期的时间,如何检验出哪个瓶子有毒药? 这是一道经典的面试 ...

  3. [数字图像处理Matlab]任选一幅灰度图,自行编写程序,完成直方图均衡化。鼠鼠的数字图像处理实验要求:不能用MATLAB自带的histeq函数实现直方图均衡化

    数学理论前提:见数字图像处理(第三版) 李俊山等编著  p50-53 1.利用imhist函数统计像素点个数 Im = imread("C:\Users\鼠鼠\Desktop\数字图像处理m ...

  4. 料理鼠鼠——团队展示

    这个作业属于哪个课程 <软件工程> 这个作业要求在哪里 <作业要求> 这个作业的目标 <组建团队,确定项目,确定绩效考核方案,撰写博客> 其他参考文献 <构建 ...

  5. 四、jQuery 中的事件和动画(嘎嘎详细)

    文章目录 前言 一.事件 1.1 加载 DOM 1.1.1 执行时机 1.1.2 多次使用 1.1.3 简写方式 1.2 事件绑定 1.2.1简单使用 1.2.2 简写绑定事件 1.3 合成事件 1. ...

  6. my ReadAnimal_hamster

    仓鼠 hamster  http://dl.iteye.com/upload/attachment/0070/1366/c1115aed-bd52-34f4-9585-5f74d431848c.jpg ...

  7. 第十八届全国大学智能汽车竞赛报名信息统计

    01 报名信息 一.前言   截止到 2023年6月15日, 第十八届全国大学生智能车竞赛 竞速比赛 报名阶段接近尾声. 参赛赛队伍在 竞赛网站 按照 竞赛网络报名方法 进行了注册, 并提交了队伍参赛 ...

  8. 第十八届全国大学智能汽车竞赛报名信息统计:华南赛区报名队伍

    承办高校: 中南大学 比赛时间: 7月14日-16日 第十八届全国大学智能汽车竞赛报名信息统计 01 报名参赛队伍 序号 组别 学校 队伍名称 学生1 学生2 学生3 学生4 学生5 教师1 教师2 ...

  9. 第十八届全国大学生智能车竞赛华南赛区成绩与奖项

    第十八届全国大学生智能车竞赛分赛区比赛成绩汇总 01 竞赛成绩与奖项 一.专科电磁组 序号 学校名称 队伍名称 比赛组别 奖项 指导教师1 指导教师2 学生1 学生2 学生3 1 广州番禺职业技术学院 ...

最新文章

  1. IT人员健康信号之舌苔
  2. ListElement QML类型
  3. 前端怎么使用jsessionid_成都Web前端是干什么的?新手怎么入门
  4. c++ 编写函数返回两个值最小值_结合实例来分析SQL的窗口函数
  5. python find函数 和index的区别_python list的index()和find()的实现
  6. 华中科技大学计算机应用基础作业答案,《计算机应用基础》试题.doc
  7. 创业码农被公司套路最惨的一次经历
  8. 《Java技术》第六次作业
  9. 运动状态估计之卡尔曼滤波详解
  10. android开发歌词滑动效果_一些Flutter开发中的“坑”
  11. 数据恢复工具winhex使用教程
  12. 初尝scrapy捉取数据保存到mysql
  13. 【转】安装虚拟机VMware及在VMware下安装Ghost XP系统图文教程(附PQ分区及VMware共享教程)
  14. 计算机底层知识之CPU
  15. 题目:953.验证外星语词典
  16. 云原生--k8s基础管理命令(二)
  17. 机器人坐标系基本概念
  18. 嵌入式linux编译程序,构造嵌入式Linux(一):Kernel编译
  19. 那些年,用过的Linux网络工具
  20. Zookeeper-3.4.5安装步骤及异常处理

热门文章

  1. windows 10修改host,有效解决权限问题,请惠存
  2. C语言停车场管理系统
  3. 720 词典中最长的单词(Trie树)
  4. 快应用JS自定义月相变化效果
  5. 【电子电路】变送器信号 4~20mA 恒流源电路设计
  6. python画地图经纬度_如何用python画地图上的标注线?
  7. 从零开始学C++之标准库类型(一):string 类简介和例程
  8. (转载)基于LBS地图的开发,满足地图上有头像的需求
  9. UC伯克利教授Stuart Russell人工智能基础概念与34个误区 (公号回复“AI基础概念”可下载PDF资料)
  10. 目前支持WebGL的浏览器有哪些?