NTFS
维基百科,自由的百科全书
NTFS(New Technology File System)是Windows NT以及之后的Windows 2000、Windows XP、Windows Server 2003、Windows Server 2008、Windows Vista和Windows 7的标准文件系统。[4]
NTFS取代了文件分配表(FAT)文件系统,为Microsoft的Windows系列操作系统提供文件系统。NTFS对FAT和HPFS(高性能文件系统)作了若干改进,例如,支持元数据,并且使用了高级数据结构,以便于改善性能、可靠性和磁盘空间利用率,并提供了若干附加扩展功能,如访问控制列表(ACL)和文件系统日志。该文件系统的详细定义属于商业秘密[5][6][7] ,Microsoft已经将其注册为知识产权产品。[8][9]
歷史
1990年代早期,微軟(Microsoft)和IBM组建了一个联合计划,目标是创建一个下一代的操作系统。该项目的结果是诞生了OS/2,但由於Microsoft和IBM在很多重要问题上不能达成共识而最後分裂, OS/2至今仍属於IBM。Microsoft开始研究Windows NT。OS/2的文件系统HPFS包含了若干重要功能,而当Microsoft开始创建他们自己的新操作系统时,他们的NTFS从中借用汲取了很多方面。[10] 也许是因为它们有共同的祖先,HPFS和NTFS共享了相同的磁盘分区标识代码(0x07)。共享标识是很不寻常的,因为可用的代码还有很多,其他文件系统都使用它们自己的编号。例如,FAT拥有超过九个编号(FAT12丶FAT16丶FAT32 等等每个都有一个)。用於区分文件系统的算法当遇到代码0x07的时候就不得不进行额外的检查。
[编辑] 版本
NTFS 有五个正式发布的版本:
- v1.0,随 NT 3.1 一起发布[來源請求],发布于 1993 年中旬
- v1.1,随 NT 3.5 一起发布[來源請求],发布于 1994 年秋季
- v1.2,由 NT 3.51(1995 年中旬)和 NT 4(1996 年中旬)提供(有时候也被称为“NTFS 4.0”,因为操作系统版本是 4.0)
- v3.0 来自 Windows 2000(有时称作“NTFS 5.0”)
- v3.1 来自 Windows XP(2001 年秋季,有时称作“NTFS 5.1”),Windows Server 2003(2003 年春季,有时称作“NTFS 5.2”), Windows Vista(2005 年中旬,有时称作“NTFS 6.0”),Windows Server 2008(2008 年初),Windows Server 2008 R2(有时称作“NTFS 6.1”)以及 Windows 7
V1.0 和 V1.1 以及所有以后版本不兼容,也就是说,使用 NT 3.5x 写入的卷无法被 NT 3.1 读取,除非使用 NT 3.5x 光盘更新 NT 3.1,并添加对 FAT 系统的长文件名支持。[11] V1.2 支持压缩文件、命名流、基于 ACL(访问控制列表)的安全性等功能。[1]
V3.0 支持磁盘限额、加密、稀疏文件、重解析点[來源請求],更新序列数(USN)日志、$Extend 文件夹以及其中的文件,并改进了安全描述符,以便于使用相同安全设置的多个文件共享一个安全描述符。[1]
V3.1 使用冗余 MFT 记录数(用于恢复受损的 MFT 文件)扩展了主文件表(MFT)项Windows Vista 提供了事务 NTFS、NTFS 符号链接、收缩卷以及自我恢复功能,[12]但这些附加功能由操作系统提供,而非文件系统自身的功能。
请不要将 NTFS.sys 文件版本(如 Windows 2000 中引入的 NTFS v5.0)和 NTFS 磁盘格式版本(如 Windows XP 开始的 v5.1)相混淆。[13]NTFS v5.1 磁盘格式自从 Windows XP 开始就保持不变,也被随后用于 Windows Server 2003、Windows Server 2008、Windows Vista 以及 Windows 7。造成这种混乱的原因是 NTFS.sys 驱动程序的新功能是由 Windows 操作系统提供的,而非 NTFS 磁盘格式提供的。Microsoft 曾经在推出 Windows 2000 时详细列举了 NTFS 文件系统的新功能,并且将其称为 NTFS v5.0,但事实上这个版本号指的是 NTFS.sys 文件的版本,而磁盘格式版本仅仅是 v3.0。[14]
[编辑] 功能
相对于之前的版本,NTFS v3.0 包含若干新功能:磁盘使用限额、稀疏文件支持、重解析点、分布链接跟踪,以及文件级加密(也即“加密文件系统(EFS)”)。
[编辑] NTFS 日志
NTFS 是一个日志文件系统,使用 NTFS 日志($Logfile)记录卷更改元数据。
这是 NTFS 一个非常关键的功能(FAT/FAT32 不提供此项功能),用于确保其内部的复杂数据结构(比较重要的如卷分配图、磁盘碎片整理 API 进行的数据转移操作、MFT(主文件表)记录的更改情况(如移动 MFT 记录中存储的变长属性和属性表))和索引(用于目录和安全描述符)即使在系统发生崩溃后仍然能保持一致,并且在卷被重新加载后能够方便地对这些关键数据结构的失败提交进行回滚。
[编辑] USN 日志
USN 日志(更新序列数日志)是一项系统管理功能,用于记录卷中所有文件、数据流、目录的内容、各项属性以及安全设置的更改情况。应用程序可以利用日志追踪卷的更改。[15]对于非系统卷,可以选择打开或关闭日志[16],当添加一个新卷后,默认情况下日志功能处于打开状态。
[编辑] 硬链接和短文件名
硬链接原本用于支持 Windows NT 的 POSIX 子系统[17],该功能类似于目录链接,不过作用目标是文件而非目录。硬链接只能作用到同一个卷的文件中,因为它需要在文件的 MTF 记录中增加一个额外的文件名记录。短(8.3)文件名也同样使用额外文件名实现,以便于实现同步更新。当更改文件的尺寸或属性时,不会立即更新对应的目录或者链接,直到打开它们的时候才能体现相对应的变化。[18]
[编辑] 可选数据流(ADS)
可选数据流使得一个文件可以同时和多个数据流相关联,数据流的表述方式为“文件名:流名”,例如“text.txt:extrastream”。可选流不会显示在 Windows 资源管理器中,查看文件大小时它们的大小也不包含在内。如果将文件复制到 FAT 格式的磁盘、附加到电子邮件、上传到网站,或者移动到任何其它不支持可选流的位置上时,只有主数据流会被保留下来,其它可选流将被全部丢弃。因此,使用可选流来保存重要数据很可能发生意外。NTFS 流从 Windows NT 3.1 开始被引入,起初设计目的是为了 Services for Macintosh(SFM)能够正确存储 Macintosh的资源分岔。尽管现在 Windows 服务器已经不再包含 SFM 功能,很多第三方的Apple 归档服务(AFP)产品(例如 Group Logic 的 ExtremeZ-IP)仍然使用文件系统的这项功能。
有些恶意软件会使用可选数据流来隐藏程序代码。[19]一些恶意软件扫描程序和其它特殊工具现在已经可以检查可选流中的内容。 Microsoft 提供了一个叫作 Streams[20] 的工具,使得用户可以查看卷中的可选流。
Internet Explorer 和其它一些浏览器会在从网络上下载的文件中添加一个非常小的可选数据流,用于指示他们是从外来网站获得的,运行的时候可能不安全,因此在打开它们之前系统将会显示一个提示确认信息。.[21]当用户表示不希望再次看到这个确认对话框的时候,这个可选流将会从下载的文件中被直接删除。
有些媒体播放器也尝试使用可选数据流记录多媒体文件的自定义元数据以便于用户管理媒体文件,而这种方式无需修改媒体文件自身的内容(例如 MPEG、OGG 等格式提供的嵌入在文件内的标签信息)。Windows 资源管理器可能会作为额外的信息栏显示这些元数据。使用注册的 Windows 外壳扩展程序可以有效地解析这些数据,但是大部分媒体播放器还是使用自己的独立数据库而非可选数据流来保存这些信息。可选数据流的一个问题是受影响的文件上的信息对于所有用户都是可见的并且是共享的,因此无法有效地根据每个用户的安全设置和个人偏好而进行分别进行管理、设定和保护。
[编辑] 限额
磁盘限额是 NTFS v3 提出的功能。该功能允许计算机管理员在支持该功能的 Windows 版本上为用户允许占用的磁盘空间设置阈值,同时也允许管理员跟踪察看每个用户使用的磁盘空间量。管理员可以为用户设置需要收到警告的磁盘空间使用级别,并当他们超过使用上限时拒绝对磁盘的访问。当 NTFS 的文件压缩启用时,磁盘限额不会影响该功能。当应用程序查询用户可用的剩余磁盘空间时,如果设置了磁盘限额,也会收到限额的数值。
磁盘限额功能在 Basic、Home 和 MediaCenter 版本的 Windows 上不受支持,必须安装 Professional、Ultimate 或者服务器版本的 Windows,或者上使用 Windows 域中的企业部署工具来使用这项功能。
[编辑] 稀疏文件
稀疏文件是包含稀疏数据集的文件,这些文件将储存文件在不同位置的多个片段的内容,而片段之间的内容将不会储存,特别适合大部分内容为空、只有少量实际数据的文件。当读取文件的时候,文件系统驱动程序将会对任何不存在的位置上的信息返回 0,因此文件内容看起来几乎全是零。很多数据库和科学程序有时会用到稀疏文件。[22]。因此,Microsoft 实现了对稀疏文件的高效存储支持,允许应用程序指定文件的空(零)数据区域。读取稀疏文件的应用程序可以使用常规方法读取数据,操作系统将根据当前位置的偏移量决定需要返回什么数据。和压缩文件相同,文件的实际大小不会影响对磁盘限额的判断。[23][24]
[编辑] 重解析点
该功能在 NTFS v3 中可用。该功能将在用户空间中为文件或目录添加一个关联的重解析标记属性。当对象管理器(请参见Windows NT 线执行)解析文件系统名称并遇到重解析点属性时,它将“重解析”名称,将用户控制的重解析数据传递给所有 Windows 系统加载的文件过滤驱动程序。每个过滤驱动程序都将检查重解析数据,判断是否和该重解析点相关联。如果过滤驱动程序判定匹配,则将拦截文件系统调用,并执行自己的特定功能。重解析点用于实现卷加载点、目录连接、分层存储管理、本机结构存储,以及单实例存储。
[编辑] 卷加载点
类似于 Unix 加载点,是另一个文件系统附加到目录的根位置。在 NTFS 中,该功能允许附加的文件系统无需为每个驱动器分配单独的卷标(如 C: 或 D:)而加载。
当卷被加载到另一个卷的根目录的时候,该目录原来的内容变得不可见,被新加载的卷的根目录中的内容替代。被加载的卷仍然可以自己的独立卷标。文件系统不允许卷之间相互加载。卷加载点可以是永久的(系统重新引导后自动重新加载),也可以是非永久的(系统重新引导后需要手动重新加载)。
被加载的卷可以使用 NTFS 外的其它文件系统。一个常见的例子是它可以是一个远程共享的目录,并且可能拥有自己的权限设置,并且根据远程文件系统的策略重新映射当前系统的访问权限。
[编辑] 目录连接
类似于卷加载点,但 目录连接将对象连接到文件系统中的其他目录而非卷。例如,目录
C:\exampledir
带有一个目录连接属性,链接到D:\linkeddir
,则当用户级别的应用程序访问时,将自动引用到目录D:\linkeddir
。[1]该功能在概念上类似于 Unix 的目录符号链接,只是在 NTFS 中目标必须是另一个目录(典型的 Unix 文件系统允许将符号链接连接到任何其它类型的文件),而语义上等效于硬链接。目录连接(可以在控制台中通过命令 MKLINK /J 连接名 目标目录 创建,使用 RMDIR 连接名junctionName 删除)是永久性的,在服务端进行解析时,使用和所属的卷相同的本地系统或域的安全领域,并且访问它和它的内容时,使用和目标目录以及其内容使用同样的安全设置。但连接本身可能拥有独立的安全设置,并且删除一个目录连接不会同时删除目标目录。
有些目录连接时 Windows Vista 系统创建的,用于保持和早期版本的 Windows 的兼容性,例如系统驱动器中的 Documents and Settings 文件夹会被连接到同一个卷中的 Users 物理目录上。但这些目录默认情况下是隐藏的,并且进行了相关的安全设置,因此 Windows 资源管理器将拒绝外壳或者大部分应用程序直接打开它们,除非使用本机内置的 SYSTEM 账户或者本机的 Administrators 用户组成员访问(这些账户是系统软件安装程序所使用的)。这些附加的安全限制可能是为了防止用户发现两个看上去相同的文件夹,然后错误地删除它们。
目录连接属于软链接(即使目标目录已经被删除,他们也仍然存在),使用一种类似于有限制的符号链接的形式工作(对于目标位置有额外的限制),但它们是经过特殊处理优化的,可以加快重解析点的处理速度,相对于更新的 NTFS 符号连接而言开销更小,并且可以在服务器端解析,因此可以在远程共享目录中访问它们。
[编辑] 符号链接
- 参见:NTFS符号链接
符号链接(或称软链接)从 Windows Vista 开始被引入。[25]符号链接在客户端解析,因此如果共享一个符号链接,则目标将服从客户端的访问限制,而非服务端的限制。
符号链接可以链接到文件(使用 MKLINK 符号链接 目标文件名 创建),也可以链接到目录(使用 MKLINK /D 符号链接 目标目录 创建),不过和 Unix 符号链接不同,必须在创建链接的时候设定链接语义。但创建符号链接的时候目标并不需要存在或者可以访问,只有当访问符号链接的时候才会检查目标的可访问性。NTFS 也会同时检查符号链接的类型(文件或目录)是否正确,如果目标存在但是类型不正确,则系统会返回一个找不到目标的错误。
符号链接也可以引用远程主机上的共享文件夹,或者其中的文件或者子文件夹。但目标并不会被立即加载,而是在使用 OpenFile() 或者 CreateFile() API 请求打开的时候临时加载到系统中。符号链接将在被创建的 NTFS 上永久保留,所有类型的符号连接都可以通过文件的方式进行删除,可以命令行或者脚本中使用 DEL 符号链接 删除它们。
[编辑] 分层存储管理(HSM)
分层存储管理是一种转移一定时间不用的文件到价值更低的储存介质中的方法。当文件再次被访问时,文件上的重解析点将判定文件需要被使用,并将文件从储存介质中恢复出来。 分层存储的目的不仅是为了节省存储开销,而且也是对存储数据的有效管理。
[编辑] 本机结构存储(NSS)
本机结构存储是一种已经被 Microsoft 终止使用的 ActiveX 文档存储技术。该技术允许 ActiveX 文档 使用和 ActiveX 内部是用的多流格式相同的方式进行储存。系统将加载一个本机结构存储文件系统过滤器以用于为应用程序透明地处理多流格式。当文件被传输到非 NTFS 格式的磁盘卷上时,也将同时将多个流转换为一个流。[26]
[编辑] 卷影复制
卷影复制(VSC)服务通过将新改写的数据复制到卷影(写入时复制)来保存 NTFS 卷上的文件和文件夹的历史版本。当用户请求恢复旧早期版本时,旧的文件数据将会覆盖新的文件数据。该功能也使得数据备份程序可以存档当前系统正在使用的文件。对于负载较重的系统,Microsoft 建议将卷影副本设置到单独的磁盘上,以减小系统主要卷的 I/O 负载。
[编辑] 文件压缩
NTFS 压缩文件使用多种 LZ77 算法。 [27]在 4KB 的簇大小下,文件将以 64KB 为区块大小进行压缩。如果压缩后区块尺寸从 64KB 减小到了 60KB 或者更小,则 NTFS 就认为多余的 4KB 是空白的稀疏文件簇,也即认为它们没有内容。因此,这种模式将会有效的提升随机访问的速度。但是在随即写入的时候,大文件可能会被分割成非常多的小片段,片段之间会有许多很小的空隙。[28]
压缩文件最合适用于很少写入、平常顺序访问、本身没有被压缩的文件。压缩小于 4KB 或者本身已经被压缩过(如 .zip、.jpg 或者 .avi 格式)的文件可能会导致文件比原来更大并且显著降低速度。应该尽量避免压缩可执行文件,如 .EXE 和 .DLL 文件,因为他们可能内部也会使用 4KB 的大小对内容进行分页。决不要压缩引导系统是需要的系统文件,例如驱动程序,或者 NTDLR、winload.exe 或者 BOOTMGR。
压缩高压缩比的文件,例如 HTML 或者文本文件,可能会增加对他们的访问速度,因为解压缩所需的时间要小于读取完整数据所花费的时间。
通常情况下对于文件的读写是透明的,但并非所有情况下都始终如此。 [29] Microsoft 建议避免在保存远程配置文件的服务器系统或者网络共享位置上使用压缩,因为这会显著地增加让处理器的负担。[30]
硬盘空间受限的单用户操作系统可以有效地利用 NTFS 压缩。由于在计算机中速度最慢的访问不是 CPU 而是硬盘,因此 NTFS 压缩可以同时提高受限制的、慢速储存空间的空间和速度利用率。[31]
当某个程序(如下载管理器)无法创建没有内容的稀疏文件的时候,NTFS 压缩也可以作为稀疏文件的替代实现方式。
[编辑] 单实例存储(SIS)
当若干个不同目录中存有内容相同的文件时,单实例存储允许将相同文件归并到一个单一文件中,并创建对归并后的文件的引用。单实例存储包含一个用于管理复制、修改和归并文件的文件系统过滤器和一个用于搜索需要归并的相同文件的用户空间服务(“groveler”)。单实例存储的主要设计目标是远程安装服务器,这些服务器上往往拥有多个包含许多相同文件的安装镜像,单实例存储可以将它们统一起来。但和硬链接不同,每个文件仍然是独立的,更改任何一个副本都不会影响其它文件。和写入时复制类似,该技术不会立即完成内存复制,直到某个副本被更改。[32]
[编辑] 加密文件系统(EFS)
加密文件系统(EFS)提供对 NTFS 卷上任意文件和文件夹的用户透明的强保护。 加密文件系统与 EFS 服务、Microsoft 的加密应用程序接口(CryptoAPI)以及 EFS 文件运行时库(FSRTL)联合工作。 EFS 使用块对称密钥(也被称为“文件加密密钥(FEK)”)加密文件,这比起使用非对称密钥加密在加密和解密大量数据时消耗的时间较少。该对称密钥使用一个和加密文件的用户相关的公钥加密文件,加密后的数据储存在被加密文件的可选数据流中。当需要解密文件时,文件系统使用用户的密钥解密储存在文件头中的对称密钥,然后使用该对称密钥解密文件。这些操作在文件系统级别完成,因此对用户来说是透明的。[33] 同时,为了处理用户丢失密钥的情况,加密文件系统中提供了对附加解密密钥的支持,因此恢复代理在需要时仍然可以访问数据。NTFS 提供的加密和压缩功能是互相排斥的——NTFS 只能使用其中一种功能,另一种功能可以使用其它第三方工具完成。
EFS 在 Basic、Home 和 MediaCenter 版本的 Windows 上不受支持,必须安装 Professional、Ultimate 或者服务器版本的 Windows,或者上使用 Windows 域中的企业部署工具来使用这项功能。
[编辑] 事务 NTFS
在 Windows Vista 中,应用程序可以使用事务 NTFS(Transactional NTFS)将一系列对文件的更改归组到一个事务中。事务能够确保所有更改要么同时生效,要么同时作废,并能确保在事务提交完成前,外部应用程序无法获知任何更改。[34]
该技术使用和卷影复制类似的技术,以确保被改写的数据可以安全地回滚,通用日志文件系统的日志将记录下尚未成功提交或者已经提交但尚未完全生效的事务,通常情况下这是因为事务的某个参与者在提交过程中系统意外崩溃引起的。
事务 NTFS 并不要求事务必须在本地 NTFS 卷中,也可以包含在其它位置的事务数据或操作,例如在其它卷中、本地注册表中、 SQL 数据库中、系统服务或者远程服务中存储的数据。这些事务使用一个特定的服务“分布事务协调器(DTC)”在网络级别协调所有参与者,以确保所有参与者都能接收到同样的提交状态,以及传输将任何参与者确认的更改(这样其它参与者就可以清理过期的缓存数据或者回滚尚未提交的更改)。一个常见的用途是,利用事务 NTFS 可以很容易地创建一个网络级别的一致性分布式文件系统,并且每个参与者参与者都可以保留文件的脱机缓存。
[编辑] 互操作性
NTFS 具体实现的内部细节被保密,因此这导致第三方开发者试图制作处理 NTFS 的工具变得异常困难。
[编辑] Linux
完整并安全的对 NTFS 的读写功能由 NTFS-3G 驱动程序提供。该驱动程序包含在绝大多数Linux发行版中。同时也存在过时的,大部分仅只读的解决方案:
- Linux 内核 2.2:从版本 2.2.0 开始,可以读取 NTFS 分区。
- Linux 内核 2.6:包含一个由 Anton Altaparmakov(来自剑桥大学)和 Richard Russon 编写的驱动程序,该驱动程序支持读取文件以及在部分情况下的改写文件和调整文件大小。
- NTFSMount:使用 ntfsmount 可以通过一个用户级驱动程序对文件和目录进行有限的读写操作。[35]
- NTFS for Linux:由 Paragon 提供的对 NTFS 提供完整读写支持的商用驱动程序。
- Captive NTFS:一个使用 Windows 自身的驱动程序“ntfs.sys”并进行简单封装的驱动程序。
请注意,上面所有三个用户级别驱动程序(NTFSMount、NTFS-3G 以及 Captive NTFS)都基于用户空间文件系统(FUSE),该系统是一个用于在用户空间和内核代码间通讯以获取或保存数据的 Linux 内核模块。技术上面所有的驱动程序(除了 Paragon NTFS for Linux)都是开源(GPL)的。由于 NTFS 内部结构非常复杂,内置的 2.6.14 内核驱动程序和 FUSE 都不允许修改被认为是不安全的卷,以避免发生损坏事故。
[编辑] Microsoft Windows
尽管绝大多数 NTFS 版本的绝大部分都完全向前以及向后兼容,在旧版本的 Microsoft Windows 加载新版本的 NTFS 卷仍然存在不少技术问题。这往往会影响到多重启动,以及外部可携带的硬盘。
例如,在不支持的操作系统上尝试使用带有“先前版本”(严格的说称为卷影副本)的 NTFS 分区,会导致这些先前的版本产生丢失。[36]
[编辑] 其他
eComStation、KolibriOS,以及 Mac OS X 版本 10.3 及以后版本都提供对 NTFS 的只读访问支持(eComStation 有一个测试版本的驱动程序允许写入/删除操作,但通常认为该驱动程序还不安全)。BeOS 有一个基于 NTFS-3G 的的第三方工具,允许完整的 NTFS 读写操作。除了 Linux, NTFS-3G 也能工作在 Mac OS X、FreeBSD、NetBSD、Solaris 以及 Haiku 上。同时,也有一个称为“NTFS4DOS”的商用驱动程序允许在 DOS 下进行读写。[37]Mac OS X 有一个商用的可读写的 NTFS 驱动程序,名称为“Paragon NTFS for Mac OS X”。[38]
[编辑] 从其它文件系统转换
Microsoft 当前提供了一个工具(convert.exe),可以将HPFS(仅 Windows NT 3)、FAT16 以及在 Windows2000 以上的 FAT32 卷转换为 NTFS。[39]
[编辑] 调整大小
有许多第三方工具可以安全地重新调整 NTFS 分区的大小。在 Windows Vista 中,Microsoft 添加了收缩和扩展分区的功能,但该功能非常有限,因为该功能不会整理页面文件碎片或标记为不可移动的文件,因此限制了对分区的收缩能力。取消页面文件重新启动或使用第三方的工具进行磁盘碎片整理可能能产生一定效果。
[编辑] 协调时间
由于历史原因,所有不支持 NTFS 的 Windows 系统内部都将时间记录为本地时区时间,因此当前版本的 Windows 支持其他所有版本的文件系统。而 Windows NT 及以此派生的系统使用通用协调时间(UTC)记录内部时间戳,并在显示时进行必要的转换,也就是说,NTFS 是 UTC 时间。这意味着当在 NTFS 和非 NTFS 分区间移动或复制文件时,操作系统需要转换时间戳。但如果被移动的部分文件使用了夏时制,而其他文件使用了标准时间,则转换会导致不能确定结果。特别是当在本地时区时间更改的短暂时刻中,用户可能会发现部分文件的时间戳错开了一小时。由于夏时制在南北半球的实现不一致,可能会导致在任意 12 个月中产生最多 4 个小时的时间戳错误。[40]
[编辑] 内部实现
在 NTFS 中,所有文件数据——文件名、创建日期、访问权限,以及内容——都作为元数据储存在主文件表中。这种抽象的实现方式使得随着 Windows NT 的发展而添加文件系统功能变得非常容易。一个很典型的例子是为使用 Active Directory(活动目录)的应用程序添加用于索引的字段。
NTFS 允许为名称编码(包括文件名称、流名称、索引名称等)使用任意序列的 16 位值。这意味着支持 UTF-16 码位,但文件系统不会检查某个 UTF-16 序列是否有效(也即允许任意短整数序列,不受 Unicode 标准的限制)。
在内部,NTFS 使用 B+树索引文件系统数据。尽管该方式实现较为复杂,但能够在大多数情况下提高文件的查找速度。文件系统日志用于确保文件的元数据完整,而不是孤立的文件内容。相比于使用 FAT 的文件系统,使用 NTFS 的文件系统能够提高可靠性。[41]
主文件表(MFT)包含每个文件及目录的元数据,以及 NTFS 卷的元文件。这其中包括文件名、位置、大小,以及权限。它的结构和算法被设计为可以最小化磁盘碎片。目录项包含一个文件名和一个“文件 ID”,该 ID 表示文件在主文件表中的记录编号。文件 ID 同时包含重复使用计数值,用于检测过期的引用。这种结构非常类似 Files-11 的 W_FID,但 NTFS 的其他结构却有着根本的区别。
[编辑] 元文件
NTFS 包含若干用于定义和组织文件系统的文件。总体来说,这些文件中的绝大多数结构和其它用户文件类似(“$Volume”是最特殊的),但不能被文件系统客户端直接访问。这些元文件用于定义文件、备份文件系统关键数据、缓存文件系统的更改、管理空闲空间的分配、满足 BIOS 的要求、跟踪坏扇区单元,以及储存安全信息和磁盘空间使用情况。
没有评论:
发表评论