NTFS文件系统的论述.docx
《NTFS文件系统的论述.docx》由会员分享,可在线阅读,更多相关《NTFS文件系统的论述.docx(21页珍藏版)》请在冰豆网上搜索。
![NTFS文件系统的论述.docx](https://file1.bdocx.com/fileroot1/2023-1/2/5d5b8b25-1748-46b5-bce8-aac704298fdc/5d5b8b25-1748-46b5-bce8-aac704298fdc1.gif)
NTFS文件系统的论述
操作系统
题目:
NTFS文件系统的论述
姓名xx
学号xx
年级专业xx
指导教师xx
2014年5月26日
NTFS
NTFS(英语:
NewTechnologyFileSystem),是WindowsNT及之后的基于NT内核发展的Windows标准文件系统。
[4]
NTFS取代了文件分配表(FAT)文件系统,为目前Microsoft的Windows系列操作系统的主要文件系统。
NTFS在FAT和HPFS(高性能文件系统)的基础上作了一系列改进(如支持元数据)并且使用了更复杂的数据结构(B+树)以便于提升性能、改善可靠性并降低磁盘空间利用率。
NTFS还同时提供了若干附加的扩展功能,如访问控制列表和文件系统日志。
NTFS的详细设计规范属于商业秘密[5][6][7],Microsoft已经将其注册为知识产权产品。
[8][9]
目录
∙1历史
∙2版本
∙3功能
o3.1NTFS日志
o3.2USN日志
o3.3硬链接和短文件名
o3.4可选数据流(ADS)
o3.5限额
o3.6稀疏文件
o3.7重解析点
o3.8卷加载点
o3.9目录连接
o3.10符号链接
o3.11分层存储管理(HSM)
o3.12本机结构存储(NSS)
o3.13卷影复制
o3.14文件压缩
o3.15分布链接跟踪(DLT)
o3.16单实例存储(SIS)
o3.17加密文件系统(EFS)
o3.18事务NTFS
∙4互操作性
o4.1MicrosoftWindows
o4.2MacOSX
o4.3Linux
o4.4其他
o4.5从其它文件系统转换
o4.6调整大小
o4.7协调时间
∙5内部实现
o5.1主文件表(MFT)
o5.2元文件
o5.3从MFT到属性、属性表和流
o5.4常驻文件和非常驻文件
o5.5机会锁
∙6限制
∙7开发者
∙8另请参阅
∙9参考文献
历史
1990年代早期,微软(Microsoft)和IBM组建了一个联合计划,目标是创建新一代的操作系统。
该项目诞生了OS/2,但由于Microsoft和IBM在很多重要问题上无法达成共识,最后合作被终止,目前OS/2至今仍属于IBM,而Microsoft从此后开始研究WindowsNT。
OS/2的文件系统HPFS包含了许多重要功能,当Microsoft开始创建他们自己的新操作系统时,NTFS文件系统的很多功能正是从HPFS中借鉴改善的。
[10]可能正是因为他们来自于同一个项目,HPFS和NTFS使用相同的磁盘分区标识代码(0x07)。
这是一种特例情况,因为可用的标识码并不匮乏,其它每个文件系统具有自己的标识码,例如,FAT拥有超过九个编号(FAT12、FAT16、FAT32等等各自都拥有不同的标识码)。
这种特例也导致之后用于区分文件系统的算法当遇到代码0x07时候不得不进行额外的检测。
版本
NTFS有五个正式发布的版本:
∙v1.0,随NT3.1在1993年中旬发布[来源请求]
∙v1.1,随NT3.5在1994年秋季发布[来源请求]
∙v1.2,附随于NT3.51(1995年中旬)和NT4(1996年中旬)。
此版本有时候也被称为“NTFS4.0”,因为操作系统版本是4.0
∙v3.0,附随于Windows2000。
此版本有时称作“NTFS5.0”,原因同上
∙v3.1附随于WindowsXP(2001年秋季,有时称作“NTFS5.1”),WindowsServer2003(2003年春季,有时称作“NTFS5.2”),WindowsVista(2005年中旬,有时称作“NTFS6.0”),WindowsServer2008(2008年初),WindowsServer2008R2(有时称作“NTFS6.1”)以及Windows7
V1.0和V1.1和之后的所有版本不兼容。
也即使用NT3.5x写入的卷无法被NT3.1读取。
该问题的一个解决方案是使用NT3.5x光盘更新NT3.1,并添加对FAT系统的长文件名支持。
[11]V1.2支持压缩文件、命名流、基于ACL(访问控制列表)的安全性等功能。
[1]
V3.0支持磁盘限额、加密、稀疏文件、重解析点[来源请求],更新串行数(USN)日志、$Extend文件夹(及其中的文件),并改进了安全描述符设计方案,允许使用同样的安全设置的多个文件共享一个安全描述符。
[1]
V3.1在MFT中提供了冗余MFT记录数扩展项,此项目可用于恢复受损的MFT文件
WindowsVista提供了事务NTFS、NTFS符号链接、收缩卷以及自我恢复功能,[12]但这些附加功能由操作系统提供,而非文件系统自身的功能。
注意很多人会将NTFS.sys文件版本(如Windows2000中引入的NTFSv5.0)和NTFS磁盘格式版本(如WindowsXP开始的v3.1)相混淆。
[13]需要强调的是,NTFSv3.1磁盘格式自从WindowsXP开始就已经固定保持不变,也一直用于之后的WindowsServer2003、WindowsServer2008、WindowsVista以及Windows7系统。
NTFS.sys驱动程序的新功能(应用程序编程接口)来自于Windows操作系统,而非NTFS磁盘格式。
Microsoft曾经在推出Windows2000时详细列举了NTFS文件系统的新功能,并且将其称为NTFSv5.0,但事实上这个版本号指的是NTFS.sys文件的版本,而磁盘格式版本应当是v3.0。
[14]
功能
相对于之前的版本,NTFSv3.0包含若干新功能:
磁盘使用限额、稀疏文件支持、重解析点、分布链接跟踪,以及文件级加密(也即“加密文件系统(EFS)”)。
NTFS日志
NTFS是一个日志文件系统,使用NTFS日志($Logfile)记录卷更改元数据。
这是NTFS一个非常关键的功能(FAT/FAT32不提供此项功能),可确保其内部的复杂数据结构(如比较重要的如卷分配图、磁盘碎片整理API产生的数据转移操作、MFT(主文件表)记录的更改情况(包括移动MFT记录中存储的变长属性和属性表等))和索引(在目录和安全描述符中使用)即使在系统崩溃后仍然能保证一致性,而当在卷被重新加载后,可以非常容易地回滚这些关键数据的意外修改。
USN日志
USN日志(更新串行数日志)是一项系统管理功能,用于记录卷中所有文件、数据流、目录的内容、属性以及各项安全设置的更改情况。
应用程序可以利用日志追踪卷的更改。
[15]对于非系统卷,可以选择打开或关闭日志。
[16]当添加一个新卷后,默认情况下日志功能处于打开状态。
硬链接和短文件名
硬链接原本用于支持WindowsNT的POSIX子系统[17],该功能类似于目录链接,不过作用目标是文件而非目录。
硬链接只能作用到同一个卷的文件中,因为它需要在文件的MTF记录中增加一个额外的文件名记录。
短(8.3)文件名也同样使用额外文件名实现,以便于实现同步更新。
当更改文件的大小或其它属性时,对应的目录或者链接不会立即更新,直到打开它们的时候才会体现相应的变化。
[18]
可选数据流(ADS)
可选数据流使单个文件可以关联到多个数据流。
NTFS数据流的表述方式为“文件名:
流名”,例如“text.txt:
extrastream”。
可选数据流不会显示在Windows资源管理器中,也不会算入查看文件属性时显示的文件大小。
如果将文件复制到FAT格式的磁盘、附加到电子邮件、上传到网站,或者移动到任何其它不支持可选流的位置上时,则只有主数据流会被保留下来,其它可选流将被全部丢弃,因此使用可选流来保存重要数据很可能会发生意外。
NTFS流从WindowsNT3.1开始被引入,起初设计目的是为了ServicesforMacintosh(SFM)能够正确存储Macintosh的资源分岔。
现在的Windows服务器已经不再包含此功能,但很多第三方的Apple归档服务(AFP)产品(例如GroupLogic的ExtremeZ-IP)仍然会继续使用可选数据流。
有些恶意软件会使用可选数据流来隐藏程序代码,[19]不过不少恶意软件扫描程序和特殊工具现在已经能够检查可选数据流中的内容。
Microsoft也提供了一个叫作Streams[20]的工具,用户可以使用这个工具查看卷中的可选流。
InternetExplorer和其它一些浏览器会在从网络上下载的文件中添加一个非常小的可选数据流,用于标记它们来自于外部网站(表示可能会存在安全风险),用户在打开这些文件前系统将会显示一个确认提示。
[21]当用户表示不希望再次看到这个确认对话框的时候,这个可选流将会从下载的文件中被直接删除。
有些媒体播放器也尝试使用可选数据流记录多媒体文件的自定义元数据,用于管理媒体文件。
MPEG、OGG等格式通常在文件内签入信息标签记录媒体信息,但不是所有格式都支持这种设计,而使用可选数据流的好处正是他不会影响文件本身的内容。
在Windows中注册外壳扩展程序后,系统就可以解析这些数据,然后可以在Windows资源管理器的信息栏中显示它们。
但大部分媒体播放器还是选择使用独立数据库而非可选数据流来保存这些信息,因为可选数据流可能带来一些其它问题,一个典型问题是文件上的信息对于所有用户都可见并且是共享的,因此使用可选数据流将无法根据不同用户的安全设置和喜好进行分别管理和保护。
限额
磁盘限额是NTFSv3开始提供的功能。
此功能允许计算机管理员在受支持的Windows操作系统上为每个用户分别设定允许使用的磁盘空间阈值,或者跟踪查看每个用户使用的磁盘空间使用量。
管理员可以设定当某个用户使用了特定量的磁盘空间后收到“磁盘空间超限”的警告,甚至拒绝他们继续占用更多空间。
如果有文件或者目录使用了NTFS文件压缩,则磁盘限额管理的尺寸以压缩后的实际尺寸为准。
如果应用程序通过操作系统接口查询用户可用的剩余磁盘空间大小,开启限额后程序得到的大小将是在限额范围内的剩余空间,而不再是磁盘的总剩余空间。
Basic、Home和MediaCenter版本的Windows不支持磁盘限额功能。
要使用这个功能,必须安装Professional、Ultimate或者服务器版本的Windows,或者使用Windows域中的企业部署工具进行部署。
稀疏文件
稀疏文件是包含稀疏数据集的文件,稀疏文件只储存文件中各个有意义的片段,而片段之间的空白将被忽略,这种设计特别适合实际数据非常少、大部分区域空白的文件。
读取文件时,对任何被忽略的位置,文件系统程序都会返回数据0,因此文件内容看起来几乎全是零。
很多数据库和科学程序使用稀疏文件[22]。
Microsoft实现了对稀疏文件的高效存储支持,允许应用程序指定文件的空(零)数据区域。
读取稀疏文件的应用程序不需要做单独处理,可以继续使用常规方法读取数据,操作系统将根据读取的位置决定返回零或者实际数据。
和压缩文件类似,磁盘限额对稀疏文件的尺寸判断也以实际占用尺寸为准。
[23][24]
重解析点
该功能从NTFSv3开始可用。
该功能可以在用户空间中为文件或目录添加一个关联的重解析点属性。
当对象管理器(请参见WindowsNT线执行)解析文件系统名称并遇到重解析点属性时,它将“重新解析”名称,具体做法是:
Windows会将需要重解析的名称传递给已经加载的所有文件过滤驱动程序,每个过滤驱动程序都会检查重解析数据并判断自己是否和该重解析点相关联。
如果某个过滤驱动程序判定自己匹配该重解析点,则它将拦截这次文件系统调用,然后执行对应的特定功能。
重解析点是实现卷加载点、目录连接、分层存储管理、本机结构存储,以及单实例存储等功能的基础。
卷加载点
类似于Unix加载点,可以将一个卷的根目录附加到另一个文件系统的某个目录下。
这项功能可以让驱动器不需要单独的卷标(如C:
或D:
)就可以被访问。
当卷被加载到另一个卷的某个目录时,该目录原来的内容将无法访问,而被新加载的卷中的内容所代替。
被加载的卷仍然可以继续拥有独立的卷标。
NTFS文件系统不允许卷之间相互加载。
卷加载点可以是永久的,也可以是非永久的。
前者在系统重启后会自动加载,而后者需要手动重新加载。
被加载的卷可以使用NTFS外的其它文件系统。
一个常见的例子是,被加载的卷一个远程共享的目录,该目录拥有自己的权限设置,并且能够根据实际文件系统的策略为当前操作系统设定特定的访问权限。
目录连接
类似于卷加载点,但目录连接的连接目标是文件系统中的某个其它目录。
例如,目录C:
\exampledir带有一个目录连接属性,连接到D:
\linkeddir。
当用户级别的应用程序访问时,NTFS将自动把所有引用重定向到D:
\linkeddir。
[1]目录连接功能在概念上类似于Unix的目录符号链接,但符号链接可以连接到任何目标,而NTFS目录连接只允许连接到目录。
目录连接可以在控制台中通过命令MKLINK/J连接名目标目录创建,使用RMDIR连接名删除。
目录连接是永久性的,如果在客户端访问服务器的目录连接,则操作系统会使用被链接的目录所属的系统(或域)的安全设置。
但连接本身可能拥有独立的安全设置,并且删除一个目录连接不会同时删除目标目录。
有些目录连接是WindowsVista系统创建的,用于保持和早期版本的Windows的兼容性,例如系统驱动器中的DocumentsandSettings文件夹会被连接到同一个卷中的Users物理目录上。
这些目录默认情况下是隐藏的,并且进行了相关的安全设置,因此Windows资源管理器不允许外壳或者大部分应用程序直接打开它们,这样的设置可能是为了防止用户发现两个看上去相同的文件夹,然后错误地删除其中的某一个。
默认情况下只有本机的SYSTEM账户或者的Administrators用户组成员可以访问这些目录,这是考虑到这些账户安装软件的权限,而安装时可能会产生兼容性问题。
目录连接属于软链接(即使目标目录已经被删除,他们也仍然存在),使用一种类似符号链接的方式工作(只不过对于目标位置和类型有额外的限制),但NTFS文件系统对它们进行了特殊优化,解析更快,相比于之后提出的NTFS符号链接,目录连接的开销更小,且可以在服务器端解析,因此可以在远程共享目录中使用它们。
符号链接
参见:
NTFS符号链接
符号链接(或称软链接)从WindowsVista开始引入。
[25]符号链接在客户端解析,因此如果服务器上共享了一个符号链接,则客户端访问时将服从本机而非服务器端的访问限制。
符号链接可以链接到文件(使用MKLINK符号链接目标文件名创建),也可以链接到目录(使用MKLINK/D符号链接目标目录创建)。
和Unix符号链接不同的一点是,NTFS符号链接在创建的时候就要决定目标类型(目录或文件),但创建符号链接的时候并不需要目标已经存在或可以访问,在访问时才会实际检查可访问性。
NTFS在访问符号链接时也会检查目标的类型,由于NTFS不允许在任何位置有目录和文件同名,因此如果目标名称存在但是类型不正确,系统也会返回一个找不到目标的错误。
符号链接也可以引用远程主机上的共享文件夹或者其中的文件、子文件夹。
但目标并不会被立即加载,而是在应用程序使用OpenFile()或者CreateFile()API请求打开目标的时候才加载到系统中。
符号链接是永久的(重新启动后仍然保留在对应的卷上),可以在命令行或者脚本中使用DEL符号链接删除它们。
分层存储管理(HSM)
分层存储管理是一种转移一定时间不用的文件到价值更低的储存介质中的方法。
当文件再次被访问时,文件上的重解析点将判定文件需要被使用,并将文件从储存介质中恢复出来。
分层存储不但可以节省存储开销,也可以提高操作系统的数据读写和运行效率。
本机结构存储(NSS)
本机结构存储是一种已经被Microsoft终止使用的ActiveX文档存储技术。
这项技术允许ActiveX文档使用和ActiveX内部的多流格式相同的方式进行储存。
操作系统会加载一个NSS文件过滤驱动程序,可以在应用程序使用文件时透明地处理多流格式。
当NSS文件被传输到非NTFS格式的磁盘卷上时,文件内部的多个流将被合并转换为一个流。
[26]
卷影复制
卷影复制(VSC)服务通过将新改写的数据复制到卷影(写入时复制)来保存NTFS卷上的文件和文件夹的历史版本。
当用户请求恢复文件的早期版本时,旧的文件数据将会覆盖新数据。
该功能也使得数据备份程序可以存档当前系统正在使用的文件。
对于负载较重的系统,Microsoft建议将卷影副本设置到单独的磁盘上,以减小系统主要卷的I/O负载。
文件压缩
NTFS能够使用LZNT1算法(LZ77算法的一种变种)压缩文件。
[27]文件压缩以16个簇为一个区块进行,也即如果簇大小为4KB,则压缩时单个区块的大小为64KB。
如果压缩可以将64KB数据压缩到60KB或者更小,则NTFS会将多余的4KB页面视为稀疏文件簇,认为他们未经写入。
对此类簇的随机访问的性能是可以接受的,操作系统只需跟踪碎片链接即可。
但如果处理大型可压缩文件,则会产生大量碎片,因为NTFS会将每个小于64KB的区块都看成一个碎片区域。
[28][29]硬盘空间受限的单用户系统可以使用NTFS压缩在处理小文件(4KB到64KB,或者更大尺寸,具体范围取决于压缩比)时受益。
小于900字节的文件将被直接存储在MFT的目录项中。
[30]
闪存设备(如固态硬盘)没有传统硬盘的磁头移动延迟,因此对此类设备,磁盘碎片的影响非常有限。
具有快速多处理器系统的用户可以通过压缩应用程序文件和数据以提升速度并降低磁盘空间使用率。
[31]请注意,使用Sandforce控制器的SSD本身也会压缩数据,但由于传输的数据量变少,I/O负载负载也会降低。
数据压缩的最佳目标是内容具有重复性、很少写入、通常顺序访问,并且尚未被压缩过的文件。
例如,日志文件就是一种理想的压缩目标。
压缩系统引导时需要使用的文件,如驱动程序、NTLDR、winload.exe,或者BOOTMGR,会导致系统无法正确启动。
[32]不过在较新版本的Windows系统中,压缩重要的系统文件操作会被直接禁止。
当在驱动器或目录的“高级设置”中更改“将文件进行压缩”的设置时,每个文件将被独立进行压缩或者解压缩。
对于压缩文件的读写绝大部分时候是透明的[33],但Microsoft建议避免对服务器系统或者通过网络共享的远程配置文件进行压缩,因为这可能增加处理器的负担。
[34]Microsoft建议不要压缩超过30MB的文件,因为这可能会产生性能问题。
[来源请求]由于压缩文件会产生很多碎片,因此磁盘碎片整理过程通常需要花费更长时间。
计算机系统中最慢的设备通常不是CPU而是硬盘,因此NTFS压缩通常可以更有效地利用慢速的非RAM存储系统,节省空间和时间(前提是假设压缩文件的碎片不会连续存放)。
[35]
如果一个程序(如下载管理器)无法将没有内容的文件创建为稀疏文件,NTFS压缩也可以作为稀疏文件的替代技术。
[来源请求]
分布链接跟踪(DLT)
参见:
文件快捷方式
分布链接跟踪功能允许应用程序跟踪被重命名或者移动到同一计算机、域或工作组的其它卷中的文件、快捷方式和OLE链接。
[36]跟踪功能由一个系统服务提供,使用存储在元文件中的对象标识符(OID)索引实现。
[37]当应用程序请求跟踪某个文件或目录后,跟踪服务将会创建对象的OID项并指向目标。
在一个NTFSv3上执行文件重命名、复制或移动操作时,也会同时复制对象的OID,这样跟踪服务就可以有效地寻找到目标。
单实例存储(SIS)
当若干个不同目录中存有内容相同的文件时,单实例存储允许将相同文件归并到一个单一文件中,并将所有文件引用到实际的文件上。
单实例存储功能包含一个用于管理复制、修改和归并文件的文件系统过滤器和一个用于搜索需要归并的相同文件的用户空间服务(“groveler”)。
单实例存储提出时的主要针对目标是远程安装服务器,这些服务器上往往拥有若干个包含大量相同文件的安装镜像,单实例存储可以将它们统一起来,因而节省需要占用的总尺寸。
和硬链接不同的一点是,在SIS下,每个文件在逻辑上仍然是独立的,更改被合并为单个文件的任意其中一个文件都不会影响其它文件,而是会取消对该文件的合并并产生一个新的副本。
不过新文件不会立即写入到硬盘,NTFS使用类似于写入时复制的技术,在文件最终需要保存时才执行复制。
[38]
加密文件系统(EFS)
加密文件系统(EFS)提供对NTFS卷上任意文件和文件夹的用户透明的强保护。
加密文件系统需要与EFS服务、Microsoft的加密应用程序接口(CryptoAPI)以及EFS文件运行时库(FSRTL)联合工作。
EFS使用对称密钥(也被称为“文件加密密钥(FEK)”)加密文件,这比起使用非对称密钥加密在加密和解密大量数据时消耗的时间较少。
该对称密钥使用一个和请求加密文件的用户相关的公钥加密文件的内容,加密后的数据储存在被加密文件的可选数据流中。
当需要解密文件时,文件系统使用用户的密钥解密储存在文件头中的对称密钥,然后使用该对称密钥解密文件。
这些操作在文件系统级别完成,因此对用户来说是透明的。
[39]为了处理用户丢失密钥的情况,加密文件系统中还支持多个附加解密密钥,因此除用户外,授权过的恢复代理也能访问数据。
NTFS提供的加密和压缩功能是互相排斥的——如果同时希望加密和压缩,则NTFS文件系统级别只能打开其中一种功能,另一种功能需要使用其它第三方工具完成。
Basic、Home和MediaCenter版本的Windows上不支持EFS功能。
要使用这个功能,必须安装Professional、Ultimate或者服务器版本的Windows,或者使用Windows域中的企业部署工具进行部署。
事务NTFS
在WindowsVista中,应用程序可以使用事务NTFS(TransactionalNTFS)将一系列对文件的更改归组到一个事务中。
事务能够确保所有更改要么同时生效,要么同时作废,并能确保在事务提交完成前,其它应用程序无法无法检测到其中的更改。
[40]
该技术使用和卷影复制类似的技术,用以确保在事务不成功时,被改写的数据可以安全地回滚。
通用日志文件系统的日志将记录下尚未成功提交或者已经提交但尚未完全生效的事务(常见原因是事务的某个参与者在提交过程中系统意外崩溃)。
事务NTFS并不要求事务是本机NTFS卷的文件操作,可以包含在其它位置的任意事务数据或操作,例如对其它卷、本地注册表、SQL数据库中、系