数据恢复基本知识讲义.docx
- 文档编号:24854585
- 上传时间:2023-06-02
- 格式:DOCX
- 页数:34
- 大小:632.64KB
数据恢复基本知识讲义.docx
《数据恢复基本知识讲义.docx》由会员分享,可在线阅读,更多相关《数据恢复基本知识讲义.docx(34页珍藏版)》请在冰豆网上搜索。
数据恢复基本知识讲义
数据恢复基本知识讲义
数据恢复的基本知识
一、基本概念
1、数据
这里我们所说的数据,只指计算机数据,后面不再专门指出。
首先,“数据”是一个广义的概念,不仅包括计算机文件系统或数据库系统中存储的各种数据、正文、图形、图像、声音等形式的多媒体数据文件、软件或各种文档资料,也包括存放或管理这些信息的硬件信息,如计算机硬件及其网络地址、网络结构、网络服务等。
尽管在许多文献中都大量引用“数据”与“信息”两个术语,但却没有一个被公认的数据与信息的定义。
本书中对“数据”与“信息”不加以区分,视为同义。
2、数据恢复
那么什么是数据恢复呢?
简单地说,数据恢复就是把遭受破坏、或由硬件缺陷导致不可访问或不可获得、或由于误操作等各种原因导致丢失的数据还原成正常数据,即恢复至它本来的“面目”。
数据恢复不仅对已丢失的文件进行恢复,还可
一直编到整块硬盘的最后一个扇区。
显然线性地址是物理扇区的逻辑地址。
3、C/H/S和LBA之间的转换
1)读写规则
要了解从C/H/S到LBA线性地址的转换规则。
由于系统在写入数据时是按照从柱面到柱面的方式,在上一个柱面写满数据后才移动磁头到下一个柱面,并从下一柱面的第一个磁头的第一个扇区开始写入,从而使磁盘性能最优,所以,在对物理扇区进行线性编址时,也按照这种方式进行。
即把第一柱面(0柱)第一磁头(0面)的第一扇区(1扇区)编为逻辑“0”扇区,把第一柱面(0柱)第一磁头(0面)的第二扇区(2扇区)编为逻辑“1”扇区,直至第一柱面(0柱)第一磁头(0面)的第63扇区(63扇区)编为逻辑“62”扇区,然后转到第一柱面(0柱)第二磁头(1面)的第一扇区(1扇区),接着上一面编为逻辑“63”扇区,0柱面所有扇区编号完毕后转到1柱面的0磁头1扇区,依次往下进行,直至把所有的扇区都编上号。
2)从C/H/S到LBA
通过对编号规则的介绍,很容易看出C/H/S与LBA地址的对应关系。
用C表示当前柱面号,H表示当前磁头号,S表示当前扇区号,CS表示起始柱面号,HS表示起始磁头号,SS表示起始扇区号,PS表示每磁道有多少个扇区,PH表示每柱面有多少个磁道,则有:
LBA=(C–CS)﹡PH﹡PS+(H–HS)﹡PS+(S–SS)
(1)
一般情况下,CS=0,HS=0,SS=1,PS=63,PH=255,LBA计算如下:
C/H/S=0/0/1,代入
(1)式中可得LBA=0
C/H/S=0/0/63,代入
(1)式中可得LBA=62
C/H/S=0/1/1,代入
(1)式中可得LBA=63
C/H/S=220/156/18,代入
(1)式中可得LBA=3544145
3)从LBA到C/H/S
先介绍两种运算DIV和MOD(这里指对正整数的操作)。
DIV称做整除运算,即被除数除以除数所得商的整数部分。
比如,5DIV2=2,33DIV5=6;MOD运算则是取商的余数。
比如,5MOD2=1,33MOD5=3。
DIV和MOD是一对搭档,一个取整数部分,一个取余数部分。
各变量仍按上述假设进行,则有:
C=LBADIV(PH﹡PS)+CS
H=(LBADIVPS)MODPH+HS
(2)
S=LBAMODPS+SS
如果不运用MOD运算符,只运用DIV运算符,也可按式(3)进行转换,两者的结果相同,只是运算的复杂度不同。
C=LBADIV(PH﹡PS)+CS
H=LBADIVPS–(C–CS)﹡PH+HS(3)
S=LBA–(C–CS)﹡PH﹡PS–(H–HS)﹡PS+SS
按照这个规律,则有:
LBA=0,相应地,C/H/S=0/0/1
LBA=62,相应地,C/H/S=0/0/63
LBA=63,相应地,C/H/S=0/1/1
LBA=3544145,相应地,C/H/S=220/156/18
四、引导扇区(MBR)
MBR,即主引导记录区,位于整个硬盘的0磁道0柱面1扇区。
在总共512字节的主引导扇区中,MBR的引导程序占用其中的前446个字节(偏移0~偏移1BDH),随后的64个字节(偏移1BEH~偏移1FDH)为DPT(DiskPartitionTable,硬盘分区表),最后的两个字节“55AA”(偏移1FEH~偏移1FFH)是分区有效结束标志。
由它们共同构成硬盘主引导记录,也称主引导扇区。
图2(MBR)
其中,硬盘分区表中的每16个字节被称为分区表项,一个分区表项管理一个分区。
在分区表项内:
第1个字节为80的表示被激活,为00的表示未被激活。
第2个字节为C/H/S模式下起始磁头号。
第3个字节为C/H/S模式下起始扇区号。
第4个字节为C/H/S模式下起始柱面号。
第6个字节为C/H/S模式下结束磁头号。
第7个字节为C/H/S模式下结束扇区号。
第8个字节为C/H/S模式下结束柱面号。
其中,第3、4个字节结合,扇区号为6位,柱面号为10位(占用第3个字节的高两位)。
第5个字节为分区类型:
若值为01表示是FAT12格式;若值为04表示是小于32M的FAT16格式;若值为06表示是大于32M的FAT16格式;若值为0B或0C表示是FAT32格式;若值为07表示是NTFS格式;若此分区表项为扩展分区,则第5个字节的值应为05或0F,05为小于8.4G,0F为大于8.4G。
从第9个字节开始为LBA寻址方式下的管理。
第9~12字节为当前分区的起始扇区号。
第12~16字节为当前分区的大小(分区所包含的扇区数)。
五、扩展分区(EBR)
如何在一个硬盘中来划分扩展分区呢?
1)在第一个扇区(引导扇区)中的第一个分区表项上填写主分区信息。
2)在第二个分区表项上的第5个字节上填写05或0F,则证明此分区为一个扩展分区,此时这个分区为主扩展分区。
如果在这个扩展分区上在划分扩展分区的话,则找到这个扩展分区的第一个扇区(EBR),重复上述两个步骤,所得到的是次扩展分区,以此类推。
图3(EBR)
下面是一块硬盘的数据组织结构:
图4
六、操作系统引导记录区(DBR)
进入一个分区的内部,第一个扇区就是DBR(DOSBootRecord)。
它包括一个引导程序和一个被称为BPB(BIOSParameterBlock)的本分区参数记录表。
引导程序的主要任务是,当MBR将系统控制权交给它时,判断本分区根目录前两个文件是不是操作系统的引导文件。
BPB参数块记录着本分区的起始扇区、结束扇区、文件存储格式、硬盘介质描述符、根目录大小、FAT个数,分配单元大小等重要参数。
第1、2字节如果为EB58则表示跳转58个字节,则跳到5A。
从5A开始到55AA之间为引导数据。
从3到A为厂家和格式化版本。
从B到59为BPB参数:
B~C为每扇区的字节数。
D为每簇的扇区数。
E~F为DBR所保留的扇区数。
10为FAT表的个数。
15为媒体描述符(F8为硬盘)。
18和19为每磁道扇区数。
20~23为记录本分区的大小。
24~27记录FAT表的大小(可确定根目录的位置)。
2C~2F记录根目录的起始簇号。
30为文件信息系统所在的扇区。
32为DBR的备份的扇区号。
33~34保留。
40为BIOS下记录媒体方式(80表示硬盘)。
42为扩展引导标志(是固定值28或29)。
52~56为版本号。
图5(C盘的DBR,FAT格式)
图5为用WINHEX打开整个硬盘后通过MBR经过扇区计算后得到的C盘DBR地址。
图6(C盘的DBR,FAT格式)
图6为用WINHEX直接打开C盘后显示的DBR,两个图是一样。
七、FAT文件系统
1、格式化
1)低级格式化
①测试硬盘介质;
②为硬盘划分磁道;
③为硬盘的每个磁道按指定的交叉因子间隔安排扇区;
④将扇区ID放置到每个磁道上,完成对扇区的设置;
⑤对磁盘表面进行测试,对已损坏的磁道和扇区做“坏”标记;
⑥给硬盘中的每个扇区写入某一ASCII码字符。
2)高级格式化
①从各个逻辑盘指定的柱面开始,对扇区进行逻辑编号(分区内的编号)。
②在基本分区上建立DOS引导记录(DBR),若命令中带有参数“/S”则装入DOS的三个系统文件。
③在各个逻辑盘建立文件分配表(FAT)。
④建立根目录对应的文件目录表(FDT)及数据区。
对于FAT16和FAT32文件系统(NTFS采用不同的文件管理技术,另做介绍),硬盘上的数据按照其不同的特点和作用大致可分为5部分:
MBR区、DBR区、FAT区、DIR区和DATA区。
其中,MBR由分区软件创建,而DBR区、FAT区、DIR区和DATA区由高级格式化程序创建。
文件系统写入数据时只是改写相应的FAT区、DIR区和DATA区。
2、FAT32文件系统
1)FAT32文件系统将逻辑盘的空间划分为三个部分,依次是引导区(BOOT区)、文件分配表区(FAT区)和数据区(DATA区)。
引导区和文件分配表区又合称为系统区。
2)引导区从第一扇区开始,使用三个扇区(实际只使用了第一个扇区,但第二和第三个扇区也写入了“55AA”标志),保存有该逻辑盘每扇区字节数,每簇对应扇区数等重要参数和引导记录。
之后还留有若干个保留扇区,两者共占用32个扇区。
而FATl6文件系统的引导区一般只占用一个扇区,没有保留扇区。
3)文件分配表区保存有两个相同的文件分配表,因为文件所占用的存储空间(簇链)及空闲空间的管理都通过FAT来实现,FAT是如此的重要,所以系统保存两个以便第一个损坏时,还有第二个备用。
文件系统对数据区的存储空间是按簇进行划分和管理的,簇是空间分配和回收的基本单位,即一个文件总是占用若干个整数簇,文件所使用的最后一簇剩余的空间不再使用。
4)FAT32系统一簇对应8个逻辑相邻的扇区,理论上,这种用法所能管理的逻辑盘容量上限为16TB(16384GB),容量大于16TB时,可以用一簇对应16个扇区,依此类推。
但是,对于容量小于512MB的盘,采用FAT32虽然一簇为8个扇区,比使用FATl6一簇16个扇区,簇有所减小,但FAT32的FAT表较大,占用空间较多,总数据区被减少,两者相抵,实际并不能增加有效存储空间,所以微软建议对小于512MB的逻辑盘不宜使用FAT32。
5)根目录区(ROOT区)不再是固定区域、固定大小,可看做是数据区的一部分。
因为根目录已改为根目录文件,采用与子目录文件相同的管理方式,一般情况下从第二簇开始使用,大小视需要增加,因此根目录下的文件数目不再受最多512个的限制。
FATl6文件系统的根目录区(ROOT区)是固定区域、固定大小,占用FAT区之后紧接着的32个扇区,最多保存512个目录项,是系统区的一部分。
6)目录区中的文件目录项变化较多。
一个目录项仍占用32字节,可以是文件目录项、子目录项、卷标项(仅根目录有)、已删除目录项、长文件名目录项等。
目录项中原来在DOS下保留未用的10个字节都有了新的定义,全部32个字节的定义如下。
第0~7字节,文件名。
第8~10字节,文件扩展名。
第11字节,文件属性,按二进制位定义,最高两位保留未用,0至5位分别是只读位、隐藏位、系统位、卷标位、子目录位、归档位,当只读位、隐藏位、系统位、卷标位全为1,其他位全为0,即11字节为“0FH”时表示该项为长文件名记录项。
第12~13字节,仅长文件名目录项有效,用来存储其对应的短文件名目录项的文件名字节校验和。
第13~15字节,24位二进制文件建立时间,其中高5位为小时,次6位为分钟,再次5位的倍数为秒,最后8位为单位精确到10毫秒的创建秒数。
第16~17字节,16位二进制文件建立日期,其中高7位为相对于1980年的年份值,次4位为月份,后5位为月内日期。
第18~19字节,16位二进制文件最新访问日期,定义同16~17字节。
第20~21字节,起始簇号的高16位。
第22~23字节,16位二进制文件最新修改时间,其中高5位为小时,次6位为分钟,后5位的倍数为秒数。
第24~25字节,16位二进制文件最新修改日期,定义同16~17字节。
第26~27字节,起始簇号的低16位。
第28~31字节,32位文件字节长度。
其中12~19字节为以后陆续定义。
所有字节的意义如下:
图7
下面图8是文件目录项的起始扇区,也是DATA区的起始位置,它的寻找方式是:
先通过MBR中的分区表项中的第9~12字节的值确定DBR的位置(本案例值为0000003F,换算成十进制为63)。
然后跳到第63扇区找到DBR,先看第10个字节的值(本案例值为02,说明有两个FAT表),再看第E~F字节的值(其值为DBR的保留扇区数,此案例值为0026,换算成十进制为38),再看第24~27字节的值(其值为记录FAT表的大小,此案例值为0000270D,换算成十进制为9997)。
这样,DATA区的起始位置是:
MBR的保留扇区数+DBR的保留扇区数+FAT表的大小×2=63+38+9997×2=20095,因此,DATA区的起始位置是第20095扇区。
图8(FDT)
下面图9是FAT表的起始位置:
图9(FAT)
下面图10是FAT表中每个簇号可取的表项值及其含义:
图10
下面图11展示了各个区域的逻辑关系:
图11
八、NTFS文件系统
NTFS是在1993年随着WindowsNT的第一个版本推出而面世的,是一个性能优良的文件系统。
NTFS基于可恢复文件结构而设计,它可使用户数据文件不会有丢失或毁坏的危险,适用于一些要求安全性高、而且在磁盘上存储远远大于FAT文件系统所能处理的巨型文件等场合。
与FAT相同,NTFS也使用“簇”作为最小的分配单位。
簇的大小,也称为簇因子,由NTFS格式化程序确定。
NTFS支持的簇大小为512,1024,2048和4096个字节。
NTFS只与簇有关,与物理扇区的大小无关。
1、NTFS中的DBR
第B~C字节:
每扇区字节数。
第D字节:
每簇占几个扇区。
第24~27字节:
固定值80008000。
第28~2F字节:
分区大小。
第30~37字节:
$MFT文件起始簇号。
第38~3F字节:
镜像$MFT文件起始簇号。
说明:
DBR的备份不再这个分区内,格式化时留一个扇区备份。
图12(D盘的DBR,NTFS格式)
2、$MFT文件
在NTFS中,磁盘上的任何事物都为文件。
在文件中存储一切使得文件系统很容易定位和维护数据。
文件通过主文件表(MFT)来确定其在磁盘上的存储位置。
主文件表是一个与文件相对应的数据库,有一系列文件记录组成——卷中每一个文件都有一个文件记录(对于大型文件还有可能多个记录与之相对应)。
主文件表自身也有它自己的文件记录。
MFT中的文件记录大小一般是固定的,是1KB。
文件记录在MFT文件记录数组中物理上是连续的,且从0开始编号。
MFT仅供系统本身组织、架构文件系统使用,这在NTFS中成为元数据(Matadata,使存储在卷上支持文件系统格式管理的数据。
它不能被应用程序访问,只能为系统提供服务)。
其中最基本的前16个记录是操作系统使用的非常重要的元数据文件。
这些元数据文件的名字都以“$”开始,所以是隐藏文件。
序号
元文件
功能
0
$MFT
主文件表本身
1
$MFTMirr
主文件表的部分镜像
2
$LogFile
日志文件
3
$Volume
卷文件
4
$AttrDef
属性定义列表
5
$Root
根目录
6
$Bitmap
位图文件
7
$Boot
引导文件
8
$BadClus
坏簇文件
9
$Secure
安全文件
10
$UpCase
大写文件
11
$Extendmetadatadirectory
扩展元数据目录
12
$Extend\$Reparse
重解析点文件
13
$Extend\$UsnJrnl
变更日志文件
14
$Extend\$Quota
配额管理文件
15
$Extend\$ObjId
对象ID文件
16~23
保留
23+
用户文件和目录
我们先把图12中第30~37字节的值(00000000000C0000)换算成十进制的值为786432,因为是簇号所以要乘以8,786432×8=6291456,跳到6291456扇区,这是$MFT文件的起始扇区。
图13(MFT)
图14(MFT续)
1)头四个字节46494C45(固定)为一个文件记录的起始标志。
一个文件记录管理一个文件,占用1k空间(2个扇区)。
2)第14~15个字节记录第1个属性起始的偏移(位置),属性前面为文件记录头。
3)在一个属性内部
第1~4个字节:
属性的ID,如果
ID=10为标准信息属性
=30为文件名属性
=80为数据属性
=B0为位图属性
4)数据属性
第17~24个字节:
起始VCN(虚拟簇号)。
第33~34个字节:
RUNlist起始位置。
(DATARUN:
连续簇)
第41~48个字节:
文件属性体的分配大小。
第49~56个字节:
文件属性体的实际大小(字节数)。
第57~64个字节:
文件属性体的初始大小。
对RUNList的说明:
①在RUNList的起始位置,第1个字节高位和地位相加,如第1个字节为11则后面连续2位为1个RUN。
第2个字节为文件所占连续簇的个数。
第3个字节为文件的起始簇号。
②如第1个字节为31则后面连续4位为1个RUN。
第2个字节为文件所占连续簇的个数。
第3~5个字节为文件的起始簇号。
③再往后如果是00,则证明此文件为1个RUN,不是00接下来为第2个RUN…
附录:
NTFS常用属性表
文件记录可能的属性
类型
操作系统
名称
0x10
标准信息
0x20
属性列表
0x30
文件名
0x40
NT
卷版本
0x40
2K
对象ID
0x50
安全描述符
0x60
卷名
0x70
卷信息
0x80
数据
0x90
索引根
0xA0
索引分配
0xB0
位图
0xC0
NT
符号连接
0xC0
2K
重解析点
0xD0
扩展信息
0xE0
扩展
0xF0
NT
特权设置
0x100
2K
日志流
MFT文件记录头部结构布局
偏移
长度
描述
0X0
4
固定值,一定是“FILE”
0X4
2
更新序列号的偏移
0X6
2
更新序列号与更新数组以字为单位大小(S)
0X8
8
日志文件序列号(每次记录被修改,都将导致该序列号加1)
0X10
2
序列号(用于记录本文件记录被重复使用的次数,每次文件删除时加1,跳过0值,如果为0,则保持为0)
0X12
2
硬连接数,只出现在基本文件记录中,目录所含项数要使用到它
0X14
2
第一个属性流的偏移地址
0X16
2
标志字节,1表示记录使用中,2表示该记录为目录
0X18
4
文件记录实际大小(填充到8字节,即以8字节为边界)
0X1C
4
文件记录分配大小(填充到8字节,即以8字节为边界)
0X20
8
所对应的基本文件记录的文件参考号(扩展文件记录中使用,基本文件记录中为0,在基本文件记录的属性列表0X20属性存储中扩展文件记录的相关信息)
0X28
2
下一个自由ID号,当增加新的属性时,将该值分配给新属性,然后该值增加,如果MFT记录重新使用,则将它置0,第一个实例总是0
0X2A
2
边界,WINDOWSXP中使用,也就是本记录使用的两个扇区的最后两个字节的值
0X2c
4
WINDOWSXP中使用,本MFT记录号
2
更新序列号
2S-2
更新序列数组
标准属性的属性头结构
偏移
大小
值
描述
0x00
4
0X10
属性类型(10,标准属性)
0x04
4
0X60
总长度(包括头部本身)
0x08
1
0x00
非常驻标志(1表示非常驻)
0x09
1
0x00
属性名的名称长度
0x0A
2
0x18
属性名的名称偏移
0x0C
2
0x00
标志(似乎已经不再使用,统一放在文件属性中)
0x0E
2
属性ID(此处的属性ID不是指与0X10同级别的属性,应该是指下一级属性,如多数据流,每个数据流属性都有一个属性ID,但都是数据流属性0X80)
0x10
4
L
属性体长度(L)
0x14
2
0x18
属性内容起始偏移
0x16
1
索引标志
0x17
1
0x00
填充
0x18
L
从此处开始,共L字节为属性
标准属性的属性体结构
偏移
大小
操作系统
描述
~
~
标准属性头(已经分析过)
0x00
8
CTime–文件创建时间
0x08
8
ATime–文件修改时间
0x10
8
MTime–MFT变化时间
0x18
8
RTime–文件访问时间
0x20
4
文件属性(按照DOS术语来称呼,都是文件属性)
0x24
4
文件所允许的最大版本号(0表示未使用)
0x28
4
文件的版本号(最大版本号为0,则也为0)
0x2C
4
类Id(一个双向的类索引)
0x30
4
2K
所有者Id(表示文件的所有者,是文件配额$Quota中$O和$Q索引的关键字,为0表示未使用磁盘配额)
0x34
4
2K
安全Id是文件$Secure中$SII索引和$SDS数据流的关键字,注意不要与安全标识相混淆
0x38
8
2K
本文件所占用的字节数,它是文件所有流占用的总字节数,为0表示未使用磁盘配额
0x40
8
2K
更新系列号(USN),是到文件$UsnJrnl的一个直接的索引,为0表示USN日志未使用
文件名属性的属性头结构
偏移
大小
值
描述
0x00
4
0X30
属性类型(30,文件名属性)
0x04
4
0X68
总长度(包括头部本身)
0x08
1
0x00
非常驻标志
0x09
1
0x00
属性名的名称长度
0x0A
2
0x18
属性名的名称偏移
0x0C
2
0x00
标志(0X0001表示压缩,0X4000表示加密,0X8000表示稀疏文件,常驻属性不会被压缩)
0x0E
2
0X03
属性ID(同标准属性的属性头)
0x10
4
0X4A
属性长度(L)
0x14
2
0x18
属性内容起始偏移
0x16
1
0X01
索引标志
0x17
1
0x00
填充
0x18
L
从此处开始,共L字节为属性
文件名属性体结构布局
偏移
大小
值
~
~
标准的属性头结构(见前表)
0x00
8
父目录的文件参考号(即父目录的基本文件记录号,分为两个部分,前6个字节48位为父目录的文件记录号,此处为0X05,即根目录,所以$MFT的父目录为根目录,后2个字节为序列号)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据 恢复 基本知识 讲义
![提示](https://static.bdocx.com/images/bang_tan.gif)