解析NTFS底层磁盘结构Word格式文档下载.docx
《解析NTFS底层磁盘结构Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《解析NTFS底层磁盘结构Word格式文档下载.docx(15页珍藏版)》请在冰豆网上搜索。
表1
卷与簇的关系
从上面可以看出,也就是说不管驱动器多大NTFS簇的大小不会超过4KB。
1.0.2
NTFS的基本数据结构
NTFS的数据大体上可分为4个部分
(1)
Partitionbootsector(引导扇区,又称BPB),此部分为所有磁盘格式都共有,占用一个扇区,但是具体的内容当然各不相同(见表3)。
(2)
MasterFileTable(主文件列表,MFT),它是对卷上所有文件的记录,每一个文件对应一个记录项,理论上占用该卷12%的空间。
(3)
Systemfiles(系统文件),NTFS系统一共有16个系统文件,和8个保留文件。
(4)
Filearea(数据区),留给用户的空间。
Partitionbootsector
引导扇区
MasterFileTable
主文件列表
Systemfiles
系统文件
Filearea
用户文件区(数据区)
表2
NTFS的磁盘分配情况
1.0.3NTFS中关于目录的说明
NTFS中目录也是以文件的形式存在的。
因此,每一个目录也可以看作一个文件。
如果您熟悉FAT,那么此时您可能会觉得很别扭,因为在FAT中,文件是以目录-文件的树型结构联系起来的。
但是,您必须相信的是,NTFS将会提供比搜索树更快的读写方式。
1.1引导扇区
字节偏移
长度(字节)
常用值
意义
0X00
3
0XEB5290
JMP指令
0X03
NTFS
文件系统ID
0X0B
0X0002
每扇区字节数
0X0D
0X08
每簇扇区数
0X0E
0X0000
保留扇区
0X10
0X000000
总为0
0X13
NTFS未使用,为0
0X15
0XF8
介质描述
0X16
0X18
0X3F00
每磁道扇区数
0X1A
0XFF00
磁头数
0X1C
0X3F000000
隐含扇区
0X20
0X00000000
0X24
0X80008000
0X28
0X4AF57F0000000000
扇区总数
0X30
0X0400000000000000
$MFT的逻辑簇号
0X38
0X54FF070000000000
$MFTMirr的逻辑簇号
0X40
0XF6000000
每MFT记录簇数
0X44
0X0100000
每索引簇数
0X48
0X14A51B74C91B741C
卷标
0X50
校验和
0X54
430
略
引导代码
0X1FE
0X55AA
签名
表3
NTFS引导扇区说明
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
主文件列表本身
$MFTMirr
主文件表的部分镜像
$LogFile
日志文件
$Volume
卷文件
$AttrDef
属性定义列表
5
$Root
根目录
6
$Bitmap
位图文件
7
$Boot
引导文件
$BadClus
坏簇文件
9
$Secure
安全文件
10
$UpCase
大写文件
11-15
$Extend
扩展文件(一共5个文件)
16-23
保留
表4
NTFS元文件
1.2.2NTFS中MFT的备份
在NTFS中,因其前16个文件的重要性,对它们的MFT记录在文件区有一个备份。
如图:
图1
MFT的备份
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记录来说,都会包含几种属性,但不可能包含所有的属性。
老师当然根据学生不同的特点设计花名册的属性。
属性号
属性名
属性描述
$STANDRD_INFORMATION(标准属性)
包括基本文件属性,如只读、存档;
时间标记,如文件的创建时间和最近一次修改的时间;
有多少目录指向本文件
$ATTRIBUTE_LIST(属性列表)
当一个文件需要使用多个MFT文件记录时,用来表示该文件的属性列表
$FILE_NAME(文件名属性)
这是以Unicode字符表示的,由于MS-DOS不能正确识别Win32子系统创建的文件名,当Win32子系统创建一个文件名时,MTFS会自动生成一个备用的MS-DOS文件名,所以一个文件可以有多种文件名属性。
$VOLUME_VERSION(卷版本)
卷版本号
$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
扩充属性:
0X100
$OBJECT_ID
对象ID:
一个具有64个字节的标识符,其中最低的16个字节对卷来说是唯一的
表5NTFS卷上常用属性说明
以下是一个实际的MFT记录,我们通过对它的分析向您展示MFT记录的属性。