NTFS文件系统结构分析
ntfs文件系统1
一,ntfs文件系统nt文件系的统主要特征是在引导记录了描述的。
这些文件系统从引导扇区的位置开始直至这些磁道加上卷(分区)里的磁道区域。
分区是由簇构成,而且只能是簇(512字节)的整数倍。
每个分区的开始地址是(逻辑)0簇。
任何(软件的磁盘)定位系统都是用簇而不是磁道号。
各种(磁盘)信息储存在文件分配表(MFT)里。
文件分配表的位置在引导扇区的“第一文件分配表”表项里给出。
文件分配表是一个数据库,包含了此分区的所有文件及目录的信息。
每一个表项是1024字节(fat32是4个字节,fat16是2个字节,fat12是1.5个字节)。
每一个表项记录一个文件或目录(包括文件分配表自己),并且有一个记录号等于文件分配表的位置除以1024。
文件分配表的表项由一个表头和表示文件或目录属性的列表组成。
这些属性描述了文件或目录的名称、时间、大小等。
主要的属性如下:10 Standard information: contains time stamps and DOS attributes,30 File name: contains the file's name for different name spaces (usually NT's native Unicode file name and DOS compatible DOS file name),80 Data: if the entry represents a file, this attribute contains the file's data.90 Index root: if the entry is a directory, this attribute describes the root of a binary tree in which the directory entries are located,A0 Index allocation: if the entry is a directory, this attribute contains a list of file names.这些属性表比1024字节大,意味着一些属性必须记录在文件分配表表项外。
全面了解NTFS文件系统结构
解读NTFSNTFS是一个比FAT复杂的多的文件系统,我们一起努力来把它完整的解读出来NTFS的引导扇区也是完成引导和定义分区参数,和FAT分区不同,FAT分区的B OOT记录正常,就显示分区没有错误,即使文件不正确,而NTFS分区的BOOT不是分区的充分条件,它要求必须MFT中的系统记录如$MFT等正常该分区才能正常访问。
其BPB参数如下表所示。
字节偏移长度常用值意义0x0B 字 0x0002 每扇区字节数0x0D 字节 0x08 每簇扇区数0x0E 字 0x0000 保留扇区0x10 3字节 0x000000 总为00x13 字 0x0000 NTFS未使用,为00x15 字节 0xF8 介质描述0x16 字 0x0000 总为00x18 字 0x3F00 每磁盘扇区数0x1A 字 0xFF00 磁头数0x1C 双字 0x3F000000 隐含扇区0x20 双字 0x00000000 NTFS未使用,为00x28 8字节 0x4AF57F0000000000 扇区总数0x30 8字节 0x0 $MFT的逻辑簇号0x38 8字节 0x54FF0000 $MFTMirr的逻辑簇号0x40 双字 0xF6000000 每MFT记录簇数0x44 双字 0x01000000 每索引簇数0x48 8字节 0x14A51B74C91B741C 卷标0x50 双字 0x00000000 检验和MFT中的文件记录大小一般是固定的,不管簇的大小是多少,均为1KB。
文件记录在MFT文件记录数组中物理上是连续的,且从0开始编号,所以,NTFS是预定义文件系统。
MFT仅供系统本身组织、架构文件系统使用,这在NTFS中称为元数据(metadata,是存储在卷上支持文件系统格式管理的数据。
它不能被应用程序访问,只能为系统提供服务)。
其中最基本的前16个记录是操作系统使用的非常重要的元数据文件。
这些元数据文件的名字都以“$”开始,所以是隐藏文件,在Windows 2000/XP中不能使用dir命令(甚至加上/ah参数)像普通文件一样列出。
NTFS文件系统结构分析
NTFS元文件 元文件
• • • • • • $MFT :中的第一个记录是$MFT自身。 $MFTMirr: 主文件表的部分镜像 $LogFile (日志文件),该文件是NTFS为实现可恢复性和安全性而设计。在系统失败时 能恢复NTFS卷。 $Volume(卷文件),它包含卷名、NTFS的版本和一个表明该磁盘是否损坏的标志位。 (NTFS系统以此决定是否需要调用Chkdsk程序来进行修复) $AttrDef:(属性定义表),其中存放着卷所支持的所有文件属性,并指出他们是否可以 被索引和恢复等。 $Root(跟目录),其中保存着该卷跟目录下的所有文件和目录的索引。
NTFS的元文件 的元文件
• NTFS系统中,文件按照簇进行分配,簇大小在格式化的时候由格式化 程序根据卷的大小自动进行分配。 • 文件通过主文件表MFT来确定文件在磁盘上的存储位置。主文件表是一 个对应的数据库,由一系列文件记录组成,卷中每个文件都有一个文件 记录。第一个文件记录称为基本文件记录,其中存储有其他扩展文件记 录的一些信息。文件表本身也有它自己的文件记录。 • MTF中的文件记录大小一般固定为1KB,文件记录在MFT文件记录数组 中物理上是连续的,从0开始编号。
• 1.容错性:NTFS可以自动地修复磁盘错误而不会显示出错信 息. • 2.安全性:NTFS有许多安全性能方面的选项,可以阻止没有授 权的用户访问文件. • 3.EFS提供对存储在NTFS分区的文件进行加密的功能 • 4.用户可以选择压缩单个文件整个文件夹. • 5.磁盘配额:就是管理员可以对本域中的每个用户所能使用 的磁盘空间进行定额限制,即每个用户只能使用最大定额范 围内的磁盘空间.
属性头
• 每个属性又分为属性头和属性内容两部分,属性头给出了该 属性的结构信息。 • 有的属性内容存储在记录项中(如文件名),称为常驻属性。 有的属性内容很大,需要在MFT外另外开辟空间存储(如 文件数据),则称为非常驻属性。 • 有的属性在属性头之后列出了属性名,而有的则没有。
NTFS文件解析系统的简单分析
NTFS文件解析系统的简单分析正如我们所知道的,目前主流anti-rootkit检测隐藏文件主要有两种方法,一种是文件系统层的检测(像IceSword自己构造irp包发到文件系统驱动),另一种就是磁盘级别的低级检测,直接对磁盘的数据进行分析,比如SnipeSword、filereg和unhooker.最近对第二种方法的一部分(及NTFS文件系统的解析)做了一些学习,于是就写点学习的东西与大家分享,其中有很多错误和不足希望大牛们指出。
(1)准备工作――获取分区的一些基本参数我们可以用CreateFile打开某个盘,读取偏移为0的扇区的数据。
具体的数据结构为:typedef struct tag_NTFSBPB{BYTE bJmp[3];//跳转指令BYTE bNTFlags[4]; // 文件系统NTFS的为"NTFS"BYTE bReserve1[4]; //一般为四个空格WORD wBytePerSector;//每扇区字节数BYTE bSectorPerCluster//;每簇扇区数WORD wReserveSectors;//保留扇区数BYTE bFatNum; // 总是0WORD wRootDirNum; //总是0WORD wSectorOfParti; //总是0BYTE bMedium;//WORD wSectorPerFat; //总是0WORD wSectorPerTrack;//WORD wHeadNum;//DWORD dwHideSector;//DWORD dwSectoOfParti; //总是0BYTE bDeviceFlag;//BYTE bReserve2;//WORD wReserve3;//ULONGLONG ullSectorsOfParti; //扇区总数ULONGLONG ullMFTAddr;//$MFT的起始逻辑簇号ULONGLONG ullMFTMirrAddr;// $MFT的起始逻辑簇号BYTE bClusterPerFile;//BYTE bReserve4[3];//DWORD dwClusterPerINDX;//BYTE bSerialID[8];//} NTFSBPB, *LPNTFSBPB;其中最重要的应该就是通过ullMFTAddr获得$MFT的起始逻辑簇号进而找到根图(1)目录的位置在进行分析。
数据恢复技术分析NTFS分区结构
二、主控文件表与元文件
在NTFS分区中,最重要的就是主控文件表(MFT), 它记载了所有文件的属性信息,甚至包括数据, 有点类似于FAT分区的文件目录表。 为了防止遭到破坏,NTFS分区将MFT的位置移到了 分区的中间,并在引导扇区中给出了它的簇号。 我们在恢复数据的时候,就是依靠MFT来完成的。
分析NTFS分区结构
M6-1 本单元主要内容
一
NTFS分区结构
二 主控文件表与重难点
重点
NTFS分区概述 NTFS引导扇区分析 恢复NTFS引导扇区的方法 NTFS元文件介绍
难点
NTFS引导扇区BPB参数 NTFS元文件的概念和作用
LCN
101
102
106
107
108
221
一、NTFS分区结构
NTFS分区不再设管理控制区域,分区的0扇区便是 0簇,全部空间都是数据区域。分区中承担管理控 制信息的数据块被组织成文件,灵活地存放在任 意一个位置。只有BOOT区域比较特殊,由于0扇区 仍是引导扇区,因此BOOT区域始终位于分区前端。
在NTFS分区中,引入了卷概念。卷可以看成是分 区的升级版,是为了解决某些分区限制而提出的 概念,卷的操作和使用和分区是一样的。 卷分为简单卷和动态卷两种,简单卷就是一个普 通分区,而动态卷则可以实现一些高级功能,比 如可以将多个分区或者磁盘组织成一个卷,能够 动态增长容量等,使其可以支持服务器存储所需 的海量存储空间。
11
12~15 16~23 24~?
$ExtMD
$Extended\
扩展元数据目录(Extended metadata directory)
NTFS文件系统结构分析
NTFS文件系统结构分析在NTFS文件系统中,文件存取是按簇进行分配,一个簇必需是物理扇区的整数倍,而且总是2的整数次方。
NTFS文件系统并不去关心什么是扇区,也不会去关心扇区到底有多大(如是不是512字节),而簇大小在使用格式化程序时则会由格式化程序根据卷大小自动的进行分配。
文件通过主文件表(MFT)来确定其在磁盘上的存储位置。
主文件表是一个对应的数据库,由一系列的文件记录组成--卷中每一个文件都有一个文件记录(对于大型文件还可能有多个记录与之相对应)。
主文件表本身也有它自己的文件记录。
NTFS卷上的每个文件都有一个64位(bit)称为文件引用号(File Reference Number,也称文件索引号)的唯一标识。
文件引用号由两部分组成:一是文件号,二是文件顺序号。
文件号为48位,对应于该文件在MFT中的位置。
文件顺序号随着每次文件记录的重用而增加,这是为NTFS进行内部一致性检查而设计的。
NTFS使用逻辑簇号(Logical Cluster Number,LCN)和虚拟簇号(Virtual Cluster Number,VCN)来进行簇的定位。
LCN是对整个卷中所有的簇从头到尾所进行的简单编号。
卷因子乘以LCN,NTFS就能够得到卷上的物理字节偏移量,从而得到物理磁盘地址。
VCN则是对属于特定文件的簇从头到尾进行编号,以便于引用文件中的数据。
VCN可以映射成LCN,而不必要求在物理上连续。
NTFS的目录只是一个简单的文件名和文件引用号的索引,如果目录的属性列表小于一个记录的长度,那么该目录的所有信息都存储在主文件表的记录中,对于大于记录的目录则使用B+树进行管理。
主文件表中的基本文件记录中有一个指针指向一个存储非常驻索引缓冲--包括该目录下所有下一级子目录和文件的外部簇,而B+树结构便于大型目录中文件和子目录的快速查找。
在NTFS中,所有存储在卷上的数据都包含在文件中,包括用来定位和获取文件的数据结构,引导程序和记录这个卷的记录(NTFS元数据)的位图,这体现了NTFS的原则:磁盘上的任何事物都为文件。
NTFS文件系统实例分析
NTFS文件系统实例分析一、基本情况NTFS文件系通过主文件$MFT管理文件,每个文件都有很多属性,磁盘上每建立1个文件,在$MFT中记录文件的属性,文件记录大小都是1KB,小文件(小于1KB)的全部属性都存放在$MFT中,大文件(1K以上)在它的MFT基本文件记录中,其80数据属性有数据运行(dataRuns或一个盘区(extent),)指针(包含数据所在的起始簇号和簇的大小),也称为流描述,当流描述的第一个字节为0里就表示该流已经结束。
NTFS使用逻辑簇号(LCN,Logical Cluster Number)和虚拟簇号(VCN,Virtual Cluster Number)来对簇进行定位。
LCN是对整个卷中的所有的簇从头到尾进行简单编号,VCN是对特定文件的簇从头到尾进行编号,以便引用文件中的数据。
文件MFT记录的结束标志为ff ff ff ff。
二、举例建立一个小文本文件dd.txt和一个大文件large.txt。
1、文件属性修改打开主文件$MFT,按Unicode编码,向下查找文本,搜索文件名dd.txt,读出文件dd.txt记录,查看0x10属性,在偏移0x38处就是该文件属性,长度为4字节。
改变此字节就可改变文件是的只读、隐藏、系统等属性。
2、小文件(小于1KB,文件所有属性在MFT中的一条记录中容纳)打开主文件$MFT,按Unicode编码,向下查找文本,搜索文件名dd.txt,读出文件dd.txt的记录,查看0x80属性,在偏移0x18处就是该文件的内容,在此可直接修改文件内容。
2、大文件(大于1KB)打开主文件$MFT,按Unicode编码,向下查找文本,搜索文件名large.txt,读出文件large.txt的记录,查看0x80属性,在偏移0x10、0x18处分别用8个字节记录文件起始VCN和结束VCN,此例分别是00 00 00 00 00 00 00 00,01 00 00 00 00 00 00 00,说明文件只有0簇和1簇共2簇;在偏移0x20处的2个字节是该文件数据运行的偏移,此处的值为0x40,所以查看偏移0x40处就是文件的第1个运行的描述,该运行分为:子运行1:31 02 C6 3A 0C其中“31”中的“1”表示“31”后面第1个字节的数表示子运行的大小,即该子运行的大小为02簇。
解析ntfs底层结构
解析ntfs底层结构Ntfs是我们经常用的文件系统,不仅在Windows分区中起到了很大的作用。
还在我们经常使用的U盘上也平凡出现,那么我们了解经常使用的ntfs吗?小编就来带大家解析ntfs底层结构。
一、NTFS系统结构NTFS是Windows NT引入的新型文件系统,如果您是一位熟悉FAT磁盘格式的专业人士,可能会觉得NTFS文件系统的思想蹩脚而晦涩,如果您对FAT格式一无所知,那么恭喜您,您会更快的了解这种更有效率的磁盘格式。
NTFS的结构复杂,内容繁多,小编仅对NTFS卷上的底层结构做分析,并提供卷上数据删除的特征状态供大家参考。
现在,我们首先来建立了解NTFS需要的基本数据结构概念。
图一:ntfs1、NTFS的基本数据结构NTFS的数据大体上可分为4个部分(1) Partition boot sector(引导扇区,又称BPB),此部分为所有磁盘格式都共有,占用一个扇区,但是具体的内容当然各不相同(见表3)。
(2) Master File Table(主文件列表,MFT),它是对卷上所有文件的记录,每一个文件对应一个记录项,理论上占用该卷12%的空间。
(3) System files(系统文件),NTFS系统一共有16个系统文件,和8个保留文件。
(4) File area(数据区),留给用户的空间。
Ntfs说起来很复杂,用起来很简单。
我们常常会与其相遇,但都视而不见,以至于mac系统都对它视若无睹。
这是ntfs的悲伤,也是mac的绝情。
mac系统对ntfs格式的磁盘只可以读不可以写入,所以小伙伴们要是心疼ntfs,一直用自己强大的功能默默付出,去无人问津。
就在自己的mac电脑上下载软件ntfs for mac。
帮助ntfs走进mac的心里。
NTFS文件系统结构总览数据恢复迷
NTFS文件系统结构总览数据恢复迷当用户将硬盘的一个分区格式化为NTFS分区时,就建立了一个NTFS文件系统结构。
NTFS文件系统与FAT文件系统一样,也是用簇为基本单位对磁盘空间和文件存储进行管理的。
一个文件总是占有若干个簇,即使在最后一个簇没有完全放满的情况下,也是占用了整个簇的空间,这也是造成磁盘空间浪费的主要原因。
文件系统通过簇来管理磁盘,并不需要知道磁盘扇区的大小,这样就使NTFS保持了与磁盘扇区大小的独立性,从而使不同大小的磁盘选择合适的簇。
NTFS分区也被称为NTFS卷,卷上簇的大小,又称为卷因子,其大小是用户在创建NTFS卷时确定的。
和FAT文件系统一样,卷因子的大小和文件系统的性能有着非常直接的关系。
当一个簇占用的空间太小时,会出现太多的磁盘碎片,这样在空间和文件访问时间上会造成浪费;而相反的当一个簇占用的空间太大时,直接造成了磁盘空间的浪费。
因此,最大限度地优化系统对文件的访问速度和最大限度地减少磁盘空间的浪费是确定簇的大小的主要因素。
簇的大小一定是扇区大小的整数倍,通常是2n(n为整数)。
表4-28是NTFS文件系统中不同卷大小和簇的一般关系。
当然这并不是完全一定的,只是系统格式化磁盘时的默认情况,这个默认的簇的值一般被认为是最能优化系统的值。
表4-28 NTFS卷大小和簇大小关系表卷大小(MB)每簇的扇区默认的簇大小≤512 1 512个字节513~1024 2 1024个字节(1KB)1025~2048 4 2048个字节(2KB)≥20498 4KB当一个分区由FAT卷转变成为一个NTFS卷时,卷因子的大小总是占用一个扇区。
NTFS文件系统使用了逻辑簇号(Logical Cluster Number,LCN)和虚拟簇号(Virtual Cluster Number,VCN)对卷进行管理。
其中LCN是对卷的第一个簇到最后一个簇进行编号,只要知道LCN号和簇的大小以及NTFS卷在物理磁盘中的起始扇区(绝对扇区)就可以对簇进行定位,而这些信息在NTFS卷的引导扇区中可以找到(BPB参数),在系统底层也是用这种方法对文件的簇进行定位的。
NTFS文件系统实例分析
NTFS文件系统实例分析一、基本情况NTFS文件系通过主文件$MFT管理文件,每个文件都有很多属性,磁盘上每建立1个文件,在$MFT中记录文件的属性,文件记录大小都是1KB,小文件(小于1KB)的全部属性都存放在$MFT中,大文件(1K以上)在它的MFT基本文件记录中,其80数据属性有数据运行(dataRuns或一个盘区(extent),)指针(包含数据所在的起始簇号和簇的大小),也称为流描述,当流描述的第一个字节为0里就表示该流已经结束。
NTFS使用逻辑簇号(LCN,Logical Cluster Number)和虚拟簇号(VCN,Virtual Cluster Number)来对簇进行定位。
LCN是对整个卷中的所有的簇从头到尾进行简单编号,VCN是对特定文件的簇从头到尾进行编号,以便引用文件中的数据。
文件MFT记录的结束标志为ff ff ff ff。
二、举例建立一个小文本文件dd.txt和一个大文件large.txt。
1、文件属性修改打开主文件$MFT,按Unicode编码,向下查找文本,搜索文件名dd.txt,读出文件dd.txt记录,查看0x10属性,在偏移0x38处就是该文件属性,长度为4字节。
改变此字节就可改变文件是的只读、隐藏、系统等属性。
2、小文件(小于1KB,文件所有属性在MFT中的一条记录中容纳)打开主文件$MFT,按Unicode编码,向下查找文本,搜索文件名dd.txt,读出文件dd.txt的记录,查看0x80属性,在偏移0x18处就是该文件的内容,在此可直接修改文件内容。
2、大文件(大于1KB)打开主文件$MFT,按Unicode编码,向下查找文本,搜索文件名large.txt,读出文件large.txt的记录,查看0x80属性,在偏移0x10、0x18处分别用8个字节记录文件起始VCN和结束VCN,此例分别是00 00 00 00 00 00 00 00,01 00 00 00 00 00 00 00,说明文件只有0簇和1簇共2簇;在偏移0x20处的2个字节是该文件数据运行的偏移,此处的值为0x40,所以查看偏移0x40处就是文件的第1个运行的描述,该运行分为:子运行1:31 02 C6 3A 0C其中“31”中的“1”表示“31”后面第1个字节的数表示子运行的大小,即该子运行的大小为02簇。
详解NTFS文件系统
详解NTFS⽂件系统⼀、分析NTFS⽂件系统的结构当⽤户将硬盘的⼀个分区格式化为NTFS分区时,就建⽴了⼀个NTFS⽂件系统。
NTFS⽂件系统同FAT32⽂件系统⼀样,也是⽤“簇”为存储单位,⼀个⽂件总是占⽤⼀个或多个簇。
NTFS⽂件系统使⽤逻辑簇号(LCN)和虚拟簇号(VCN)对分区进⾏管理。
逻辑簇号:既对分区内的第⼀个簇到最后⼀个簇进⾏编号,NTFS使⽤逻辑簇号对簇进⾏定位。
虚拟簇号:既将⽂件所占⽤的簇从开头到尾进⾏编号的,虚拟簇号不要求在物理上是连续的。
NTFS⽂件系统⼀共由16个“元⽂件”构成,它们是在分区格式化时写⼊到硬盘的隐藏⽂件(以”$”开头),也是NTFS⽂件系统的系统信息。
NTFS的16个元⽂件介绍:⾸先找到该分区的起始扇区,具体可以参考这篇⽂章。
⼆、分析$Boot⽂件$Boot元⽂件由分区的第⼀个扇区(既DBR)和后⾯的15个扇区(既NTLDR区域)组成,其中DBR由“跳转指令”、“OEM代号”、“BPB”、“引导程序”和“结束标志”组成,这⾥和FAT32⽂件系统的DBR⼀样。
下图是⼀个NTFS⽂件系统完整的DBR。
下⾯我们分析⼀下DBR中的各参数EB 58 90:(跳转指令)本⾝占2字节它将程序执⾏流程跳转到引导程序处。
“EB 58 90″清楚地指明了OS引导代码的偏移位置。
jump 52H加上跳转指令所需的位移量,即开始于0×55。
4E 54 46 53 20 20 20 20:(OEM代号)这部分占8字节,其内容由创建该⽂件系统的OEM⼚商具体安排。
为“NTFS”。
BPB:NTFS⽂件系统的BPB从DBR的第12个字节开始,占⽤73字节,记录了有关该⽂件系统的重要信息,下表中的内容包含了“跳转指令”、“OEM代号”以及“BPB”的参数。
对照上⾯的BPB分析如下:02 00:每个扇区512个字节08:每个簇8个扇区00 00:保留扇区为000 00 00:为000:不使⽤F8:为硬盘00 00:为000 3F:每磁道63个扇区00 FF:每柱⾯255个磁头00 00 00 3F:隐藏扇区数(MBR到DBR)00 00 00 00:不使⽤80 00 80 00:不使⽤00 00 00 00 0C 80 33 FF:扇区总数20972851100 00 00 00 00 00 00 03:$MFT的开始簇号00 00 00 00 00 85 57 80:$MFTmirr的开始簇号00 00 00 F6:每个MFT记录的簇数00 00 00 01:每索引的簇数B8 11 2A 0C B8 11 2A 0C:分区的逻辑序列号引导程序:DBR的引导程序占⽤426字节,其负责完成将系统⽂件NTLDR装⼊,对于没有安装系统的分区是⽆效的。
数据备份与恢复 课件 第20、21讲 NTFS分区结构分析、 分析主控文件表结构
三、主控文件表与元文件
• 在NTFS中承担管理控制信息的数据称为元数据,用 于记载文件属性信息、簇分配信息、以及加密、配 额、日志等。这些元数据分别被组织成文件,称为 元文件。
• 前面所提到的BOOT区域和MFT区域,也分别被组织 为两个重要的元文件:$Boot和$MFT。
• NTFS中有16个元文件,每个元文件都以美元符号起 头,以标示其特殊身份。这些元文件记录了分区底 层的结构信息,因此非常特殊而重要,被系统保护 起来,用户和应用程序不能访问它们。
项目四:文件系统数据恢复
任务3 NTFS文件系统结构 子任务4.3.1 NTFS分区结构分析
教学内容
目录 CONTENT
01 课前学情 02 探究NTFS文件系统结构 03 工单-NTFS文件系统结构分析 04 总结与拓展
教学目标
素质目标
1.通过子目录特殊目录项的原理主控文件表的部分备份(通常为前4项) 日志文件,实现了NTFS的可恢复性和安全性 卷文件,标识卷名,是否格式化,是否需要修复等信息 属性定义列表文件 根目录,存放目录和文件的索引,表示文件的逻辑层次关系 位图元文件,记录了卷中簇的分配情况 引导元文件,恒为0簇起始 坏簇列表元文件 安全元文件,存储访问控制表(在NTFS4及以前为磁盘配额信息) 大小写字符转换表元文件 扩展元数据目录(Extended metadata directory) 扩展元数据,分别为重解析点、加密日志、配额管理、对象ID 为以后扩展而保留 用户文件和目录的记录编号
6组优秀
课堂活动:
1. NTFS分区结构
2. NTFS文件系统中两个重要的元文件是? 3.元文件:在NTFS分区中,将所有分区管理控制信息都以文件形式组织管理。以下元文件编 号?
NTFS文件系统解析
NTFS⽂件系统解析1. windows 下磁盘⽂件读写下⾯是读取D:\磁盘上的第0扇区 512 BytesCreateFile()打开磁盘,获取⽂件句柄;SetFilePointer()设置读写的位置;ReadFile()读取磁盘扇区数据。
HANDLE hFile;char drive[] = "\\\\.\\D:"; //------- \\.\D: -----//------- 创建⽂件句柄 ------hFile = CreateFile(drive, // 还可以为硬盘"\\\\.\\physicalDrive0"绝对读写, 或类似"D:\\abc\\fileName.txt"⽂件形式, GENERIC_READ, // 打开⽅式 FILE_SHARE_WRITE|FILE_SHARE_READ, // 前者表⽰之后打开该⽂件的程序 only write, 后者为only read NULL, // 安全属性 LPSECURITY_ATTRIBUTES OPEN_EXISTING, // how to Create 0, NULL); //if(hFile == INVALID_HANDLE_VALUE) return;// 中间两个参数分别是偏移字节数的低32Bit数值,和⾼32Bit的地址, ⾼32Bit不⽤则为零; 此处表⽰D:\从⾸扇区起,偏移字节数为0SetFilePointer(hFile, 0, NULL, FILE_BEGIN);DWORD lenRead;ReadFile(hFile, buf, 512, &lenRead, NULL); // 在设定的位置起,读取512Byte到缓存buf; 这⾥读取的是分区引导扇区2. 获取磁盘所有驱动器DWORD allDrive = GetLogicalDrive().// 返回值共有 32 Bits,从低位到⾼位分别表⽰A,B,C,D,E,.....// ⽐如0x0000 007C, 即 01111100, 表⽰有C,D,E,F,G 共5个驱动器;3. NTFS ⽂件系统 ⼀个NTFS系统是由引导扇区,主⽂件表MFT,和数据区组成;另外MFT有⼀部分重要备份在数据区。
B NTFS 文件系统剖析 结构分析 Y
-5437-0引言Windows NT 最初支持3种不同的文件系统:FAT [1]、HPFS 和NTFS 。
NTFS 是NT 的内定文件系统,同时NT 支持FAT 和HPFS 以提供对其它操作系统的兼容(虽然NT4.0后不再支持HPFS )。
微软公司对NTFS 的设计目标是要克服另外二个NT 兼容文件系统的限制,同时还要能提供高性能,以满足企业级应用对操作系统的要求[2]。
本文对NTFS 与FAT 文件系统进行比较分析,详细剖析NTFS 磁盘数据结构的设计。
1NTFS 的特性Windows NT 和NTFS 是同时开始设计的。
在NTFS 文件系统的基本结构和各部分的功能确定后,微软公司决定使用NTFS 作为NT 的文件系统。
NTFS 作为一个全新的文件系统,它能克服PC 原有文件系统的限制同时又满足NT 企业用户的预期需要。
(1)NTFS 的明显特点是它能够很好的适应不断扩大的磁盘容量需求。
所有的文件系统都把磁盘分割为逻辑的分配单元,也就是簇。
FAT 文件系统使用16位的入口来引用簇,因此,FAT 最多能寻址216或65536个族。
簇的大小能依据磁盘的大小而改变,但是大的簇将形成磁盘碎片,或在簇内部形成较大的浪费。
一个250字节的文件仍然要分配一个簇的空间,如果簇为16K 字节,则15K 以上的空间都被浪费了。
由于只能寻址65536个簇,一个簇为1KB 的FAT 磁盘只能寻址65MB 空间。
要寻址4GB 或更大的磁盘则需要64KB 的簇,但它又将产生大量空间浪费。
NTFS 采用64位地址来引用簇。
因此,如果使用512字节的簇,NTFS 能寻址264*512字节的磁盘,在很长的时间内都能满足需要。
(2)NTFS 使用与NT 一样的安全模型,而FAT 和HPFS 的开发者则忽视了文件系统安全问题。
通过使用自由访问控制和系统特权访问控制,来控制能在一个文件上进行的操作。
同时,文件上的任何操作都将记录在日志中,日志文件则以NT 内部格式储存在NTFS 文件系统内。
WinHex之NTFS学习笔记
1、NTFS文件系统的引导扇区分析NTFS文件系统的引导扇区是$Boot的第一个扇区,它的结构与FAT文件系统的DBR类似,所以习惯上也称该扇区为DBR扇区,DBR 扇区在操作系统的引导过程起着非常重要的作用,如果这个扇区遭到破坏,系统将不能正常启动。
NTFS文件系统的DBR扇区与FAT文件系统的结构一样,也包括跳转指令、OEM代号、BPB参数、引导程序和结束标志。
(1)跳转指令跳转指令本身占用两个字节,它将程序执行流程跳转到引导程序处。
(2)OEM代号这部分占用8个字节,其内容由创建该文件系统的OEM厂商具体安排。
(3)BPB(BIOS Paramester Block,BIOS参数块)BPB是BIOS Paramester Block的缩写,其含义为BIOS参数块。
BPB 从DBR的第12(0BH)个字节开始,到偏移53H结束,占用73个字节,记录了有关该文件系统的重要信息,其中各个参数的含义如下表:NTFS文件系统BPB参数的定义下面对各个参数的含义进行分析:(1)0BH~0CH:每扇区字节数每扇区字节数记录每个逻辑扇区的大小,其常见值为512字节,但512并不是固定值,该值可以由程序定义,合法值包括512字节、1024字节、2048字节、4096字节。
(2)0DH~0DH:每簇扇区数每簇扇区数记录着文件系统的簇的大小,即由多少个扇区组成一个簇。
如果这个分区是在系统安装之前被格式化而来的,一般大于2GB 的分区每簇默认占用8个扇区,也就是每簇大小为4KB,这个字节的内容就为十六字节进制值“08H”。
如果这个分区是由一个FAT分区转换而来,则每个簇一般占用1个扇区的空间,也就是没簇大小为512字节,这个字节的内容就是“01H”。
在NTFS文件系统中所有的簇从0开始进行编号,每个簇都有一个自己的地址编号,并且从分区的第一个扇区就开始编簇。
(3)0EH~0FH:DBR保留扇区数NTFS文件系统中DBR没有保留扇区,该值常为“0000”。
NTFS文件系统根目录结构
root [ 140 + C8 ] A0 00 00 00 58 00 00 00 01 (第一 双字为索引分配属性 ,第二双字为下一属性入口相 对偏移 ,第 9 字节 01 为非常驻标志) ,
对非常驻属性 root [ 208 + 10 ] 00 00 00 00 00 00 00 00 为起始 VCN
2D0F18 = 5C8900 相对本硬盘的起始逻辑扇区号 = 88B8FDC +
2F79E8 + 2D0F18 = 8E818DC
3 根目录索引表
根目录索引表中存放根目录文件或子目录的 文件表索引指针 ,如前述从 0 开始编号 ,文件表的 第一记录编号为 0 (占 1KB ,余之类推) .
实例为 :
2 主文件表
主文件表是 NTFS 用来访问文件的主要结构 , 文件记录的长度一般是固定的 ,不管簇大小是多 少 ,均为 1KB. 文件记录在主文件表 MFT 的文件记 数组中从 0 开始编号 (序列号) ,最初的几个记录描 述主文件表 MFT 自身 ,仅供系统本身组织架构 ,文 件系统使用. 这些文件记录是非常重要的 ,又称元 数据文件 ,文件名以 $开始 ,所以是隐藏文件 ,后面 接着是文件或目录记录. 如果文件足够小 ,它将内 容直接写在 MFT 的文件记录中 ,否则文件列表项 保存指向实际数据的簇序列指针.
关键词 : NTFS ; 簇号 ;逻辑扇区号 ;根目录结构 中图分类号 : TP309. 2 文献标识码 : A
0 引言
FAT 文件系统根目录结构比 NTFS 文件系统根 目录结构要简单得多 ,没有 NTFS 文件系统的文件 的安全级和文件夹的安全级 、加密 、为多用户设置 的限制的磁盘配额等文件特性.
通俗介绍NTFS的文件存储结构
通俗介绍NTFS的文件存储结构当我们将分区格式化成NTFS并存储文件时,系统做了什么呢?1、格式化后,系统在第0扇区写下DBR(这个FAT32一样)2、系统将所有扇区划分为n个簇,并在某个簇处建立$mft(主控文件表),超过10G以上的分区,$mft的起始簇一般在786432簇,5G以下的分区$mft的起始簇一般在262144簇(有趣吧,786432/262144=3),这个$mft又被划分为n个小表项,每个表项占用1K的空间(即2个扇区),NTFS将存储在分区的每个文件(包括系统文件)分配一个登记表项。
3、分区格式化后,首先建立16个系统文件(有的少个别文件),并在$mft的前16个项进行登记。
如图:这16个文件通过操作系统是看不到的,要用工具软件如winhex才能看到,16个文件中除了$boot和$AttDef表项损坏外,其它表项的损坏都会导致不能进入分区,显示目录结构损坏。
对分区的格式化就是重写这16个表项。
3、当我们向分区中存储一个文件或文件夹时,会在$mft的第24个表项进行登记(16-23表项系统保留),主要在这表项的2个扇区中写下文件(文件夹)的MFT号、文件名、创建时间、修改时间、访问时间、大小等,如果文件的内容在这1024个字节存储不下的话,就会向分区申请一个可用的空簇存储,并在mft表项中写下链接的数据流地址。
对于文件夹来说,如果其子文件(夹)少的话,子文件(夹)的内容就会一同登记在父文件夹的MFT中;如果其子文件(夹)多,就会向分区申请一个可用的空簇,将子文件(夹)作为一个个索引项登记在其中,并在父文件夹的mft表项中写下索引项的链接地址。
4、学习NTFS时首先从掌握文件的10、30、80、90、A0、B0属性入手。
一般文件的MFT表项中都有10属性、文件名长时有2个30属性、当文件内容很小,MFT中能容纳下的时候,它的80属性为常驻属性,一并存储着文件的内容。
当文件内容过大时,内容就会存储到分区的某个空簇内,在80属性中写下那个簇的偏移地址,这个地址就是查找文件内容的途径。
NTFS文件系统结构
NTFS文件系统结构前言:最近由于项目需要,研究了一下NTFS文件系统,NTFS文件系统是windows使用的文件系统,包括NT,2000,xp系列。
无奈万恶资本主义的windows将自家的东西全部藏在阴暗的角落,NTFS理所当然地也不开源,尽管没有源代码,还是有足够丰富的资料将NTFS文件系统曝光在自由的阳光下。
下面通过从NTFS文件系统的根源出发,展示如何通过一层层的解析,最终读取到其中的某个文件。
环境:LINUX Ubuntu16.04,待解析的文件系统:NTFS,追踪其中的文件:C:\WINDOWS\DtcInstall.log(随机找的,仅仅以此为例)说明:本人找了一块完整的NTFS文件系统镜像,它里面是一个完整的Windows XP系统,是从Windows XP虚拟机镜像切下来的(因为虚拟机镜像不止包括完整的文件系统,例如我的这块虚拟机镜像从第0x7E000字节以后才是完整的NTFS文件系统),这些都不重要,重要的是现在你只要有一块完整的NTFS文件系统,当然必须是Window XP系统的,因为我们还有追踪C:\WINDOWS\DtcInstall.log这个文件,所以其实在Windows XP中使用Disk Genius打开你C盘分区就是一块完整的NTFS文件系统,如果以16进制查看应该是这样的:NTFS文件系统的布局:BOOT存放一些文件系统基本信息,如一个扇区512bytes,一簇(cluster)有8个扇区,共4K,比较重要的一项是MFT的偏移簇号。
MFT是NTFS中最重要的部分,它是一个个以“FILE"开始的文件记录数据结构。
struct 文件记录{文件记录头;属性1;属性2;属性3;……}而属性包括属性头和属性体两部分,如下属性的数据结构。
struct 属性{属性头;属性体;}所以,下面的文件记录结构举例请参考文件记录结构、文件记录头结构、属性头结构、不同属性体结构来看!这个数据结构就是文件的全部信息,文件的各种属性都放在这个数据结构中,在NTFS中文件内容也属于文件的属性,所以在NTFS中文件的一切都是属性,比如在这个数据结构中有30H属性记录文件名,10H属性记录文件的一些元信息如创建、访问时间等,而80H属性则是文件的内容,因为一个文件记录数据结构仅仅4K,所以如果文件很大,80H属性存放的不再是文件内容,而是存放文件内容的簇索引号run list.对于run list 解析以后介绍,这里知道它是文件内容的簇偏移索引即可。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
NTFS文件系统结构分析在NTFS文件系统中,文件存取是按簇进行分配,一个簇必需是物理扇区的整数倍,而且总是2的整数次方。
NTFS文件系统并不去关心什么是扇区,也不会去关心扇区到底有多大(如是不是512字节),而簇大小在使用格式化程序时则会由格式化程序根据卷大小自动的进行分配。
文件通过主文件表(MFT)来确定其在磁盘上的存储位置。
主文件表是一个对应的数据库,由一系列的文件记录组成--卷中每一个文件都有一个文件记录(对于大型文件还可能有多个记录与之相对应)。
主文件表本身也有它自己的文件记录。
NTFS卷上的每个文件都有一个64位(bit)称为文件引用号(File Reference Number,也称文件索引号)的唯一标识。
文件引用号由两部分组成:一是文件号,二是文件顺序号。
文件号为48位,对应于该文件在MFT中的位置。
文件顺序号随着每次文件记录的重用而增加,这是为NTFS进行内部一致性检查而设计的。
NTFS使用逻辑簇号(Logical Cluster Number,LCN)和虚拟簇号(Virtual Cluster Number,VCN)来进行簇的定位。
LCN是对整个卷中所有的簇从头到尾所进行的简单编号。
卷因子乘以LCN,NTFS就能够得到卷上的物理字节偏移量,从而得到物理磁盘地址。
VCN则是对属于特定文件的簇从头到尾进行编号,以便于引用文件中的数据。
VCN可以映射成LCN,而不必要求在物理上连续。
NTFS的目录只是一个简单的文件名和文件引用号的索引,如果目录的属性列表小于一个记录的长度,那么该目录的所有信息都存储在主文件表的记录中,对于大于记录的目录则使用B+树进行管理。
主文件表中的基本文件记录中有一个指针指向一个存储非常驻索引缓冲--包括该目录下所有下一级子目录和文件的外部簇,而B+树结构便于大型目录中文件和子目录的快速查找。
主文件表中的基本文件记录中有一个指针指向一个存储非常驻索引缓冲--包括该目录下所有下一级子目录和文件的外部簇,而B+树结构便于大型目录中文件和子目录的快速查找。
在NTFS中,所有存储在卷上的数据都包含在文件中,包括用来定位和获取文件的数据结构,引导程序和记录这个卷的记录(NTFS元数据)的位图,这体现了NTFS的原则:磁盘上的任何事物都为文件。
在文件中存储一切使得文件系统很容易定位和维护数据,而在NTFS中,卷中所有存放的数据均在一个叫做MFT的文件记录数组中,称为主文件表(Master File Table),MFT是由高级格式化产生的。
而MFT则由文件记录(File Record)数组构成。
File Record的大小一般是固定的,不管簇的大小是多少,均为1KB,这个概念相当于Linux中的inode(i节点)。
File Record在MFT文件记录数组中物理上是连续的,且从0开始编号。
MFT仅供系统本身组织、架构文件系统使用,这在NTFS中称为元数据(metadata)。
其中最基本的前16个记录是操作系统使用的非常重要的元数据文件。
这些NTFS主文件表的重要的元数据文件都是以$(美元符号)开始的名字,所以是隐藏文件,在Windows 2000中不能使用dir命令(甚至加上/ah参数)像普通文件一样列出这些元数据文件。
实际上File System Driver(ntfs.sys)维护了一个系统变量NTFS Protect System Files用于隐藏这些元数据。
但是微软公司也提供了一个OEM TOOL,叫做NFI.EXE,用此工具可以转储NTFS主文件表的重要的元数据文件(元数据:是存储在卷上支持文件系统格式管理的数据。
它不能被应用程序来访问,它只能为系统提供服务),使用NFI显示结果如下:C:\>nfi C: |MORE而这些元数据文件文件是系统驱动程序装配卷所必需的,WINDOWS 2000给每个分区赋予一个盘符并不表示该分区包含有WINDOWS 2000可以识别的文件系统格式,如果一旦主文件表损坏,那么该分区在WINDOWS 2000下是无法读取的。
为了使该分区能够在WINDOWS 2000下能被识别,也就是必须首先建立WINDOWS 2000可以识别的文件系统格式即主文件表,这可通过高级格式化该分区来完成。
众所周知,Windows以簇号来定位文件在磁盘存储的位置,在FAT格式的文件系统中有关簇号的指针是包含在FAT表中的,而在NTFS中有关簇号的指针是包含在$MFT及$MFTMirr文件中的。
NTFS元文件伴随着以上这些新增功能的是更多的用于存放与功能相关的数据的元文件。
最后,在下面的表中罗列出NTFS5中所有的元文件:每个MFT记录都对应着不同的文件,如果一个文件有很多属性或是分散成很多碎片,就很可能需要多个文件记录。
这时,存放其文件记录位置的第一个记录就叫做“基文件记录”(basefile record)。
MFT中的第1个记录就是MFT自身。
由于MFT文件本身的重要性,为了确保文件系统结构的可靠性,系统专门为它准备了一个镜像文件($MftMirr),也就是MFT中的第2个记录。
第3个记录是日志文件($LogFile)。
该文件是NTFS为实现可恢复性和安全性而设计的。
当系统运行时,NTFS就会在日志文件中记录所有影响NTFS卷结构的操作,包括文件的创建和改变目录结构的命令,例如复制,从而在系统失败时能够恢复NTFS卷。
第4个记录是卷文件($Volume),它包含了卷名、被格式化的卷的NTFS版本和一个标明该磁盘是否损坏的标志位(NTFS系统以此决定是否需要调用Chkdsk程序来进行修复)。
第5个记录是属性定义表($AttrDef,attribute definition table),其中存放了卷所支持的所有文件属性,并指出它们是否可以被索引和恢复等。
第6个记录是根目录(),其中保存了存放于该卷根目录下所有文件和目录的索引。
在访问了一个文件后,NTFS就保留该文件的MFT引用,第二次就能够直接进行对该文件的访问。
第7个记录是位图文件($Bitmap)。
NTFS卷的分配状态都存放在位图文件中,其中每一位(bit)代表卷中的一簇,标识该簇是空闲的还是已被分配了的,由于该文件可以很容易的被扩大,所以NTFS的卷可以很方便的动态的扩大,而FAT格式的文件系统由于涉及到FAT 表的变化,所以不能随意的对分区大小进行调整。
第8个记录是引导文件($Boot),它是另一个重要的系统文件,存放着Windows 2000/XP 的引导程序代码。
该文件必须位于特定的磁盘位置才能够正确地引导系统。
该文件是在Format程序运行时创建的,这正体现了NTFS把磁盘上的所有事物都看成是文件的原则。
这也意味着虽然该文件享受NTFS系统的各种安全保护,但还是可以通过普通的文件I/O操作来修改。
第9个记录是坏簇文件($BadClus),它记录了磁盘上该卷中所有的损坏的簇号,防止系统对其进行分配使用。
第10个记录是安全文件($Secure),它存储了整个卷的安全描述符数据库。
NTFS文件和目录都有各自的安全描述符,为了节省空间,NTFS将具有相同描述符的文件和目录存放在一个公共文件中。
第11个记录为大写文件($UpCase,upper case file),该文件包含一个大小写字符转换表。
第12个记录是扩展元数据目录($Extended metadata directory)。
第13个记录是重解析点文件($Extend\$Reparse)。
第14个记录是变更日志文件($Extend\$UsnJrnl)。
第15个记录是配额管理文件($Extend\$Quota)。
第16个记录是对象ID文件($Extend\$ObjId)。
第17~23记录是是系统保留记录,用于将来扩展。
MFT的前16个元数据文件是如此重要,为了防止数据的丢失,NTFS系统在该卷文件存储部分的正中央对它们进行了备份,参见下图。
NTFS把磁盘分成了两大部分,其中大约12%分配给了MFT,以满足其不断增长的文件数量。
为了保持MFT元文件的连续性,MFT对这12%的空间享有独占权。
余下的88%的空间被分配用来存储文件。
而剩余磁盘空间则包含了所有的物理剩余空间--MFT剩余空间也包含在里面。
MFT空间的使用机制可以这样来描述:当文件耗尽了存储空间时,Windows操作系统会简单地减少MFT空间,并把它分配给文件存储。
当有剩余空间时,这些空间又会重新被划分给MFT。
虽然系统尽力保持MFT空间的专用性,但是有时不得不做出牺牲。
尽管MFT碎片有时是无法忍受的,却无法阻止它的发生。
那么NTFS到底是怎么通过MFT来访问卷的呢?首先,当NTFS访问某个卷时,它必须“装载”该卷:NTFS会查看引导文件(在图中的$Boot元数据文件定义的文件),找到MFT的物理磁盘地址。
然后它就从文件记录的数据属性中获得VCN到LCN的映射信息,并存储在内存中。
这个映射信息定位了MFT的运行(run或extent)在磁盘上的位置。
接着,NTFS再打开几个元数据文件的MFT记录,并打开这些文件。
如有必要NTFS开始执行它的文件系统恢复操作。
在NTFS打开了剩余的元数据文件后,用户就可以开始访问该卷了。
文件和目录记录NTFS将文件作为属性/属性值的集合来处理,这一点与其他文件系统不一样。
文件数据就是未命名属性的值,其他文件属性包括文件名、文件拥有者、文件时间标记等。
下图显示了一个用于小文件的MFT记录。
每个属性由单个的流(stream)组成,即简单的字符队列。
严格地说,NTFS并不对文件进行操作,而只是对属性流进行读写。
NTFS提供对属性流的各种操作:创建、删除、读取(字节范围)以及写入(字节范围)。
读写操作一般是针对文件的未命名属性的,对于已命名的属性则可以通过已命名的数据流句法来进行操作。
一个文件通常占用一个文件记录。
然而,当一个文件具有很多项属性值或很零碎的时候,就可能需要占用一个以上的文件记录。
这种情况下,第一个文件记录是其基本的文件记录,存储有该文件需要的其它文件记录的位置。
小文件和文件夹(典型的如1500字节或更少)将全部存储在文件的MFT记录里。
文件夹记录包括索引信息,小文件夹记录完全存储在MFT结构内,然而大的文件夹则被组织成B+树结构,用一个指针指向一个外部簇,该簇用来存储那些MFT内存储不了的文件夹的属性。
NTFS卷上文件的常用属性在下表中列出(并不是所有文件都有所有这些属性)。
常驻属性与非常驻属性当一个文件很小时,其所有属性和属性值可存放在MFT的文件记录中。
当属性值能直接存放在MFT中时,该属性就称为常驻属性(resident attribute)。
有些属性总是常驻的,这样NTFS才可以确定其他非常驻属性。