dvbbs
收藏本页
联系我们
论坛帮助
dvbbs

堕落街论坛休闲之乐游戏体育 → [转帖]解读NTFS5


  共有641人关注过本帖树形打印

主题:[转帖]解读NTFS5

帅哥哟,离线,有人找我吗?
SnowGround
  1楼 个性首页 | 博客 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小二 主题:17 精华:0 贴子:151 排名:0 威望:1 排名:538 注册:2003/11/17 12:58:00 近访:2004/10/5 17:41:00
[转帖]解读NTFS5  发贴心情 Post By:2004/6/4 22:24:00

NTFS(New Technology File System)随着Windows NT 3.1的发布而出现,并一直在不断地发展。它最初的卓越表现使它被认为是一种高性能的文件系统,而由于越来越多的企业用户开始采用Windows NT平台,微软公司便在Windows 2000中对其进行了相当的扩展和改进以迎合企业级用户的需求。   本文将介绍Windows 2000所支持的NTFS5.0的一些新功能,但并不打算叙述这些功能的管理界面或罗列出使用这些功能的API调用,而是讨论NTFS是如何实现这些功能,以及其物理存贮格式。这些功能包括集中化的安全信息、重解析点、配额管理等。其中,集中化的安全信息能够显著提高NTFS的日常操作效率,其它例如配额管理则使管理员能够在多用户环境中控制用户使用的存贮空间。   在开始讲述具体内容之前,希望读者应对基本的NTFS组织结构,包括主文件表(MFT)项,属性类型,以及驻留与非驻留属性等有一定了解。如果你对这些概念并不清楚,可以参阅"Inside NTFS"一书(98年一月版)。 综合索引:   NTFS5的一些新功能建立在一种叫做"特征索引"的基本功能之上,特征索引中包含了具有某一特征类型的多个分类项,并使用一种高效的存贮机制以便于快速查找。在Windows 2000以前的NTFS版本中仅支持$I30的特征索引,其中仅存贮目录项。索引过程将目录项按名称分类并将这些项按照B+树(B+树是一种二叉树,允许在树的每个结点中存贮多个关键字)的结构保存,图1是一个包含3个节点,每个节点3个项,共9项的目录的MFT条目,其中索引根(Index Root)属性指向B+树的根。这个MFT条目并不能容纳所有9个目录项,NTFS必须把其中一部份项存放在别处,因此,NTFS分配了两个索引分配区来存放另外的项(索引根以及索引分配区一般能够存贮三个以上文件项,这依赖于文件名的长度),一个MFT条目占1KB的空间,而一个索引分配区占4KB的空间。

图1   从图1中的红箭头可以看出NTFS的存贮项是按字母有序的,如果你运行了一个程序并试图打开目录中的e.bak文件,NTFS会首先去读索引根属性,其中包含了d.new、h.txt以及i.doc三个文件项,并将串"e.bak"与第一个项的名称"d.new"进行比较,NTFS得出结论:e.bak在字母序上排在d.new之后,因此转而处理下一个项"h.txt",经过比较以后,由于e.bak的字母序在h.txt之前,NTFS就会检索h.txt项中索引分配区的虚拟簇号(VCN),这个索引分配区中存贮着字母序比h.txt小但比d.new大的项,VCN代表一个簇在一个文件或目录中的顺序,NTFS能够将虚拟簇号映射成逻辑簇号(LCN),而逻辑簇号表示着一个簇相对于一个卷的起始点的相对偏移量。而如果h.txt项中并不存在这个索引分配区的虚拟簇号,则NTFS可以立即断定这个目录中不存在e.bak文件,并报告打开文件失败。   当获得索引分配区的虚拟簇号以后,NTFS就会继续查找。从图1中可以看出,索引分配区的第一个项正是要找的e.bak,于是NTFS就从e.bak项中读出它对应的主文件表项(MFT)的位置。文件项中还存贮着其它如时戳(创建时间、最后修改时间等)、文件大小、属性等其它信息。虽然NTFS在文件的主文件表项中也存贮了这些信息,但将这些信息复制到目录项中可以提高列目录或做一些简单的文件查询时的效率。   目录项是按照字母排序的,这也解释了NTFS系统在列目录的时候为什么总是按照字母有序的问题。相反,FAT文件系统并不对目录项排序,所以在FAT文件系统中列目录时并没有顺序。另外,由于NTFS将目录项按照B+树的结构保存,使得在包含很多文件的目录中查找文件时效率非常高:一般来说,NTFS只需要扫描所有目录项中的一小部份即可。在这一点上,FAT文件系统只能使用线性查找,也就是说,为了查找一个文件,很大程度上需要查询这个目录中的几乎每一个文件项。   在Windows 2000以前的NTFS版本中仅对文件名进行索引,而NTFS5实现了综合索引,这使NTFS5能够在索引中存放任意的数据,而且允许对目录项进行基于其它关键字的排序。在NTFS5中,文件系统使用综合索引来管理安全描述符、配额信息、重解析点以及文件对象标识符等,这些将在后文涉及。 集中化的安全信息:   NTFS系统始终支持安全管理,这使得管理员可以指定哪些用户可以或不可以存取个别的文件或目录。在NTFS5以前,每个文件及目录在自己的安全属性中存放它的安全描述符。在大多数情况下,管理员对整个目录树应用相同的安全设置,这样就意味着这个目录中所有文件及子目录使用相同的安全设置而每个目录项中却存在着相同的副本。在多用户环境(如Windows 2000 Server的终端服务、NT Server 4.0、终端服务器)中,安全描述符可能会包含多个帐号的用户项,如果仍然在文件自己的安全属性中存放安全描述符,就会造成磁盘存贮空间利用率的降低。NTFS5针对这一点为安全描述符进行了优化,它使用一个名为"$Secure"的独立文件来存放一个卷中的安全描述符,每个安全描述符只存在一个实例。   $Secure文件包括两个索引表:$SDH和$SII,以及一个数据流区:$SDS,如图2所示。

图2   NTFS5为卷中的每一个唯一的安全描述符分配一个内部的NTFS安全ID(安全ID并不是SID,SID仅用于识别计算机及其中的用户帐号),并用一种简单的散列算法对这些安全描述符进行散列,散列值可以用来快速地定位相应的安全描述符。$SDH索引表中的条目将安全描述符的散列值映射成安全描述符在$SDS中的实际存贮位置,而$SII索引表中的条目则实现从NTFS安全ID到安全描述符在$SDS中的存贮位置的映射。   当为一个文件或目录分配一个安全描述符的时候,NTFS通过散列算法得到这个安全描述符的散列值,并在$SDH索引表中进行匹配(NTFS根据安全描述符对$SDH索引表中的索引项进行排序,并将它们以B+树的形式保存),如果找到了相应的索引项,则可以通过其中的偏移量参数在$SDS中对安全描述符定位,并将它从$SDS区中读出。如果查找过程中,安全描述符的散列值匹配但安全描述符并不匹配(这意味着散列算法产生了冲突),NTFS会在$SDH中查找下一个匹配的索引项。当NTFS找到一个精确的匹配(即散列值与安全描述符都匹配)后,这个文件或目录就可以引用这个安全描述符了。具体的作法是NTFS从找到的$SDH索引项中读出相应的安全ID保存在文件或目录的$STANDARD_INFORMATION属性之中。NTFS文件系统中,所有的文件或目录都有一个$STANDARD_INFORMATION属性,其中存贮着一个文件的基本信息,包括它的各种属性,以及时戳。在Windows 2000中对这一属性进行了扩展,使之包含了如文件的安全ID等附加信息。   如果NTFS在$SDH索引表中找不到安全描述符的散列值所匹配的索引项,则这个安全描述符在卷中是唯一的,NTFS会为它生成一个新的内部安全ID(NTFS的内部安全ID是一个32位值,而SID一般会比它大几倍,因此在文件的$STANDARD_INFORMATION属性中存贮安全ID要比存贮SID节省空间),然后在$SDS中添加这个安全描述符。所有的安全描述符按照其安全ID有序,并以B+树的形式存贮在$SDS中。最后,再将这个安全描述符在$SDS区中的偏移量记录到$SDH和$SII索引表中。   当应用程序试图打开一个文件或目录的时候,NTFS使用$SII索引表来查找这个文件或目录的安全描述符。NTFS从文件或目录的主文件表(MFT)的$STANDARD_INFORMATION属性中读出它的内部安全ID,然后在$Secure文件的$SII索引表中查找匹配的索引项,从中得到安全描述符在$SDS中的偏移量,进而读出安全描述符并完成安全检查。即使卷中没有任何文件或目录引用某一个表项,NTFS5也不会删除$Secure文件中的这个表项,这样做并不会明显地降低磁盘的可用空间,因为大多数卷即使在使用了很长一个时期以后也只会存在很少的安全描述符。   NTFS5集中化的安全信息使得那些具有相同的安全设置的文件和目录高效地分享安全描述符,$Secure文件中的$SII索引表则令进行安全检查时安全描述符的查找过程相当的迅速,而$SDH索引表则能够让NTFS快速地判断用于文件或目录的安全描述符是否已经存贮在$Secure文件中并可以被共享。 重解析点:   重解析点主要提供这样一种功能,这种功能使得应用程序能够为一个文件或目录关联一个应用程序数据块,并允许使用对象管理器重新解析,或当应用程序遇到一个重解析点时能够在其基础上重新进行名字查找。除了存贮这些重解析数据以外,重解析点还存贮了一个重解析码用于标识这个重解析点是属于哪一个特定的应用程序的。虽然对最终用户来说重解析点本身并没有太大的用处,但它却能帮助Windows 2000或第三方的开发人员实现多种的功能。Windows 2000在实现装入点(mount points)、NTFS连接点以及层次型存贮管理(HSM)等功能时均使用了重解析点。以下将介绍这些功能是如何工作的,然后再讨论重解析点的实现。   为了便于存取,所有NTFS的卷都必须分配一个驱动器号。在NTFS5中,你可以直接连接到一个NTFS5父卷的装入点上,而不需要为子卷分配一个驱动器号,这种能力使你可以把多个卷集中在一个驱动器号之下。例如:如果把一个包含\documents目录的卷安装到名为"C:\articles的"装入点上,你就可以用路径"C:\articles\documents"来存取\documents目录下的文件。一个装入点就是一个数据区中包含了卷的内部名称的重解析点,这个内部名称具有以下的  格式:    \??\Volume{XX-XX-XX-XX}   其中的所有X代表Windows 2000为这个卷所分配的全局唯一标识(GUID)。   当你打开文件"C:\articles\documents\column.doc"的时候,NTFS发现关联到\documents目录上的装入点,从中读出装入点的重解析数据(卷的内部名称),然后向对象管理器返回一个重解析状态。I/O管理器截取到该状态,分析重解析数据后发现NTFS遇到了一个装入点,于是改变这个文件的查找路径,并递交给对象管理器,启动一次使用改变过的路径(\??\Volume{GUID}\documents\column.doc)的文件查询,这次查寻将\documents\column.doc继续解析到安装的卷上。用户可以使用MS管理台磁盘管理工具(MMC Disk Management snap-in)或Windows 2000带的命令行工具:mountvol来建立或修改装入点。   NTFS连接点与装入点类似,I/O管理器和对象管理器使用与实现装入点一样的方法来实现连接点,只是连接点引用的是目录而不是卷。它在Windows 2000中的地位很像Unix中的符号链接,不同之处在于:连接点不允许指向文件。如果你建立一个从C:\articles\documents到D:\documents的连接点,就可以通过路"C:\articles\documents"来存取存贮在D:\documents中的文件。连接点的重解析点中存贮了重定向的路径信息,当NTFS发现一个连接点时,与处理装入点类似,I/O管理器改变路径名并发起一次新的文件查询,图3演示了连接点是如何工作的:

图3   当应用程序试图打开C:\directory1\file的时候,NTFS发现一个重解析点,经过分析,I/O管理器把路径名改为解析后的C:\directory2\file,最终,应用程序将打开C:\directory2\file文件。   有趣的是,Windows 2000并不附带任何建立连接点的工具,而且MS也不正式支持这一类的工具,原因是某些工具软件在使用带有连接点的路径时可能会工作不正常。不过你还是可以使用Windows 2000开发资源包中的工具或者一些第三方的连接点应用工具来建立和使用连接点。   当然,重解析点并不仅仅用于路径的重解析功能。层次型存贮管理(HSM)系统使用HSM重解析点来透明地把不常用的文件进行脱机保存。当要对一个文件进行脱机保存的时候,HSM系统删除原文件的内容并在原文件的存贮空间中建立一个重解析点,重解析数据包含了这个文件在外部存贮介质中的位置信息。当后来的应用程序要存取这个脱机HSM文件的时候,HSM中的驱动程序RsFilter.sys(Remote Storage Filter)将截获这个NTFS返回给对象管理器的重解析码,然后删除这个重解析点,并在外部存贮介质中取得文件数据,最后,发起一次新的文件请求。这一次,NTFS就可以正常地存取这个文件了,而应用程序则对发生的这一切一无所知。   当文件或目录关联了一个重解析点的时候,NTFS会在文件或目录的属性中为这个重解析点建立一个名为$Reparse的属性,这个属性中存贮了重解析码和重解析数据,这样NTFS就可以很容易地定位一个卷中所有的重解析点。NTFS还使用一个名为\$Extend\$Reparse的元数据文件来存贮从重解析点文件/目录的MFT号码到重解析码的映射项,并在$R索引中按照MFT号码有序。 配额管理:   在大多数场合,Windows 2000服务器以及NT服务器充当着文件服务器的角色。NT的一个不足之处在于系统管理员没有内建的工具来监控每个单独的用户耗费的服务器磁盘空间的数量,而这个问题也不得不留给一些第三方的配额管理软件来解决。Windows 2000系统提供了一些基本的配额管理工具,使得人们对于第三方工具的依赖性大大降低。Windows 2000的配额管理是基于卷和用户的,这得益于NTFS对配额的支持(FAT系统不支持配额管理)。管理员可以使用如图4中的管理界面来分配用户可以在卷中使用的磁盘空间的数量,设置告警或限制的界限。

图4   NTFS在\$Extend\$Quota元数据文件中存放配额信息,其中包括$O索引表和$Q索引表,图5中展示了这些索引表的组织方式。正如NTFS为每个安全描述符指定一个唯一的内部安全ID一样,NTFS为每个用户分配一个唯一的用户ID(User ID)。当管理员为一个用户指定配额信息的时候,NTFS就为这个用户分配一个对应于其SID的用户ID,并在$O索引表中建立一个从SID到用户ID的映射关系,存贮的时候按照用户ID排序。在$Q索引表中,NTFS则会建立一个配额控制项,其中包含了这个用户的配额限制信息,以及用户在本卷中已经使用了的磁盘空间的数量。

图5   当应用程序建立一个文件或目录的时候,NTFS首先获得该应用程序所属的用户的SID,并在$O索引表中查找相应的用户ID,找到后将其记录在新建文件或目录的$STANDARD_INFORMATION属性中,计算出文件或目录所占用的磁盘空间,然后NTFS在$Q索引表中查找到相应的配额限制信息,看新文件或目录的建立会否使用户使用的磁盘空间总数超过设置的告警及限制的界限,如果超过了,则NTFS会采取相应的措施(如记录到系统日志,阻止用户建立该文件或目录等)。当一个文件或目录的大小变更时,NTFS还会更新相应的配额控制项,以使记录的信息与实际情况保持一致,并且,由于使用了综合索引,NTFS高效地把SID与用户ID联系了起来,通过用户ID查找一个用户的配额控制信息也相当的迅捷。

[此贴子已经被作者于2004-6-5 10:34:12编辑过]

支持(0中立(0反对(0回到顶部
帅哥哟,离线,有人找我吗?
情受
  2楼 个性首页 | 博客 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 灌水无罪
等级:大一 主题:189 精华:0 贴子:2393 排名:731 威望:21 排名:76 注册:2004/4/14 18:12:00 近访:2010/10/5 15:43:27
  发贴心情 Post By:2004/6/5 1:51:00

强悍.

从来没见过这么详细的介绍.

今天可算是长了见识了,呵呵

谢谢楼主



前半生不放弃,后半生不后悔。
支持(0中立(0反对(0回到顶部
帅哥哟,离线,有人找我吗?
SnowGround
  3楼 个性首页 | 博客 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小二 主题:17 精华:0 贴子:151 排名:0 威望:1 排名:538 注册:2003/11/17 12:58:00 近访:2004/10/5 17:41:00
  发贴心情 Post By:2004/6/5 10:24:00

别谢我,我是志愿者嘛,有义务转一些知识性的东西过来。

不过我想我是不是还应该转一点初级一点的贴子过来。

这些东西对师大的大多数MM来说都太深了是不是啊。


支持(0中立(0反对(0回到顶部
帅哥哟,离线,有人找我吗?
情受
  4楼 个性首页 | 博客 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 灌水无罪
等级:大一 主题:189 精华:0 贴子:2393 排名:731 威望:21 排名:76 注册:2004/4/14 18:12:00 近访:2010/10/5 15:43:27
  发贴心情 Post By:2004/6/6 14:14:00

大概是吧。

的确应该转一点初级一点的贴子过来。

呵呵。



前半生不放弃,后半生不后悔。
支持(0中立(0反对(0回到顶部
帅哥哟,离线,有人找我吗?
木炭
  5楼 个性首页 | 博客 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小一 主题:3 精华:0 贴子:84 排名:0 威望:0 排名:0 注册:2004/5/14 4:17:00 近访:2006/10/23 21:22:56
  发贴心情 Post By:2004/6/6 22:47:00

支持楼主


此马甲征现实中的女朋友。。。人现在在广州市的最好!!!
支持(0中立(0反对(0回到顶部
帅哥哟,离线,有人找我吗?
SnowGround
  6楼 个性首页 | 博客 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小二 主题:17 精华:0 贴子:151 排名:0 威望:1 排名:538 注册:2003/11/17 12:58:00 近访:2004/10/5 17:41:00
  发贴心情 Post By:2004/6/7 9:33:00

支持我转这种贴子还是初级贴子啊?

支持(0中立(0反对(0回到顶部
帅哥哟,离线,有人找我吗?
chaomigx
  7楼 个性首页 | 博客 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:宝宝 主题:0 精华:0 贴子:3 排名:0 威望:0 排名:0 注册:2006/5/29 12:00:05 近访:2006/5/29 12:02:54
  发贴心情 Post By:2006/5/29 12:04:05

哪个看不到图呢

支持(0中立(0反对(0回到顶部
帅哥哟,离线,有人找我吗?
chaomigx
  8楼 个性首页 | 博客 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:宝宝 主题:0 精华:0 贴子:3 排名:0 威望:0 排名:0 注册:2006/5/29 12:00:05 近访:2006/5/29 12:02:54
哪个看不到图呢  发贴心情 Post By:2006/5/29 12:04:21

哪个看不到图呢!!!!!!!!!!!!!!

支持(0中立(0反对(0回到顶部
帅哥哟,离线,有人找我吗?
chaomigx
  9楼 个性首页 | 博客 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:宝宝 主题:0 精华:0 贴子:3 排名:0 威望:0 排名:0 注册:2006/5/29 12:00:05 近访:2006/5/29 12:02:54
哪个看不到图呢  发贴心情 Post By:2006/5/29 12:04:30

哪个看不到图呢!!!!!!!!!!!!!!

支持(0中立(0反对(0回到顶部
帅哥哟,离线,有人找我吗?
伊义
  10楼 个性首页 | 博客 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 水王元老执法TS 我不相信
等级:研二 主题:266 精华:1 贴子:7405 排名:22 威望:27 排名:49 注册:2004/5/24 12:46:00 近访:2025/11/7 20:30:54
  发贴心情 Post By:2006/5/29 13:28:58

知道了

以前一直不知道NTSF哪里好



Media Star

再也不要孤单

支持(0中立(0反对(0回到顶部