NTFS文件格式

来源:互联网 发布:网络运营工作计划 编辑:程序博客网 时间:2024/04/30 00:07

 引用:http://www.ds0101.net/Article/ShowInfo.asp?ID=38&Page=1

                                                                               

解析NTFS底层结构

                                               
一、NTFS系统结构


NTFS是Windows NT引入的新型文件系统,如果您是一位熟悉FAT磁盘格式的专业人士,您可能会觉得NTFS系统的思想蹩脚而晦涩,如果您对FAT格式一无所知,那么恭喜您,您会更快的了解这种更有效率的磁盘格式。
NTFS的结构复杂,内容繁多,笔者仅对NTFS卷上的底层结构做分析,并提供卷上数据删除的特征状态供大家参考。
    现在,我们首先来建立了解NTFS需要的基本概念。
1.0基本结构及基本概念
在NTFS中,文件以簇的形式分配。最小的单位为扇区,N个扇区为一簇。其中,N的值可以通过BPB(引导扇区)读出(以下会详细介绍)。
1.0.1卷与簇
                                                           表1  卷与簇的关系
卷大小(分区大小)                              每簇的扇区                                        缺省的簇大小   
小于等于512MB                                          1                                                           512字节   
513MB~1024MB(1GB)                               2                                                    1024字节(1KB)   
1025MB~2048MB(2GB)                             4                                                    2048字节(2KB)   
大于等于2049MB                                        8                                                    4KB 

从上面可以看出,也就是说不管驱动器多大NTFS簇的大小不会超过4KB
1.0.2 NTFS的基本数据结构
NTFS的数据大体上可分为4个部分
(1) Partition boot sector(引导扇区,又称BPB),此部分为所有磁盘格式都共有,占用一个扇区,但是具体的内容当然各不相同(见表3)。
(2) Master File Table(主文件列表,MFT),它是对卷上所有文件的记录,每一个文件对应一个记录项,理论上占用该卷12%的空间。
(3) System files(系统文件),NTFS系统一共有16个系统文件,和8个保留文件。
(4) File area(数据区),留给用户的空间。

                                                                 表2  NTFS的磁盘分配情况
Partition boot sector       Master File Table                               System files                               File area

引导扇区                         主文件列表                                      系统文件                                   用户文件区(数据区) 

1.0.3 NTFS中关于目录的说明
NTFS中目录也是以文件的形式存在的。因此,每一个目录也可以看作一个文件。如果您熟悉FAT,那么此时您可能会觉得很别扭,因为在FAT中,文件是以目录-文件的树型结构联系起来的。但是,您必须相信的是,NTFS将会提供比搜索树更快的读写方式。
1.1 引导扇区
                                                                  表3  NTFS引导扇区说明

字节偏移                                              长度(字节)                                                     常用值                    意义   
0X00                                                       3                                                                    0XEB5290           JMP指令   
0X03                                                       4                                                                      NTFS                 文件系统 ID   
0X0B                                                       2                                                                    0X0002                每扇区字节数   
0X0D                                                       1                                                                     0X08                   每簇扇区数   
0X0E                                                       2                                                                     0X0000                保留扇区   
0X10                                                       3                                                                      0X000000             总为0   
0X13                                                       2                                                                      0X0000                NTFS未使用,为0   
0X15                                                       1                                                                        0XF8                  介质描述   
0X16                                                       1                                                                       0X0000                 总为0   
0X18                                                       2                                                                      0X3F00                 每磁道扇区数   
0X1A                                                      2                                                                      0XFF00                 磁头数   
0X1C                                                      4                                                                       0X3F000000          隐含扇区   
0X20                                                      4                                                                      0X00000000           NTFS未使用,为0   
0X24                                                      4                                                                      0X80008000           NTFS未使用,为0   
0X28                                                     8                                                  0X4AF57F0000000000              扇区总数   
0X30                                                     8                                                  0X0400000000000000               $MFT的逻辑簇号   
0X38                                                     8                                                   0X54FF070000000000             $MFTMirr的逻辑簇号   
0X40                                                    4                                                  0XF6000000                                 每MFT记录簇数   
0X44                                                    4                                                 0X0100000                                    每索引簇数   
0X48                                                   8                                                 0X14A51B74C91B741C                卷标   
0X50                                                  4                                                  0X00000000                                    校验和   
0X54                                                430                                                略                                                     引导代码   
0X1FE                                               2                                                  0X55AA                                           签名 
 

1.2 MFT(主文件表)
MFT是一个对应的数据库,由一系列的文件记录组成。卷中每一个文件都有一个文件记录(对于大型文件还可能有多个记录与之相对应)。主文件表本身也有它自己的文件记录。如果您还不胜了解,那么我们来打个比喻。假设一个班有30个人,老师那里有一本花名册,记录了每个人的名字,年龄,每天出勤的情况和科目成绩等等。把每个人看做每一个文件,那么那本花名册就是这里的MFT。
当然,事实往往是复杂而多变的,MFT中包含文件的哪些信息?这些信息又是如何关联的?这些问题,我们会一个个解决。现在首先对MFT做几点必要的说明:
(1)实际上,MFT自身也是一个文件,因此,主文件列表的第一个记录就是它自身。所以,刚才的例子其实不太贴切,因为事实上,花名册也是人,那么好吧,我们假设这本花名册在老师的脑子里。这样,您可以知道,既然老师也是人,那么其实老师也是一个文件。
(2)MFT的每个记录都有一个编号,这里我们称它为ID号。这个ID从0开始。我们知道MFT自身是NTFS系统的第一个文件,所以文件$MFT的ID号为0
(3)$MFT和其他23个文件一起(共24个),组成所谓的“Metafiles”(元文件,也是之前提到的System files,系统文件)。这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.1 MFT中的元文件(固定)
以下是元文件的列表。其中ID为0-15的文件为系统文件,用户文件从第24个MFT记录开始排。
                                                                                 表4  NTFS元文件
序号(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                                               保留