NTFS文件系统规范.docx

上传人:b****2 文档编号:23023749 上传时间:2023-04-30 格式:DOCX 页数:36 大小:32.49KB
下载 相关 举报
NTFS文件系统规范.docx_第1页
第1页 / 共36页
NTFS文件系统规范.docx_第2页
第2页 / 共36页
NTFS文件系统规范.docx_第3页
第3页 / 共36页
NTFS文件系统规范.docx_第4页
第4页 / 共36页
NTFS文件系统规范.docx_第5页
第5页 / 共36页
点击查看更多>>
下载资源
资源描述

NTFS文件系统规范.docx

《NTFS文件系统规范.docx》由会员分享,可在线阅读,更多相关《NTFS文件系统规范.docx(36页珍藏版)》请在冰豆网上搜索。

NTFS文件系统规范.docx

NTFS文件系统规范

硬件白皮书

NTFS文件系统规范

关键字:

WindowsNTNTFS文件系统

NTFS作为MicrosoftWindowsNT®操作系统的标配文件系统克服了FAT/FAT32文件系统的大量缺点;同时又随着MicrosoftWindows2000®、MicrosoftWindowsXP操作系统的推广得到越来越广泛的应用。

和FAT/FAT32文件系统相比,NTFS文件系统主要有以下优点。

•支持大容量存储单元(最大支持

GB)

•内建数据压缩支持

•支持事务日志文件

•加强数据安全

目录

基本数据类型

引导扇区与BPB

系统文件

属性

STANDARD_INFORMATION

ATTRIBUTE_LIST

FILE_NAME

VOLUME_VERSION

OBJECT_ID

SECURITY_DESCRIPTOR

VOLUME_NAME

VOLUME_INFORMATION

DATA

INDEX_ROOT

INDEX_ALLOCATION

BITMAP

SYMBOL_LINK

REPARSE_POINT

EA_INFORMATION

EA

PROPERTY_SET

LOGGED_UNTILITY_STREAM

$MFMirr

$Bitmap

$BadClus

NTFS卷初始化

分区结尾与备份主引导扇区

目录结构

基本数据类型

文件记录

文件记录是$MFT文件的基本组成部分,卷中的所有文件都由至少一个文件记录来描述,对于使用多个文件记录的文件,其第一个文件记录叫基本文件记录,其余的叫做扩展文件记录。

文件记录由记录头数个文件属性和结束标志(0xFFFFFFFF)组成。

文件记录头格式:

名字

偏移

尺寸

描述

FR_Sign

0

4

记录签名:

,值为:

‘ELIF’

FR_USOff

4

2

序列号的偏移(M)

FR_USNSz

6

2

序列值个数+1(N)

FR_LSN

8

8

日志文件序列号,该值在记录每次被修改时都会被改动

FR_SN

16

2

记录序列号

FR_LnkCnt

18

2

目录中记录本文件的引用计数,该值只用于基本文件记录

FR_USAOff

20

2

第一个属性数据的偏移

FR_Flags

22

2

标志,该成员可以是以下各值中之一

0x01本记录已经被使用

0x02本记录未使用

0x04不明

0x08不明

FR_Size

24

4

当前记录的尺寸

FR_AllocSz

28

4

当前记录分配的空间的尺寸

FR_BaseFR

32

8

当前文件记录的基本文件记录的索引,

如果当前文件记录是基本文件记录则该值为0,否则指向基本文件记录的记录索引。

注意:

该值的低6字节是MFT记录号,高2字节是该MFT记录的序列号

FR_NxtAttrId

40

2

下一个属性的ID。

下一次将会被添加到文件记录的属性的ID,每次往文件记录中添加属性时该值都会增加,每次文件记录被重新使用时该值都会被清零,第一个值肯定是0

FR_Resvd

42

2

保留(XP新增)

FR_NumOfFR

44

4

不明(XP新增)

FR_USN

M

2

序列号。

该值记录文件记录被修改的次数,每次修改时该值+1,(包括文件被删除操作)该值不能为0

FR_USA

M+2

(N-1)*2

序列值占用的空间的原值

目录记录

  目录记录由标准头和存储目录键及目录数据的数据块组成,在$Boot文件中定义了目录记录的尺寸,这个值通常是4KB(到目录为止没有使用其他值)。

名字

偏移

尺寸

描述

IR_Sign

0

4

记录签名:

,值为:

‘XDNI’

IR_USOff

4

2

序列号的偏移(M)

IR_USNSz

6

2

序列值个数+1(N)

IR_LSN

8

8

日志文件序列号,该值在记录每次被修改时都会被改动

IR_VCN

16

8

当前目录记录在目录存储区中的虚拟簇号

IR_EntryOff

24

4

第一个目录项的偏移

IR_EntrySz

28

4

目录项的尺寸

IR_AllocSz

32

4

为目录项分配的空间的尺寸

IR_Flags

36

1

为1表示有子节点

IR_Resvd

37

3

保留

IR_USN

40

2

序列号

IR_USA

42

2

序列值占用的空间的原值

记录序列号

记录序列号是Microsoft公司为了确保记录数据的可靠性而在NTFS卷中提出的一项技术,在NTFS卷中,所有的记录类型数据(FR、IR)占用的空间都是按扇区尺寸(512字节)对齐。

保护记录数据时,在每512字节的最末2个字节都会写入一个校验值以确保记录中的所有数据都被正确的写入磁盘中,而校验值所在位置的数据被拷贝到记录头之后被称作USA(UpdateSequenceArray)的数据块中,系统将记录数据从磁盘读入内存时将检查每个校验值是否与记录头的中序列号是否相同,如果相同则用USA中相应位置的数据恢复校验值位置的数据,反之则表明该记录被没有正确地修改。

在每次写记录数据时序列号都会加1,当序列号为0时则再加1。

虚拟簇号

非驻留数据中的每个簇都有一个特定的序号,这个序号就叫做虚拟簇号,虚拟簇号0指向数据流的第一个簇。

逻辑簇号

  卷中的每一个簇都有一个特定的序号,这个序号就叫做虚拟簇号,虚拟簇号0指向卷中的第一个簇(引导扇区)。

数据流描述

存放在间隔的簇中的属性数据称为流。

每一个流都由起始簇号和尺寸来描述。

流的起始簇号是相对于前一个流的偏移,该值是一个有符号数。

流描述的格式如下:

名字

偏移

尺寸

说明

SD_Desc

0

1

流描述说明,高4位(M)描述流描述偏移的字节数,低4位(N)描述流描述尺寸的字节数

SD_Size

1

N

当前流的尺寸

SD_Off

N+1

M

当前流相对于上一个流的偏移,如果该值的最高位为1则表示该值是一个负数

一个流描述之后紧随着下一个流描述,如果下一个描述的SD_Desc为0则表示当前描述是最后一个。

一般情况下压缩文件和稀疏文件数据都以流的形式描述。

例1:

通常情况

流描述:

2120ED52248748222128C8DB0

流1:

SD_Desc=21–偏移占2个字节,尺寸占1个字节。

SD_Size=20(1字节)

SD_Off=5ED(2字节)

Offset=5ED

Length=20

流2:

SD_Desc=22–偏移占2个字节,尺寸占2个字节。

SD_Size=748(2字节)

SD_Off=2248(2字节)

Offset=2835(2248+5ED)

Length=748

流3:

SD_Desc=21–偏移占2个字节,尺寸占1个字节。

SD_Size=28(1字节)

SD_Off=DBC8(2字节)

Offset=3FD(2835+FFFFDBC8)

Length=28

流4:

SD_Desc=0。

描述结束标志

小计:

0x20个簇存放在簇号0x5ED开始处

  0x748个簇存放在簇号0x2853开始处

  0x28个簇存放在簇号0x3FD开始处

例2:

压缩流

流描述:

1108400108111008110C10010400

流1:

SD_Desc=11–偏移占1个字节,尺寸占1个字节。

SD_Size=8(1字节)

SD_Off=40(1字节)

Offset=40

Length=8

流2:

SD_Desc=01–偏移占0个字节,尺寸占1个字节。

SD_Size=8(1字节)

SD_Off=-

Offset=-

Length=8

流3:

SD_Desc=11–偏移占1个字节,尺寸占1个字节。

SD_Size=10(1字节)

SD_Off=8(1字节)

Offset=48(40+8)

Length=20

流4:

SD_Desc=11–偏移占个字节,尺寸占1个字节。

SD_Size=C(1字节)

SD_Off=10(1字节)

Offset=58(48+10)

Length=C

流5:

SD_Desc=01–偏移占0个字节,尺寸占1个字节。

SD_Size=4

SD_Off=-

Offset=-

Length=4

流6:

SD_Desc=0。

流描述结束标志。

小计:

0x08个簇存放在簇号0x40开始处

0x08个稀疏簇(未分配空间)

0x10个簇存放在簇号0x48开始处

0x0C个簇存放在簇号0x58开始处

0x04个稀疏簇(未分配空间)

引导扇区与BPB

NTFS卷的第一个重要的数据区是BPB(BIOSParameterBlock),数据区位于卷中第一个个区域:

$Boot文件的第一个扇区中。

该扇区也叫做引导扇区。

引导扇区与BPB结构

名字

偏移

尺寸

描述

BS_jmpBoot

0

3

跳转到引导代码处。

本域允许有以下两种格式:

jmpBoot[0]=0xEB,jmpBoot[1]=0x?

?

jmpBoot[2]=0x90

jmpBoot[0]=0xE9,jmpBoot[1]=0x?

?

jmpBoot[2]=0x?

?

0x?

?

指这里可以是任意值,上述格式是跳转到代码的Intelx86无条件跳转指令,引导代码存放在卷中第一个扇区中BPB表的后面

BS_OEMName

3

8

“NTFS”本域是判别卷是否为NTFS卷的必要条件,NTFS卷中此域必须设置为上述值

BPB_BytsPerSec

11

2

每扇区字节数,该值仅可以从以下值中选取一个:

512、1024、2048、1096。

为了兼容以前的软件,建议使用512这个值

BPB_SecPerClus

13

1

每个分配单元扇区数,大于0而且必须是2的整数次幂,本值可以是1,2,4,8,16,32,64,128。

注意本值必须保证使每簇字节数(BPB_BytsPerSec*BPB_SecPerClus)小于4K。

BPB_RsvdSecCnt

14

2

保留区域中保留的扇区数

BPB_NumFATs

16

1

FAT表的个数,本域是为了保持与FAT/FAT32的BPB兼容而保留,其值固定为0

BPB_RootEntCnt

17

2

为保持兼容性而保留,值固定为0

BPB_TotSec16

19

2

为保持兼容性而保留,值固定为0

BPB_Media

21

1

存储介质代码,对固定磁盘为0xF8,对于可移动介质,其值通常是0xF0,合法的值有0xF0,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF。

BPB_FATSz16

22

2

为保持兼容性而保留,值固定为0

BPB_SecPerTrk

24

2

Int13H调用中的每磁道扇区,本值仅当存储介质按CHS方式寻址且能被Int13H识别才有意义。

BPB_NumHeads

26

2

Int13H调用中的磁头数,其意义同前面的BPB_SecPerTrk。

注意该值的基数是1。

BPB_HiddenSec

28

4

隐藏扇区数,分区每一个扇区相对于分区表的偏移扇区数。

BPB_TotSec32

32

4

为保持兼容性而保留,值固定为0

BS_DrvNum

36

1

Int13H调用的磁盘号参数。

BS_Reserved1

37

1

保留,值为0。

BS_Reserved2

38

2

保留,值80H。

BS_TotSec64

40

8

卷总扇区数。

BS_1stClusOfMFT

48

8

$MFT文件第一个簇的簇号

BS_1stClusOfMFTMirr

56

8

$MFTMirr文件第一个簇的簇号

BS_ClusPerFR

64

4

每个文件记录占用的簇数1

BS_ClusPerDR

68

4

每个目录记录点用的簇数1

BS_Serial

72

8

卷序列号

注1:

每个记录占用的簇数如果为正值则表示该记录占用的簇数;如果为负值则表明记录尺寸小于簇尺寸,此时计算记录尺寸的方法应该是:

记录的尺寸=2^(~每文件记录占用簇数)。

比如:

BS_ClusPerFR=0xF6(-10),此时记录的尺寸是

BytsPerRecord=2^(~0xf6)

=2^10

=1024

系统文件

不同于FAT/FAT32分区固定的数据块布局,NTFS卷中所有的数据都以文件的方式保存,包括引导记录与目录等卷重要数据(在NTFS卷中重要数据块被称为系统文件),这样就允许将卷重要数据存放到卷中的任何地方(除了引导记录),并且对于所有重要数据都有一个标准的方法对其进行操作。

这个特性使得任意改变卷尺寸十分方便(在卷位图文件后加上或减去增减的扇区信息就行了),而且也可以很容易地避免了FAT/FAT32卷中FAT表部分有物理损坏则卷中就会有很大部分空间使用的问题。

对应于重要数据的种类,NTFS分区共有12个系统文件,他们分别是:

名字

描述

$MFT

MasterFileTab主文件表。

该文件记录了卷中所有的文件(包括$MFT自己)的描述信息,通过$MFT文件可以访问卷中的所有信息。

$MFT文件由多个文件记录(FRS)组成。

每个文件的描述信息占用一个或多个文件记录。

对于每一个文件,$MFT用一套被称为属性(Attributes)的记录来保存其信息。

$MFT中前12个文件信息分别记录了12个系统文件的信息,从12-23号记录保留,从24号记录起记录其他文件的信息。

$MFTMirr

Mirrorof$MFT$MFT文件中前4个文件($MFT、$MFTMirr、$LogFile、$Volume)的描述的备份。

本文件主要用于卷数据损坏时恢复卷。

$LogFile

卷事务的日志信息文件。

$Volume

卷基本信息,包括卷名,序列号等信息。

$AttrDef

属性定义,该文件定义了本卷中可用的属性类型。

.(RootDirectory)

NTFS卷的根目录。

$Bitmap

记录卷中所有分配单元的使用情况。

本文件中每一个Bit数据对应一个簇。

$Boot

引导记录,通过本文件的代码系统才能从NTFS卷中启动。

本文件是NTFS卷中唯一一个位置固定的文件,必须置于卷的第一个扇区处。

$BadClus

记录卷中坏簇的信息,本文件是稀疏文件,只包含坏簇的信息。

$Secure

记录卷中用到的安全描述符信息。

$UpCase

本记录Unicode编码下的所有字符的大写的代码,用于比较和排序文件名。

$Extend

本文件是一个目录,其中记录了卷中的对象的GUID及配额等信息。

属性

$MFT文件中的每个记录都是由属性组成。

每个属性由相同的格式构成,首先是一个标准属性记录头,然后存放属性的专用数据。

下面列出$AttrDef中定义的可用到的属性。

类型

操作系统

描述

0x10

STANDARD_INFORMATION

0x20

ATTRIBUTE_LIST

0x30

FILE_NAME

0x40

NT

VOLUME_VERSION

0x40

2000

OBJECT_ID

0x50

SECURITY_DESCRIPTOR

0x60

VOLUME_NAME

0x70

VOLUME_INFORMATION

0x80

DATA

0x90

INDEX_ROOT

0xA0

INDEX_ALLOCATION

0xB0

BITMAP

0xC0

NT

SYMBOL_LINK

0xC0

2000

REPARSE_POINT

0xD0

EA_INFORMATION

0xE0

EA

0xF0

NT

PROPERTY_SET

0x100

2000

LOGGED_UNTILITY_STREAM

标准属性记录头

每个MFT属性记录都有一个标准属性记录头,这个头记录了属性的类型、名字(可选)、有两种格式:

1.驻留属性记录

名字

偏移

尺寸

说明

ATTR_Type

0

4

属性类型。

该值必须是$AttrDef文件中定义的属性列表中的一项

ATTR_Size

4

4

记录尺寸(包括记录头)

ATTR_ResFlag

8

1

属性数据驻留标志,值为0,驻留属性不能被压缩

ATTR_NamSz

9

1

属性名尺寸,该值为0时表示当前属性没有名字

ATTR_NamOff

10

2

属性名相对于属性头的偏移,该值总是固定为0x18

ATTR_Flags

12

2

属性标志,在当前的版本中只支持以下3个标志:

0x0001属性被压缩

0x4000属性被加密

0x8000稀疏属性

注意:

只有非驻留的数据(Data)属性才能被压缩

ATTR_Id

14

2

属性ID,在MFT记录中的每个属性都有一个唯一的ID。

ATTR_DatSz

16

4

属性数据尺寸

ATTR_DatOff

20

2

属性数据相对于属性头的偏移

ATTR_Indx

22

1

属性索引标志

ATTR_Resvd

23

1

保留

ATTR_AttrNam

24

2*N

属性名字Unicode字符串,这个字符串不用在结尾处加0

ATTR_AttrDat

24+2*N

属性数据,所以的数据都应该按双字对齐

2.非驻留属性记录

名字

偏移

尺寸

说明

ATTR_Type

0

4

属性类型。

该值必须是$AttrDef文件中定义的属性列表中的一项

ATTR_Size

4

4

记录尺寸(包括记录头)

ATTR_ResFlag

8

1

属性数据驻留标志,值为0x01,驻留属性不能被压缩

ATTR_NamSz

9

1

属性名尺寸,该值为0时表示当前属性没有名字

ATTR_NamOff

10

2

属性名相对于属性头的偏移,该值总是固定为0x18

ATTR_Flags

12

2

属性标志,在当前的版本中只支持以下3个标志:

0x0001属性被压缩

0x4000属性被加密

0x8000稀疏属性

注意:

只有非驻留的数据(Data)属性才能被压缩

ATTR_Id

14

2

属性ID,在MFT记录中的每个属性都有一个唯一的ID。

ATTR_StartVCN

16

8

本属性中数据流开始的簇号

ATTR_EndVCN

24

8

本属性中数据流最后一簇的簇号

ATTR_DatOff

32

2

数据流描述相对于属性头的偏移,数据应该按双字对齐

ATTR_CmpSz

34

2

压缩单元的尺寸。

压缩单元的尺寸必须是2的整数次幂,为0表示未压缩

ATTR_Resvd

36

4

保留

ATTR_AllocSz

40

8

属性记录数据块分配的空间的尺寸,该尺寸按簇尺寸对齐

ATTR_ValidSz

48

8

属性记录数据块的实际尺寸

ATTR_InitedSz

56

8

属性记录数据块已经初始化数据的尺寸,到目前为止该值都与属性记录数据块分配的尺寸相同

ATTR_AttrNam

64

2*N

属性名的UNICODE字符串,该字符串不以0结尾

ATTR_DataRuns

64+2*N

属性数据流描述

注意

1.只有非驻留的数据(Data)属性才可以被压缩或是稀疏类型。

2.只有驻留属性才有索引标志,是否表示只有驻留属性才能被索引?

STANDARD_INFORMATION

在老的NTFS版本中,STARDAND_INFORMATION属性只用于存放文件的时间和DOS文件属性信息。

在Windows2000中新引进了4个域来描述配额、安全、文件尺寸和日志信息。

属性描述如下表:

名字

偏移

尺寸

描述

SI_Head

-

-

标记记录头

SI_CreatTime

0

8

文件创建时间

SI_AlterTime

8

8

文件最后一次修改时间

SI_MFTChgTime

16

8

文件的MFT记录修改的时间

SI_ReadTime

24

8

最后一次访问的时间

SI_DOSAttr

32

4

DOS文件属性,可以是以下各值的组合:

0x0001只读

0x0002隐藏

0x0004系统

0x0020归档

0x0040设备

0x0080常规

0x0100临时文件

0x0200稀疏文件

0x0400重解析点

0x0800压缩

0x1000离线

0x2000无内容索引

0x4000加密

SI_MaxVer

36

4

文件可用的最大版本号,此值为0表示版本功能被禁止(目前未使用?

SI_Ver

40

4

文件版本号,如果最大版本号为0则值也必须为0

SI_ClassId

44

4

不明(目前未使用?

SI_OwnerId

48

8

文件拥有者的ID,本ID是$Quota文件中$O或$Q记录中的键,如果该值为0则表示配额设置被禁止

SI_SecurityId

52

8

安全ID,本值是$Securce文件中$SII索引及$SDS数据流的键

SI_QuotaCharged

56

8

该文件最大可使用的空间配额。

如果该值为0则表示无配额限制

SI_USN

64

8

文件最后一次更新的记录号,该值是$UsnJrnl文件的直接索引,如果该值为0则表示更新日志被禁止

ATTRIBUTE_LIST

当MFT记录中的属性太多太长时,MFT记录就容纳不下这么多属性记录了,这时就只能将属性的数据以非驻留数据的形式存放到卷中的其他位置,如果这样还是存放不下,就必须用到属性表属性了。

存放不下的属性会被转移到一个新分配的MFT记录中,然后在原MFT中加入一个属性表属性以描述如何搜索到当前文件的所有属性。

紧随标准属性头之后存放各属性的描述记录,记录了属性的位置和所在MFT记录,每个属性描述按4字对齐,记录了属性的类型、名字(有名属性)、序号。

属性表属性中不包括对自身的描述。

名字

偏移

尺寸

描述

AL_Head

-

-

标准记录头

AL_RD_Type

0

4

属性类型

AL_RD_Len

4

2

属性描述尺寸

AL_RD_NamLen

6

1

属性名尺寸,值为N

AL_RD_NamOff

7

1

属性名相对于属性描述的偏移

AL_RD_StartVCN

8

8

本属性中数据流开始的簇号

AL_RD_Bas

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

当前位置:首页 > 高等教育 > 工学

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

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