您好,欢迎访问三七文档
一、NTFS系统结构NTFS是WindowsNT引入的新型文件系统,如果您是一位熟悉FAT磁盘格式的专业人士,您可能会觉得NTFS系统的思想蹩脚而晦涩,如果您对FAT格式一无所知,那么恭喜您,您会更快的了解这种更有效率的磁盘格式。NTFS的结构复杂,内容繁多,笔者仅对NTFS卷上的底层结构做分析,并提供卷上数据删除的特征状态供大家参考。现在,我们首先来建立了解NTFS需要的基本概念。1.0基本结构及基本概念在NTFS中,文件以簇的形式分配。最小的单位为扇区,N个扇区为一簇。其中,N的值可以通过BPB(引导扇区)读出(以下会详细介绍)。1.0.1卷与簇表1卷与簇的关系卷大小(分区大小)每簇的扇区缺省的簇大小小于等于512MB1512字节513MB~1024MB(1GB)21024字节(1KB)1025MB~2048MB(2GB)42048字节(2KB)大于等于2049MB84KB4表1卷与簇的关系从上面可以看出,也就是说不管驱动器多大NTFS簇的大小不会超过4KB。1.0.2NTFS的基本数据结构NTFS的数据大体上可分为4个部分(1)Partitionbootsector(引导扇区,又称BPB),此部分为所有磁盘格式都共有,占用一个扇区,但是具体的内容当然各不相同(见表3)。(2)MasterFileTable(主文件列表,MFT),它是对卷上所有文件的记录,每一个文件对应一个记录项,理论上占用该卷12%的空间。(3)Systemfiles(系统文件),NTFS系统一共有16个系统文件,和8个保留文件。(4)Filearea(数据区),留给用户的空间。Partitionbootsector引导扇区MasterFileTable主文件列表Systemfiles系统文件Filearea用户文件区(数据区)表2NTFS的磁盘分配情况1.0.3NTFS中关于目录的说明NTFS中目录也是以文件的形式存在的。因此,每一个目录也可以看作一个文件。如果您熟悉FAT,那么此时您可能会觉得很别扭,因为在FAT中,文件是以目录-文件的树型结构联系起来的。但是,您必须相信的是,NTFS将会提供比搜索树更快的读写方式。1.1引导扇区字节偏移长度(字节)常用值意义0X0030XEB5290JMP指令0X034NTFS文件系统ID0X0B20X0002每扇区字节数0X0D10X08每簇扇区数0X0E20X0000保留扇区0X1030X000000总为00X1320X0000NTFS未使用,为00X1510XF8介质描述0X1610X0000总为00X1820X3F00每磁道扇区数0X1A20XFF00磁头数0X1C40X3F000000隐含扇区0X2040X00000000NTFS未使用,为00X2440X80008000NTFS未使用,为00X2880X4AF57F0000000000扇区总数0X3080X0400000000000000$MFT的逻辑簇号0X3880X54FF070000000000$MFTMirr的逻辑簇号0X4040XF6000000每MFT记录簇数0X4440X0100000每索引簇数0X4880X14A51B74C91B741C卷标0X5040X00000000校验和0X54430略引导代码0X1FE20X55AA签名表3NTFS引导扇区说明1.2MFT(主文件表)MFT是一个对应的数据库,由一系列的文件记录组成。卷中每一个文件都有一个文件记录(对于大型文件还可能有多个记录与之相对应)。主文件表本身也有它自己的文件记录。如果您还不胜了解,那么我们来打个比喻。假设一个班有30个人,老师那里有一本花名册,记录了每个人的名字,年龄,每天出勤的情况和科目成绩等等。把每个人看做每一个文件,那么那本花名册就是这里的MFT。当然,事实往往是复杂而多变的,MFT中包含文件的哪些信息?这些信息又是如何关联的?这些问题,我们会一个个解决。现在首先对MFT做几点必要的说明:(1)实际上,MFT自身也是一个文件,因此,主文件列表的第一个记录就是它自身。所以,刚才的例子其实不太贴切,因为事实上,花名册也是人,那么好吧,我们假设这本花名册在老师的脑子里。这样,您可以知道,既然老师也是人,那么其实老师也是一个文件。(2)MFT的每个记录都有一个编号,这里我们称它为ID号。这个ID从0开始。我们知道MFT自身是NTFS系统的第一个文件,所以文件$MFT的ID号为0。(3)$MFT和其他23个文件一起(共24个),组成所谓的“Metafiles”(元文件,也是之前提到的Systemfiles,系统文件)。这24个文件中,前16(ID为0-15)个文件是固定的,剩下的8个文件为保留文件。我们可以假设,这16个系统文件为此班的任课老师,因为虽然他们也是人,但是属性跟普通的同学不一样,他们管理着整个卷的活动方式,正如老师们管理着整个班级一样。(4)用户的文件(也包括目录)的MFT中的ID号从24开始排。(5)用户每添加一个文件ID号加1,当某文件被删除时,与之对应的MFT记录将被空出来,如果此时再次添加文件,系统会优先填充ID小的空位。正如,大家上课的时候都会抢前排的位子坐,但是坐定之后就不能换位子了。(6)无论簇的大小,文件记录大小都是1K,老师脑中的花名册对每个人都是公平的。(7)理论上$MFT在卷中的分配空间(占12%)。(8)逻辑上,$MFT在卷中会占用一块连续的空间,但实际情况$MFT可能会被分散在磁盘的几个不同的区域。甚至,可能在元文件的部分就被拆分开。据笔者分析,这些情况的发生可能由于卷上的文件不断增加,最先开辟的$MFT文件已经用完,系统会再次开辟空间存放文件记录。另一种情况是,卷是由FAT或者其他格式转化而来,当卷空间不足的时候,也可能将MFT分散存储。1.2.1MFT中的元文件(固定)以下是元文件的列表。其中ID为0-15的文件为系统文件,用户文件从第24个MFT记录开始排。序号(ID)元文件功能0$MFT主文件列表本身1$MFTMirr主文件表的部分镜像2$LogFile日志文件3$Volume卷文件4$AttrDef属性定义列表5$Root根目录6$Bitmap位图文件7$Boot引导文件8$BadClus坏簇文件9$Secure安全文件10$UpCase大写文件11-15$Extend扩展文件(一共5个文件)16-23保留表4NTFS元文件1.2.2NTFS中MFT的备份在NTFS中,因其前16个文件的重要性,对它们的MFT记录在文件区有一个备份。如图:图1MFT的备份1.2.3NTFS中的$BITMAP(位图)文件在元文件中,除了$MFT文件还有一个位图文件十分重要。文件$Bitmap标识的是该卷中簇的占用情况。它用一位代表一簇。为0代表此簇空闲,为1代表此簇已使用。这样可以更合理的分配磁盘空间。当文件被删除,它所占用的簇对应的为会被清空(置0)。NTFS通过这个文件管理卷的使用情况。二、文件记录(MFT记录)详解相信对NTFS您已经有一个大致的了解,但是对老师脑中的花名册是不是充满了好奇和期待呢?简单的说,花名册清楚描述了班里每一个人的状况。描述的每一个项目在这里被叫做属性。NTFS将文件作为属性、属性值的集合来处理。每个属性由单个的流(stream)组成,即简单的字符排列。严格的说,NTFS并不对文件进行操作,而只对属性流进行读写。可以想想的是,花名册的大小有限(因为花名册是用来查询的),而文件的属性可能很大(对于那些调皮的学生,老师总要花费更多的心血),因此,当文件属性太大的时候,NTFS系统会将该属性值存放到卷中某个位置,而花名册中的属性只会记录该属性索引到外部的地址,以及索引区的大小。这种“装不下”的属性又被称为文件的属性又分为“非常驻属性”。与之相反,能够保存在“花名册”中的属性又叫做“常驻属性”。2.1文件的存储我想我已经清楚的向您展示了MFT的全貌,再来回顾一下,文件$MFT本身是一个文件(老师也是人),但是它亦是卷上每个文件的记录集合(花名册),每个文件拥有1K的空间(老师是公平的),用来记录文件属性,包括常驻属性和非常驻属性。那么您现在是不是有老大一个问号,我一直在强调文件的记录,那么文件的真实数据是如何存放的呢?想要知道这一点,就要请您耐心的看完下面对MFT属性的介绍。它将向您展示,这本花名册的精妙之处。2.2文件的MFT属性介绍MFT的内容由不同的属性组合而成。以下是一个真实的MFT记录。现在,我们来剖析一下它的属性内容。表5是这MFT记录的属性列表。对于每一个MFT记录来说,都会包含几种属性,但不可能包含所有的属性。老师当然根据学生不同的特点设计花名册的属性。属性号属性名属性描述0X10$STANDRD_INFORMATION(标准属性)包括基本文件属性,如只读、存档;时间标记,如文件的创建时间和最近一次修改的时间;有多少目录指向本文件0X20$ATTRIBUTE_LIST(属性列表)当一个文件需要使用多个MFT文件记录时,用来表示该文件的属性列表0X30$FILE_NAME(文件名属性)这是以Unicode字符表示的,由于MS-DOS不能正确识别Win32子系统创建的文件名,当Win32子系统创建一个文件名时,MTFS会自动生成一个备用的MS-DOS文件名,所以一个文件可以有多种文件名属性。0X40$VOLUME_VERSION(卷版本)卷版本号0X50$SECURITY_DEscriptOR(安全描述符)这是为了向后兼容而被保留的,主要用于保护文件以防止未授权访问。0X60$VOLUME_NAME(卷名)卷名称或卷标识0X70$VOLUME_INFORMATION(卷信息)卷信息0X80$DATA(数据属性)这是文件的内容0X90$INDEX_ROOT(索引根属性)索引根0XA0$INDEX_ALLOCATION(索引分配属性)索引分配0XB0$BITMAP(位图属性)位图0XC0$SYMBOLIC_LINK(符号链接)符号链接0XD0$EA_INFORMATION(EA信息)扩充属性信息:主要为与OS/2兼容0XE0$EA扩充属性:主要为与OS/2兼容0X100$OBJECT_ID对象ID:一个具有64个字节的标识符,其中最低的16个字节对卷来说是唯一的表5NTFS卷上常用属性说明以下是一个实际的MFT记录,我们通过对它的分析向您展示MFT记录的属性。46494c453000030017cd131a00000000头属性0100010038000100b00100000004000000000000000000000600000000000000bb020000000000001000000060000000标准头00001800000000004800000018000000属性e0e3e1a066e9c301e0e3e1a066e9c301e0e3e1a066e9c301e0e3e1a066e9c301060000000000000000000000000000000000000000000000000000000000000000000000000000003000000068000000文件名00001800000003004a00000018000100属性0500000000000500e0e3e1a066e9c301e0e3e1a066e9c301e0e3e1a066e9c301e0e3e1a066e9c301004000000000000000400000000000000600000000000000040324004d004600540000000000000080000000680000000100400000000100数据流0000000000000000f11f000000000000属性40000000000000000020ff0100000000001cff0100000000001cff0100000000214806243101f3aa023101fd7
本文标题:NTFS底层结构
链接地址:https://www.777doc.com/doc-5649472 .html