磁盘数据结构笔记.docx

上传人:b****5 文档编号:7497859 上传时间:2023-01-24 格式:DOCX 页数:14 大小:32.91KB
下载 相关 举报
磁盘数据结构笔记.docx_第1页
第1页 / 共14页
磁盘数据结构笔记.docx_第2页
第2页 / 共14页
磁盘数据结构笔记.docx_第3页
第3页 / 共14页
磁盘数据结构笔记.docx_第4页
第4页 / 共14页
磁盘数据结构笔记.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

磁盘数据结构笔记.docx

《磁盘数据结构笔记.docx》由会员分享,可在线阅读,更多相关《磁盘数据结构笔记.docx(14页珍藏版)》请在冰豆网上搜索。

磁盘数据结构笔记.docx

磁盘数据结构笔记

磁盘数据结构:

MBR

446

空闲

同左

引导扇区DBR

数据

Partitiongap

EBR扩展分区1

引导扇区DBR

数据

Partitiongap

EBR扩展分区2

引导扇区

数据

Unpartitionalspace

DPT

64

55AA

55AA

55AA

55AA

55AA

55AA

StartSectorsPartition1Partition2ExtendedPartition

系统保留C盘逻辑D盘逻辑E盘

第一分区表

第二分区表

第三分区表

第四分区表

当前分区

下一个分区

未用

未用

磁盘寻址:

1、物理寻址CHS(柱面磁头扇区)

2、逻辑寻址LBA

 

几个概念:

1、低级格式化:

对硬盘划分磁道和扇区,在扇区的地址域上标注地址信息(CHS物理地址),并剔出坏磁道。

2、分区:

允许整个物理硬盘在逻辑上划分最多4个主分区,如果想划分更多的分区,可将1个主分区划分成扩展分区,然后再将扩展分区划分成一个或多个逻辑盘。

3、MBR(MasterBootRecord):

硬盘上建立分区表的同时建立,排在最前边的一个扇区(可存放512字节)里,存放着用于硬盘正常工作的很重要代码,这些代码分三个部分:

一是用于启动硬盘的一些引导指令(即主引导程序MBR,446字节);二是分区表(DPT,64字节);三是硬盘正常的标志55AA。

4、EBR(ExtendedBootRecord)则是与MBR相对应的一个概念。

MBR里有一个DPT(DiskPartitionTable,磁盘分区表)的区域,它一共是64字节,按每16个字节一个分区表项,它最多只能容纳4个分区。

在MBR的DPT里说明的分区称为主分区,如果想分更多的分区,微软的解决方案:

在MBR里放不多于三个主分区(通常一个),剩下的分区则由EBR扩展分区引导记录(与MBR结构相像的分区结构)里说明。

一个EBR不够用时,可以增加另一个EBR,如此像一根根链条一样地接下去。

5、DBR(DOSBootRecord),就是每个逻辑盘的最前的一个扇区里,用于引导和加载相应文件管理系统的一些系统代码。

也称作操作系统引导扇区(OBR)

MBR:

主引导记录(CHS:

0柱0磁头1扇区)

00010203040506070809ABCDEF

EB

5E

00

00

00

00

00

00

00

00

00

00

00

00

00

00

02

00

00

00

00

00

00

00

3F

00

FF

00

00

00

00

00

00

00

00

00

80

00

00

00

00

00

00

00

00

00

00

00

……………………………………………………………………………………………………………………………………………………………………………

00

00

00

00

00

00

00

00

00

00

00

00

00

3F

00

00

3F

FF

3F

00

46

42

42

46

00

00

80

01

01

00

07

FE

FF

FF

3F

00

00

00

00

00

00

00

00

00

00

00

00

00

00

00

00

00

00

00

00

00

00

00

00

00

00

00

00

00

00

00

00

00

00

00

00

00

00

00

00

00

00

00

00

00

00

00

00

00

00

00

55

AA

分区表:

扇区倒数第五行,倒数第二个字节开始,64个字节

引导代码446字节(白字为PE启动标志):

分区表64个字节:

结束标志55AA

1

2

分区引导标志

起始

磁头号

3

4

5

6

7

8

9

10

11

12

13

14

15

16

起始

扇区

起始

柱面号

分区

类型符

结束

磁头号

结束

扇区

结束

柱面号

本分区之前使用的扇区数

本分区的总扇区数

引导标志:

80H表示活动分区;00H表示非活动分区。

分区类型符:

00H表示该分区未用;06H——FAT16基本分区;05H——扩展分区;0FH——(LBA模式)扩展分区

07H——NTFS分区;83H—— Linux分区;0BH——FAT32基本分区;0CH——(LBA模式)FAT32分区

扇区数:

要倒过来计算(如分区表上3F000000,实际计算时为0000003F,转换成10进制63)

FAT32分区结构

隐藏扇区

(不在分区总数内)

保留扇区(DBR中0E-0F字节)

FAT1

FAT2

根目录FDT

数据区

MBR

其他

DBR

1-5扇区

DBR副本

其余

DBR24-27字节

紧跟着FAT2

物理0扇区

逻辑0扇区

00

逻辑6扇区

00

FAT32以“F8FFFF0F”开始,可搜索计算保留扇区及FAT扇区数

可通过搜索根目录下文件或文件夹名,字符选ASCII/Codepage

0

1

2

3

4

5

6

7

8

9

A

B

C

D

E

F

00

EB

58

90

OEMID

每扇区字节数

每簇扇区数

保留扇区

10

FAT数

根目录项数

小扇区数

介质F8

总为0

每磁道扇区数

磁头数

当前分区前面的隐含扇区

20

分区大小扇区数

每FAT扇区数

扩展标志

系统版本

根目录在DATA区起始簇号

30

01

00

DBR备份扇区

保留

40

80

00

标签

分区序号

卷标

50

FAT32

引导程序开始

……

………………………………………………………………………………………………………………………………………………………………

1F0

55

AA

JUMP指令及OEMID:

BPB(BIOSParameterBlock,BIOS参数块):

引导程序:

MagicNumber(结束标志字)

重建FAT32的DBR需要这么几个参数:

保留扇区数、FAT表个数(通常为2)、每FAT扇区数、根目录簇号(通常为2号簇)、每簇扇区数、分区前隐含扇区数及分区大小扇区数(这两项可在该分区的分区表项中找到)

步骤1.通过搜索位于扇区偏移0字节处的"F8FFFF"寻找FAT表..进而确定文件系统类型(FAT16/32)..

步骤2.寻找根目录,来计算出FAT的大小(FAT1被破坏可用此方法)..及保留扇区数..

步骤3.计算簇大小..利用两个子目录的起始扇区号差和他们的簇号差..就可以得到簇的大小..

每簇扇区数=(分区大小扇区数-保留扇区-FAT扇区数×FAT表数)/(FAT扇区数×512字节/4)

步骤4.从分区表项得到隐含扇区数与分区大小.

文件系统扇区:

DBR后面一个扇区

0

1

2

3

4

5

6

7

8

9

A

B

C

D

E

F

00

52

52

61

41

00

00

00

00

00

00

00

00

00

00

00

00

……

………………………………………………………………………………………………………………………………………………………………

1E0

00

00

00

00

72

72

41

61

空闲簇数

下一个空闲簇簇号

1F0

00

00

00

00

00

00

00

00

00

00

00

00

00

00

55

AA

FAT表项:

0

1

2

3

4

5

6

7

8

9

A

B

C

D

E

F

00

F8

FF

FF

F0

FF

FF

FF

FF

2号FAT项

3号FAT项

01

4号FAT项

4号FAT项

6号FAT项

7号FAT项

1、FAT表项由4个字节构成,从0开始编号,每个表项映射1个簇(编号即是簇号),0号1号表项系统占用,用户数据从2号表项开始;

2、如果文件占用多个簇,则第一个表项记录下一个表项的编号(即簇号),若文件结束了“0FFFFFFF”表示,“00000000”表示对应簇未使用;

3、定位FAT:

MBR分区表得到分区的起始扇区;分区的DBR的BPB参数得到保留扇区(偏移0E-0F)、FAT表个数(偏移10)、FAT表大小(偏移24-27);FAT1=分区起始扇区+DBR保留扇区,FAT2=FAT1+FAT表大小

4、也可搜索0号表项值“F8FFFF0F”定位FAT扇区

数据区:

由根目录+子目录+文件内容

5、数据区以簇为单位存储,根目录一般在2号簇,定位根目录=数据区起始扇区+每簇扇区数*2

6、根目录下的文件和目录都放在根目录区中,子目录下的文件和目录都放在子目录区中;

7、目录项分四类:

卷标目录项,“.”和“..”目录项,短文件目录项(8.3格式),长文件目录项

8、每个目录项占32个字节,记录着一个目录或文件(也可能多个目录项记录一个文件或目录);

0

1

2

3

4

5

6

7

8

9

A

B

C

D

E

F

文件主名

扩展名

属性

00

创建时分秒

创建年月日

访问年月日

起始簇号高位

修改时分秒

修改年月日

起始簇号低位

文件大小(字节)

时分秒和年月日的算法:

十进制值=时

十进制值=分

十进制值*2=秒

15

14

13

12

11

10

9

8

7

6

5

4

3

2

1

0

十进制值+1980=年

十进制值=月

十进制值=日

文件属性字节:

00-读写01-只读02-隐藏04-系统08-卷标10-子目录20-存档

 

NTFS分区结构

隐藏扇区

(不在扇区总数内)

元文件$BOOT

元文件$MFTMirr

数据区

根目录

元文件$FMT

数据区

剩余扇区

备份DBR

MBR

其他

DBR

启动代码

$MFT备份,仅4条MFT记录

INDX

所有文件FMT记录,FMT占2扇区

物理0扇区

BOOT占2簇

XP:

NTLDR

Win7:

bootmgr

占1簇

0

1

2

3

4

5

6

7

8

9

A

B

C

D

E

F

0

EB

52

90

4E

54

46

53

20

20

20

20

每扇区字节数

每簇扇区数

00

00

10

总为0

NTFS未使用为0

介质F8

总为0

每磁道扇区数

磁头数

隐含扇区数

20

NTFS未使用为0

分区扇区总数

30

$MFT的起始簇号(LCN)

$MFTMirr的起始簇号(LCN)

40

每MFT记录的大小(簇数)

每索引的大小(簇数)

卷标

50

检验和

引导程序开始

……

…………………………………………………………………………………………………………………………………………………………………

1F0

55

AA

重建NTFS的DBR需要的参数:

簇大小、隐含扇区数、分区扇区数、$MFT起始簇号、$MFTMirr起始簇号

步骤1.通过搜索$MFTMirr,利用80属性的起始VCN及分配大小来计算出簇大小(每簇的扇区数=$MFT分配大小÷所占簇数÷512)

步骤2.通过分区表得到隐含扇区数...分区大小(MBR表分区大小=DBR分区大小+1)

步骤3.通过$MFTMirr中的$MFT..Runlist得出$MFT的起始簇号

步骤4.通过$MFTMirr中的$MFTMirr..Runlist得出$MFTMirr的起始簇号

步骤5.如果分区表破坏,可以通过查找元文件$Bitmap,根据$Bitmap所占空间计算总扇区数(NTFS分区所占扇区=$Bitmap文件大小×8位/字节×每簇扇区数);通过$MFTMirr所在扇区、对应簇号,计算出DBR(逻辑0簇)所在扇区(也就是隐藏扇区数)。

关于MFT的重点概念:

1、NTFS文件系统用文件来记录所有信息,文件由属性组成,对应一条MFT记录(文件记录块),一个文件记录块固定大小为1K,占两个扇区;所有文件的MFT记录都有一个文件来管理(就是$MFT),也就是0号MFT记录所指向的文件。

2、元数据文件:

记录一些非常重要的文件系统数据,包括用于文件定位和恢复的数据结构、引导程序数据以及整个卷的分配位图等信息。

元文件不能直接访问的,MFT将开头的16个文件记录块保留用于这些元数据文件。

3、每个文件都有一条MFT记录,MFT记录由记录头和属性组成,一个文件可以有多个属性(属性头+属性),属性分常驻属性(ResidentAttr)和非常驻属性(NoResidentAttr);当文件的属性内容>700字节时,使用非常驻属性,将属性内容外挂到磁盘的其他位置,这些位置由数据运行runs片来描述。

4、不同属性相同的地方在于属性头,即要么常驻属性头要么非常驻属性头,不同属性的属性内容各不相同,在磁盘上的分布结构也不同,作用也不同。

MFT记录头

0

1

2

3

4

5

6

7

8

9

A

B

C

D

E

F

00

FILE

更新序列号偏移

固定列表大小

日志文件序列号LSN

10

序列号SN

硬连接数

第一个属性偏移

标志字节

文件记录实时大小(字节)

文件记录分配大小(字节)

20

基本文件记录中的文件索引号

下一个自由ID

0000

本MFT记录号

30

边界

MFT的使用标记

00

00

00

00

MFT30文件属性(属性头+属性体,6.5行)

0

1

2

3

4

5

6

7

8

9

A

B

C

D

E

F

00

30

00

00

00

属性长度(包含本头部)

10

属性标志

属性名长度

属性名偏移

标志

属性ID标志

属性体大小

属性头大小

索引

保留

20

父目录记录号

保留

序列号

文件创建时间

30

文件修改时间

MFT更改时间

40

最后一次访问时间

文件分配大小

50

文件实际大小

文件标志

用于EAS和重解析

60

文件名长度

命名空间

以Unicode方式标识的文件名

MFT80数据流属性(目录的话A0)

80H 属性 $DATA 容纳文件数据(未命名数据流),文件的大小一般指是未命名数据流的大小,没有长度限制,当它为常驻时,数据长度最小。

它的结构为属性头加上数据流,如果数据流太大,则标记为非常驻,以运行的方式索引到外部。

例如找一个MP3文件,从它的MFT 项中0x80属性中可以看到它一定是非常驻,它的运行所指向的一系列簇就是音乐文件数据流

0

1

2

3

4

5

6

7

8

9

A

B

C

D

E

F

00

80

00

00

00

属性长度(包含本头部)

属性标志

属性名长度

属性名偏移

标志

属性ID标志

10

簇流的起始虚拟簇号(VCN)总从0开始

簇流的结束虚拟簇号(VCN)

20

簇流列表的偏移

压缩单位大小

保留

为属性内容分配的空间大小字节数

30

属性内容实际占用的大小字节数

属性内容初始大小字节数

40

簇流列表(runlist)

……

属性标志:

00-长驻属性01-非常驻属性

标志(0C-0D):

0001-压缩文件4000-加密文件8000-系统文件

偏移:

相对于本属性头

簇流列表3140009601:

31后面字节0x40是簇流片段占用的簇数,后面3个字节0X019600是相对起始簇号

MFT结束标志:

FFFFFF

索引记录结构

0

1

2

3

4

5

6

7

8

9

A

B

C

D

E

F

I

N

D

X

更新序号偏移

更新序号的大小与排列

日志文件序列号LSN

该索引缓冲在索引分配中的索引VCN

索引入口的偏移(相对于0x18)

索引入口的大小(相对于0x18)

索引入口的分配大小(相对于0x18)

1

保留

更新序列号

更新序列排列(2S-2字节)

exFAT分区结构

隐藏扇区

(不在分区扇区总数内)

引导扇区

FAT

数据区(簇单位)

MBR

其他隐藏扇区

DBR

DBR副本

其余

DBR24-27字节计算FAT扇区数(长度)

位图文件

大写转换表

根目录

物理0扇区

分区表或DBR40-47字节

逻辑

0-11扇区

逻辑

12-23扇区

搜索偏移0“F8FFFF0F”确定FAT表起始扇区;

搜索“FFFF”确定起始位置,2号簇

搜索“00000100”,固定5836B,占1簇

紧接大写转换表文件,一般5号簇

逻辑0-11扇区:

0引导扇区,1-8扩展引导扇区,9OEM信息记录,10保留,11引导校验扇区;备份12-23扇区对应0-11扇区。

0

1

2

3

4

5

6

7

8

9

A

B

C

D

E

F

00

EB

76

90

OEMID

20

20

20

00

00

00

00

00

10

00

00

00

00

00

00

00

00

00

00

00

00

00

00

00

00

20

00

00

00

00

00

00

00

00

00

00

00

00

00

00

00

00

30

00

00

00

00

00

00

00

00

00

00

00

00

00

00

00

00

40

隐藏扇区数

分区扇区总数

50

FAT起始扇区号

FAT扇区数

首簇起始扇区号

分区总簇数

60

根目录起始簇号

卷ID

文件系统版本

卷标志

每扇区字节数

每簇扇区数

FAT数

介质描述

70

己用比例

保留

00

00

引导代码开始

……

………………………………………………………………………………………………………………………………………………………………

1F0

55

AA

0.每扇区字节数:

假设此处值为N,则扇区大小字节数为2的N次方,通常9

1.隐藏扇区数:

可以从分区表中查看,如果分区表破坏请按重建分区表操作

2.扇区总数:

可以从分区表查看

3.FAT起始扇区数:

通过搜索FAT表的头标志“F8FFFF0F”所在扇区-分区开始扇区号(相对于DBR,不包含隐藏扇区)

4.首簇起始扇区号:

虽然只有一个FAT,但该处值并不一定等于FAT表起始扇区+FAT大小扇区数,FAT表分配的空间与簇起始扇区之间可能会有未使用的扇区;簇位图文件一般占用数据区的第一个簇,所以首簇起始扇区号的计算通过找簇位图文件的开始位置,搜索“FFFF”找到簇位图文件的起始扇区-分区开始扇区

5.每簇扇区数:

假设此处为N,则簇大小为2的N次方簇。

位图文件之后就是大写转换表文件,大写转换表文件的内容是固定的,前4个字节是“00000100”,通过搜索这4个字节就能找到大写转换表文件的开始扇区,与簇位图文件起始扇区相减得到簇位图文件大小,再通过分析FAT表可知簇位图文件占用簇的个数,相除可得到每簇扇区数

6.根目录起始簇号:

簇位图文件总是开始于数据区的2号簇,通过分析FAT表可知簇位图文件占用簇的个数,簇位图文件之后是大写转换表文件,固定5836个字节,结合每簇扇区数可知大写转换表文件占用的簇的个数,而大写转换表文件之后就是根目录的开始

7.分区总簇数:

前面已经知道首簇起始扇区号,每簇扇区数;用数据区的总扇区数除以每簇扇区数,就是分区的总簇数了

8.FAT扇区数:

用分区的总簇数来计算FAT扇区数。

(分区总簇数+2)*4/512(取大于这个值的簇大小的整数倍,簇位图前保留0号、1号簇)

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 法律文书 > 调解书

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1