www.138139.cn

返回总目录 上一页 目录页 下一页

解读NTFS(一)


    解读NTFS(一)
NTFS是一个比FAT复杂的多的文件系统,我们一起努力来把它完整的解读出来&nbsp
NTFS的引导扇区也是完成引导和定义分区参数,和FAT分区不同,FAT分区的BOOT记录正常,就显示分区没有错误,即使文件不正确,而NTFS分区&nbsp的BOOT不是分区的充分条件,它要求必须MFT中的系统记录如$MFT等正常该分区才能正常访问。其BPB参数如下表所示。
字节偏移&nbsp长度&nbsp常用值&nbsp意义
0x0B&nbsp字&nbsp0x0002&nbsp每扇区字节数
0x0D&nbsp字节&nbsp0x08&nbsp每簇扇区数
0x0E&nbsp字&nbsp0x0000&nbsp保留扇区
0x10&nbsp3字节&nbsp0x000000&nbsp总为0
0x13&nbsp字&nbsp0x0000&nbspNTFS未使用,为0
0x15&nbsp字节&nbsp0xF8&nbsp介质描述
0x16&nbsp字&nbsp0x0000&nbsp总为0
0x18&nbsp字&nbsp0x3F00&nbsp每磁盘扇区数
0x1A&nbsp字&nbsp0xFF00&nbsp磁头数
0x1C&nbsp双字&nbsp0x3F000000&nbsp隐含扇区
0x20&nbsp双字&nbsp0x00000000&nbspNTFS未使用,为0
0x28&nbsp8字节&nbsp0x4AF57F0000000000&nbsp扇区总数
0x30&nbsp8字节&nbsp0x0400000000000000&nbsp$MFT的逻辑簇号
0x38&nbsp8字节&nbsp0x54FF070000000000&nbsp$MFTMirr的逻辑簇号
0x40&nbsp双字&nbsp0xF6000000&nbsp每MFT记录簇数
0x44&nbsp双字&nbsp0x01000000&nbsp每索引簇数
0x48&nbsp8字节&nbsp0x14A51B74C91B741C&nbsp卷标
0x50&nbsp双字&nbsp0x00000000&nbsp检验和

MFT中的文件记录大小一般是固定的,不管簇的大小是多少,均为1KB。文件记录在MFT文件记录数组中物理上是连续的,且从0开始编号,所以,NTFS&nbsp是预定义文件系统。MFT仅供系统本身组织、架构文件系统使用,这在NTFS中称为元数据(metadata,是存储在卷上支持文件系统格式管理的数据。&nbsp它不能被应用程序访问,只能为系统提供服务)。其中最基本的前16个记录是操作系统使用的非常重要的元数据文件。这些元数据文件的名字都以“$”开始,所&nbsp以是隐藏文件,在Windows&nbsp2000/XP中不能使用dir命令(甚至加上/ah参数)像普通文件一样列出。在WINHEX中带有NFI.EXE,用此工具可以显示这些记录与文件的&nbsp对应关系,下一次再详细解释。&nbsp

这些元数据文件是系统驱动程序管理卷所必需的,Windows&nbsp2000/XP给每个分区赋予一个盘符并不表示该分区包含有Windows&nbsp2000/XP可以识别的文件系统格式。如果主文件表损坏,那么该分区在Windows&nbsp2000/XP下是无法读取的。为了使该分区能够在Windows&nbsp2000/XP下能被识别,就必须首先建立Windows&nbsp2000/XP可以识别的文件系统格式即主文件表,这个过程可通过高级格式化该分区来完成。Windows以簇号来定位文件在磁盘上的存储位置,在FAT&nbsp格式的文件系统中,有关簇号的指针包含在FAT表中,在NTFS中,有关簇号的指针则包含在$MFT及$MFTMirr文件中。

NTFS使用逻辑簇号(Logical&nbspCluster&nbspNumber,LCN)和虚拟簇号(Virtual&nbspCluster&nbspNumber,VCN)来对簇进行定位。LCN是对整个卷中所有的簇从头到尾所进行的简单编号。用卷因子乘以LCN,NTFS就能够得到卷上的物理字节偏&nbsp移量,从而得到物理磁盘地址。VCN则是对属于特定文件的簇从头到尾进行编号,以便于引用文件中的数据。VCN可以映射成LCN,而不必要求在物理上连&nbsp续。

在NTFS卷上,跟随在BPB后的数据字段形成一个扩展BPB。这些字段中的数据使得&nbspNtldr能够在启动过程中找到主文件表MFT(Master&nbspFile&nbspTabl&nbsp)。在NTFS卷上,MFT并不象在FAT&nbsp16卷和FAT&nbsp32卷上一样,被放在一个预定义的扇区中。由于这个原因,如果在MTF的正常位置中有坏扇区的话,就可以把MFT移到别的位置。但是,如果该数据被破坏,&nbsp就找不到MFT的位置,Windows&nbsp2000假设该卷没有被格式化。
因此,如果一个ntfs的卷提示未格式化,可能并未破坏MFT,依据BPB的各字段的意思是可以重建BPB的。
NTFS的缺省簇的大小
卷大小&nbsp每簇的扇区&nbsp缺省的簇大小&nbsp
小于等于512MB&nbsp1&nbsp512字节&nbsp
513MB~1024MB(1GB)&nbsp2&nbsp1024字节(1KB)&nbsp
1025MB~2048MB(2GB)&nbsp4&nbsp2048字节(2KB)
大于等于2049MB&nbsp8&nbsp4KB
从上面可以看出,也就是说不管驱动器多大&nbspNTFS&nbsp簇的大小不会超过&nbsp4KB
NTFS文档:文档属性定义

每个文档属性都由以下部分组成:

一个由该属性的实际值组成的被称为“流”的重要的字节序列,元数据可访问该流。

文件中的每个文件属性都可能会有一个名字:在这种情况下,在命令行方式下可以通过语法“文件名:属性名”来访问该流(这也是文件名中不能使用“:”的原因)。Windows&nbspNT®&nbsp使用以下在元数据文件$AttrDef中预定义的文件属性列表(一般会有一个未命名流,为缺省流,未命名流只能有一个,而命名流可以有多个,NTFS支持多流文件):&nbsp

10&nbsp$STANDARD_INFORMATION&nbsp(标准信息)

20&nbsp$ATTRIBUTE_LIST&nbsp(属性列表)

30&nbsp$FILE_NAME&nbsp(文件名)

40&nbsp$VOLUME_VERSION&nbsp(卷版本)

50&nbsp$SECURITY_DEscriptOR&nbsp(安全描述符)

60&nbsp$VOLUME_NAME&nbsp(卷名)

70&nbsp$VOLUME_INFORMATION&nbsp(卷信息)

80&nbsp$DATA&nbsp(数据)

90&nbsp$INDEX_ROOT&nbsp(索引根)

A0&nbsp$INDEX_ALLOCATION&nbsp(索引分配)

B0&nbsp$BITMAP&nbsp(位图)

C0&nbsp$SYMBOLIC_LINK(符号链接)&nbsp

D0&nbsp$EA_INFORMATION&nbsp(?信息)

E0&nbsp$EA&nbsp

属性流结构

每个文件属性都分为两部分:尽管这两部分属性在文件记录的属性列表中以倒序方式进行记录,但是为了更好的理解它,让我们按下面的顺序进行介绍:&nbsp

内容部分:

它的结构总是以属性名开始(N字节长),在属性名之后定义该属性是否为常驻属性。当文件属性的数据流就存储在其属性名后时,它就是常驻属性,这样,对于那&nbsp些流较小且不会增长的文件属性就可以提供更佳的访问次数。如果一个文件属性是非常驻的,那么其流就存储在一个或多个扩展或称为运行中。运行是一个在逻辑簇&nbsp号上连续的区域。为访问这些运行,NTFS紧跟在文件属性名后存储有一个称为运行列表的表。

头部:

从头部开始的偏移长度描述:&nbsp

0&nbsp4&nbspType&nbsp(类型)

4&nbsp4&nbspLength&nbsp(长度)

8&nbsp1&nbspNon-resident&nbspflag&nbsp(非常驻标志)

9&nbsp1&nbspN=Name&nbsplength&nbsp(文件名长度)

A&nbsp2&nbspOffset&nbspto&nbspthe&nbspcontent&nbsppart&nbsp(相对内容部分的偏移值)

C&nbsp2&nbspCompressed&nbspflag&nbsp(压缩标志)

E&nbsp2&nbspIdentificator&nbsp(标识)

文件名长度:

00&nbsp表示文件属性没有命名。&nbsp

压缩标志:在NTFS中,数据压缩是在文件属性级别上实现的,这就意味着,如果出现意外,你也不会释放出很多的数据。这样,尽管只是对文件进行压缩,但压缩文件同时就意味着其属性数据也一样被压缩。从现在开始,&nbsp其头部的安排依赖文件的常驻属性:

对一个常驻属性来说,从头部开始的偏移描述如下:&nbsp

10&nbsp4&nbspLength&nbspof&nbspthe&nbspstream&nbsp(流长度)

14&nbsp2&nbspOffset&nbspto&nbspthe&nbspstream&nbsp(流偏移)

16&nbsp2&nbspIndexed&nbspflag&nbsp(索引标志)

索引标志:

文件属性通过一个索引入口进行索引。

对于一个非常驻的文件属性,从头部开始的偏移描述如下:

10&nbsp8&nbspStarting&nbspVCN&nbsp(起始VCN)

18&nbsp8&nbspLast&nbspVCN&nbsp(结束VCN)

20&nbsp2&nbspOffset&nbspto&nbspthe&nbsprunlist&nbsp(运行列表偏移)

22&nbsp2?&nbspNumber&nbspof&nbspcompression&nbspengine&nbsp?&nbsp(压缩引擎号)

28&nbsp8&nbspAllocated&nbspsize&nbspof&nbspthe&nbspstream&nbsp(为流分配的单元大小)

30&nbsp8&nbspReal&nbspsize&nbspof&nbspthe&nbspstream&nbsp(实际的流大小)

38&nbsp8&nbspInitialized&nbspdata&nbspsize&nbspof&nbspthe&nbspstream&nbsp(流已初始化大小)

VCN&nbsp:Virtual&nbspCluster&nbspNumber(虚拟簇号)的缩略词。VCN是一个与非常驻属性相关联的概念。VCN从文件属性流的第一个运行的第一个簇(VCN&nbsp0)到最后一个运行的最后一个簇进行编号。&nbsp当某个运行列表非常大,文件属性不能放在一个文件记录中时,描述文件的文件属性就会存储在几个文件记录中,运行列表也分成几个小片。起始VCN域和结束&nbspVCN域都用于定位其文件记录指示—即运行列表—运行所指定的VCN&nbsp。

注:如果属性可以放在一个文件记录内,则结束VCN域(这种情况下没有使用)可能是“00&nbsp00&nbsp00&nbsp00&nbsp00&nbsp00&nbsp00&nbsp00”。&nbsp

压缩引擎的数量:

为达到最好的压缩比率,NTFS可以根据不同类型的数据使用不同的压缩引擎。当前的压缩引擎使用值04。

为流分配的单元大小:它几倍于卷上用来存储文件属性流所描述的分配空间。

如果流没有压缩,它就是数倍于簇空间大小的实际大小,相反,则比较小。&nbsp

流的实际大小:

文件属性流在压缩前的大小。&nbsp

流的初始化大小:&nbsp

这是文件属性流的压缩后的大小(总是低于分配大小)。如果此流未被压缩,就是它的实际大小&nbsp。

注意:&nbsp

常驻文件属性从不被压缩(也没有压缩引擎号域),因为它的流太小。&nbsp

信息是足够的:名字长+内容部分的偏移值&nbsp=到流的偏移值(常驻属性)或者到运行列表的偏移值(非常驻悔改)。&nbsp

址163164.cn 微信1631640 QQ3149886

返回总目录 上一页 目录页 下一页