NTFS
开发者 | Microsoft |
---|---|
全称 | New Technology File System |
发布 | 1993年7月 (Windows NT 3.1) |
分区标识 | 主引导记录(MBR):0x07 GUID磁碟分割表(GPT):EBD0A0A2-B9E5-4433-87C0-68B6B72699C7(基本数据分区(BDP)) |
结构 | |
目录内容 | B+树[1] |
文件分配 | Bitmap/Extents |
坏块 | $badclus |
限制 | |
最大文件尺寸 | 理論:16EiB減1KiB[2] 實際:16TiB減64KiB[2] |
最大文件数量 | 4,294,967,295個 (232-1)[2] |
最长文件名 | 255 UTF-16 编码单元[3] |
最大卷容量 | 理論:264減1簇[2] 實際:232減1簇[2] |
文件名字符集 | 在POSIX命名空间中,非U+0000 (NUL)和/ (斜杠)的任何UTF-16 字符(大小写敏感)。在Win32命名空间中,非U+0000 (NUL)、/ (斜杠)、\ (反斜杠)、: (冒号)、* (星号)、? (问号)、" (引号)、< (小于号)、> (大于号)和| (竖线或管道符)的任何UTF-16字符(大小写不敏感)。[3] |
功能 | |
日期记录 | 创建、修改、POSIX 更改、访问 |
日期范围 | 1601年1月1日 – 60056年5月28日(文件时间为 64 位数字,计时间隔为 100 纳秒(每秒一千万次),从 1601 年开始持续 58000+ 年) |
日期分辨率 | 100ns |
岔流 | 是(请参见下面的可选数据流') |
属性 | 只读、隐藏、系统、存档、内容未索引、脱机、临时 |
文件系统权限 | 访问控制列表(ACL) |
透明压缩 | 对每个文件,LZ77(Windows NT 3.51 以上) |
透明加密 | 对每个文件 DESX(Windows 2000 以上) Triple DES(Windows XP 以上) 高级加密标准(AES) (Windows XP Service Pack 1、Windows Server 2003 以上) |
单一实例存储(SIS) | 是 |
操作系统支持 | Windows NT 家族(Windows NT 3.1 到 Windows NT 4.0、Windows 2000、Windows XP、Windows Server 2003、Windows Vista、Windows Server 2008、Windows 7、Windows 8、Windows Server 2012)、UNIX-LIKE(NTFS-3G)、Mac OS X(10.4+,只读,可安装第三方支持) |
NTFS(英語:New Technology File System),是Windows NT及之后的Windows 2000、Windows XP、Windows Server 2003、Windows Server 2008、Windows Vista、Windows 7、Windows Server 2012和Windows 8的标准文件系统。[4]
NTFS取代了文件分配表(FAT)文件系统,为目前 Microsoft 的 Windows 系列操作系统的主要文件系统。NTFS 在 FAT 和 HPFS(高性能文件系统)的基础上作了一系列改进(如支持元数据)并且使用了更复杂的数据结构(B+树)以便于提升性能、改善可靠性并降低磁盘空间利用率。NTFS 还同时提供了若干附加的扩展功能,如访问控制列表和文件系统日志。NTFS 的详细设计规范属于商业秘密[5][6][7] ,Microsoft已经将其注册为知识产权产品。[8][9]
歷史
1990年代早期,微软(Microsoft)和 IBM 组建了一个联合计划,目标是创建新一代的操作系统。该项目诞生了 OS/2,但由于 Microsoft 和 IBM 在很多重要问题上无法达成共识,最后合作被终止,目前 OS/2 至今仍属於 IBM,而 Microsoft 从此后开始研究 Windows NT。OS/2 的文件系统 HPFS 包含了许多重要功能,当 Microsoft 开始创建他们自己的新操作系统时,NTFS 文件系统的很多功能正是从 HPFS 中借鉴改善的。[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 开始的 v3.1)相混淆。[13]需要强调的是,NTFS v3.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)
可选数据流使单个文件可以关联到多个数据流。NTFS 数据流的表述方式为“文件名:流名”,例如“text.txt:extrastream”。可选数据流不会显示在 Windows 资源管理器中,也不会算入查看文件属性时显示的文件大小。如果将文件复制到 FAT 格式的磁盘、附加到电子邮件、上传到网站,或者移动到任何其它不支持可选流的位置上时,则只有主数据流会被保留下来,其它可选流将被全部丢弃,因此使用可选流来保存重要数据很可能会发生意外。NTFS 流从 Windows NT 3.1 开始被引入,起初设计目的是为了 Services for Macintosh(SFM)能够正确存储 Macintosh 的资源分岔。现在的 Windows 服务器已经不再包含此功能,但很多第三方的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 加载点,可以将一个卷的根目录附加到另一个文件系统的某个目录下。这项功能可以让驱动器不需要单独的卷标(如 C: 或 D:)就可以被访问。
当卷被加载到另一个卷的某个目录时,该目录原来的内容将无法访问,而被新加载的卷中的内容所代替。被加载的卷仍然可以继续拥有独立的卷标。NTFS 文件系统不允许卷之间相互加载。卷加载点可以是永久的,也可以是非永久的。前者在系统重启后会自动加载,而后者需要手动重新加载。
被加载的卷可以使用 NTFS 外的其它文件系统。一个常见的例子是,被加载的卷一个远程共享的目录,该目录拥有自己的权限设置,并且能够根据实际文件系统的策略为当前操作系统设定特定的访问权限。
目录连接
类似于卷加载点,但 目录连接的连接目标是文件系统中的某个其它目录。例如,目录 C:\exampledir
带有一个目录连接属性,连接到 D:\linkeddir
。当用户级别的应用程序访问时,NTFS 将自动把所有引用重定向到 D:\linkeddir
。[1]目录连接功能在概念上类似于 Unix 的目录符号链接,但符号链接可以连接到任何目标,而 NTFS 目录连接只允许连接到目录。
目录连接可以在控制台中通过命令 MKLINK /J 连接名 目标目录 创建,使用 RMDIR 连接名 删除。目录连接是永久性的,如果在客户端访问服务器的目录连接,则操作系统会使用被链接的目录所属的系统(或域)的安全设置。但连接本身可能拥有独立的安全设置,并且删除一个目录连接不会同时删除目标目录。
有些目录连接是 Windows Vista 系统创建的,用于保持和早期版本的 Windows 的兼容性,例如系统驱动器中的 Documents and Settings 文件夹会被连接到同一个卷中的 Users 物理目录上。这些目录默认情况下是隐藏的,并且进行了相关的安全设置,因此 Windows 资源管理器不允许外壳或者大部分应用程序直接打开它们,这样的设置可能是为了防止用户发现两个看上去相同的文件夹,然后错误地删除其中的某一个。默认情况下只有本机的 SYSTEM 账户或者的 Administrators 用户组成员可以访问这些目录,这是考虑到这些账户安装软件的权限,而安装时可能会产生兼容性问题。
目录连接属于软链接(即使目标目录已经被删除,他们也仍然存在),使用一种类似符号链接的方式工作(只不过对于目标位置和类型有额外的限制),但 NTFS 文件系统对它们进行了特殊优化,解析更快,相比于之后提出的 NTFS 符号链接,目录连接的开销更小,且可以在服务器端解析,因此可以在远程共享目录中使用它们。
符号链接
符号链接(或称软链接)从 Windows Vista 开始引入。[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 项并指向目标。在一个 NTFS v3 上执行文件重命名、复制或移动操作时,也会同时复制对象的 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
在 Windows Vista 中,应用程序可以使用事务 NTFS(Transactional NTFS)将一系列对文件的更改归组到一个事务中。事务能够确保所有更改要么同时生效,要么同时作废,并能确保在事务提交完成前,其它应用程序无法无法检测到其中的更改。[40]
该技术使用和卷影复制类似的技术,用以确保在事务不成功时,被改写的数据可以安全地回滚。通用日志文件系统的日志将记录下尚未成功提交或者已经提交但尚未完全生效的事务(常见原因是事务的某个参与者在提交过程中系统意外崩溃)。
事务 NTFS 并不要求事务是本机 NTFS 卷的文件操作,可以包含在其它位置的任意事务数据或操作,例如对其它卷、本地注册表、 SQL 数据库中、系统服务或者远程服务中的事务修改。所有这些事务使用 Windows 系统中的“分布事务协调器(DTC)”服务在网络级别协调所有参与者,以确保所有参与者都能接收到同样的提交状态,并传输所有经过确认的更改。分布式 NTFS 事务的一个典型例子是可以以事务方式创建一个网络级别的分布式文件系统,并且每个客户端都保留每个文件的准确的脱机缓存。
互操作性
NTFS 具体的内部实现细节属于商业秘密,这给第三方开发者制作 NTFS 文件系统处理程序带来了很大的困难。
Microsoft Windows
尽管绝大多数 NTFS 版本的绝大部分都完全向前以及向后兼容,但在旧版本的 Microsoft Windows 加载新版本的 NTFS 卷仍然会产生不少技术问题。这种问题往往来自于同一台计算机的多重启动功能,或者使用移动硬盘设备传输文件。
例如,在不支持的操作系统上尝试使用带有“先前版本”(严格的说称为卷影副本)的 NTFS 分区,会导致先前版本数据丢失。[41]
Mac OS X
Mac OS X 10.3 及后续版本包含了对 NTFS 格式分区的只读支持。基于 GPL 授权的 NTFS-3G 也可以通过用户空间文件系统在 Mac OS X 上使用并读写 NTFS 分区。NTFS-3G 的开发团队还提供了一个性能更好的商业版本,名称为“Tuxera NTFS for Mac”。[42] Paragon Software Group 也出售可执行读写操作的驱动程序,名称为“NTFS for Mac OS X”,[43]部分希捷(Seagate)硬盘包含了该组件。[44]Mac OS X 10.6 和后续版本中包含有本机 NTFS 的写入支持,默认情况下此功能未激活,可以通过特定方法打开。但有用户报告此功能不稳定并会导致内核错误,可能这也是该功能未启动或者被宣告的原因之一。[45]
Linux
完整并安全的对 NTFS 的读写功能由 NTFS-3G 驱动程序提供。该驱动程序包含在绝大多数Linux发行版中。同时也存在过时的,大部分仅只读的解决方案:
- Linux 内核 2.2:从版本 2.2.0 开始,可以读取 NTFS 分区。
- Linux 内核 2.6:包含一个由 Anton Altaparmakov(来自剑桥大学)和 Richard Russon 编写的驱动程序,该驱动程序支持读取文件以及在部分情况下的改写文件和调整文件大小。
- NTFSMount:使用 ntfsmount 可以通过一个用户级驱动程序对文件和目录进行有限的读写操作。[46]
- Tuxera NTFS: 高性能可读写上业内核驱动, 主要是针对嵌入式设备, 他还开发了开源的 NTFS-3G 驱动.
- NTFS for Linux:由 Paragon Software Group 提供的对 NTFS 提供完整读写支持的商用驱动程序,桌面版可免费下载,嵌入式 Linux 版本则需要收费。
- Captive NTFS(已停止维护):一个使用 Windows 自身的驱动程序“ntfs.sys”并进行简单封装的驱动程序。
请注意,上面所有三个用户级别驱动程序(NTFSMount、NTFS-3G 以及 Captive NTFS)都基于用户空间文件系统(FUSE),该系统是一个用于在用户空间和内核代码间通讯以获取或保存数据的 Linux 内核模块。技术上面所有的驱动程序(除了 Tuxera NTFS 和 Paragon NTFS for Linux)都是开源(使用 GPL 授权)的。由于 NTFS 内部结构非常复杂,内置的 2.6.14 内核驱动程序和 FUSE 都不允许修改被认为是不安全的卷,以避免发生损坏事故。
其他
ComStation 和 FreeBSD 都提供对 NTFS 的只读访问支持(eComStation 有一个测试版本的驱动程序允许写入/删除操作,但通常认为该驱动程序还不安全)。BeOS 有一个基于 NTFS-3G 的的第三方工具,允许完整的 NTFS 读写操作。除了 Linux, NTFS-3G 也能工作在 Mac OS X、FreeBSD、NetBSD、Solaris 以及 Haiku 上。同时,也有一个称为“NTFS4DOS”的商用驱动程序允许在 DOS 下进行读写。[47] Ahead Software 曾经在 2002 至 2004 年间开发了一个名为 “NTFSREAD”的驱动程序(版本 1.200),可用于 DR-DOS,并曾包含在他们的 Nero Burning ROM 软件中。OpenBSD 在 2011年5月1日 发布的 4.9 版本中提供了针对 i386 和 amd64 体系结构的 NTFS 只读支持。[48]
从其它文件系统转换
Microsoft 当前提供了一个工具(convert.exe),可以将HPFS(仅 Windows NT 3)、FAT16 以及在 Windows2000 以上的 FAT32 卷转换为 NTFS。[49]
调整大小
有许多第三方工具可以安全地重新调整 NTFS 分区的大小。在 Windows Vista 中,Microsoft 添加了收缩和扩展分区的功能,但该功能非常有限,因为该功能无法整理页面文件碎片或者标记为不可移动的文件,因此限制了对分区的收缩能力。取消页面文件重新启动或使用第三方的工具进行磁盘碎片整理也许能改善收缩效果。
协调时间
由于历史原因,所有不支持 NTFS 的 Windows 系统内部都将时间记录为本地时区时间,而 Windows NT 以及由此派生的系统使用通用协调时间(UTC)记录内部时间戳(在操作系统显示文件时间时,系统会预先转换为当前用户对应的时区)。这意味着当在 NTFS 和非 NTFS 分区间移动或复制文件时,操作系统需要转换时间戳。但如果被移动的部分文件使用了夏时制,而其他文件使用了标准时间,则转换会导致不能确定结果。特别是当在本地时区时间正好处于夏时制和标准时制切换的过渡期时,文件的时间可能会戳错开一小时。由于夏时制在南北半球的实现不一致,严格来说,时间转换操作可能会导致在任意 12 个月中产生最多 4 个小时的时间戳错误。[50]
内部实现
在内部,NTFS 使用 B+树索引文件系统数据。这种数据结构的方式实现比较复杂,但能够在大多数情况下提高文件的查找速度。文件系统日志用于确保文件的元数据完整,不存在孤立的文件内容。相比于 FAT 文件系统,NTFS 文件系统的可靠性更高。[51]
NTFS 允许对名称(包括文件名称、流名称、索引名称等)使用除了 0x0000 以外的任意 16 位值序列进行编码。这意味着支持 NTFS 支持 UTF-16 码位,但文件系统并不会检查某个 UTF-16 序列是否有效(也即允许 NTFS 内部任意 16 位整数序列,不受 Unicode 标准的限制)。
主文件表(MFT)
在 NTFS 中,所有文件数据——文件名、创建日期、访问权限(使用访问控制列表(ACL)实现),以及内容——都作为元数据储存在主文件表中。这种抽象的实现方式能够大大简化为文件系统添加功能的成本。例如,Active Directory(活动目录) 服务可以很容易在文件系统中为文件添加索引字段。这种设计方式也使得 Everything 或者 Ultrasearch[52] 一类的软件可以不依赖于 Windows 索引服务实现对文件和文件夹名称的实时搜索。
MFT 结构支持最小化磁盘碎片的算法。[53]一个目录项同时包含“文件名”和“文件 ID”,后者是用于在主文件表中标识文件的记录编号。文件 ID 也包含“重用次数”信息,可用于检测对文件的过期引用。这点设计非常类似于 Files-11 文件系统的 W_FID,和 NTFS 的其他部分迥然不同。
元文件
NTFS 包含若干用于定义和组织文件系统的文件。总体来说,这些文件中的绝大多数结构和其它用户文件类似(只有“$Volume”比较特殊),但不能被文件系统客户端直接访问。这些元文件为定义文件、备份文件系统的关键数据、缓存文件系统的更改、管理空闲空间的分配、满足 BIOS 的要求、跟踪坏扇区单元,以及储存安全信息和磁盘空间使用情况等等多种不同需求提供支持。
区段编号 | 文件名 | 作用 |
---|---|---|
0 | $MFT | 描述卷上的所有文件,包括文件名、时间戳、流名称和数据流所在的簇的编号列表、索引、安全标识符,以及文件属性(如“只读”、“压缩”、“加密”等)。 |
1 | $MFTMirr | $MFT 的最开始的几个关键项的副本,通常是 4 项(4KiB)。 |
2 | $LogFile | 文件系统更改的事务日志,用于保护元数据的稳定性。 |
3 | $Volume | 卷的相关信息,如卷对象标识符、卷标、文件系统版本,以及若干卷标志(包括:“正在加载”、“需要扫描”、“需要调整 $LogFile 大小”、“在 NT4 上加载”、“正在更新卷序列号”、“需要升级结构”等)。卷序列号储存在 $Boot 文件中。 |
4 | $AttrDef | 所有 NTFS 项目使用到的属性的定义表,包含属性名称、属性编号和属性描述等。 |
5 | . | 根目录。 |
6 | $Bitmap | 一个位图,每一位按顺序指示卷上的对应簇正在被使用(1)或空闲(0)。 |
7 | $Boot | 卷引导记录,该文件始终位于卷的第一个簇,其中包含引导代码(用于定位并启动 NTLDR/BOOTMGR)、BIOS 参数块(其中包含卷序列号),以及 $MFT 和 $MFTMirr 所在的簇编号。 |
8 | $BadClus | 包含所有标记为“有坏扇区”的簇的一个文件。该文件通常被 chksdk(磁盘扫描)工具使用,用于管理所有簇状态,记录坏扇区,以及标记空白簇。 |
9 | $Secure | 访问控制列表(ACL)数据库,NTFS 将所有 ACL 信息集中存储于该数据库(而非每个文件独立存储各自的 ACL)以节省磁盘占用并提高执行效率。此部分包含两个索引,分别是:“$SII”——可能是[來源請求]安全 ID 索引,以及“$SDH”——安全描述符哈希。注意大部分 ACL 列表通常都很长,因此这个部分只是索引,记录的是实际存储 ACL 数据的 $SDS 流的位置。[1] |
10 | $UpCase | Unicode 大写字母表,用于确保在 Win32 和 DOS 命名空间下大小写不敏感。 |
11 | $Extend | 文件系统目录,用于包含若干操作系统或其它软件所需要的扩展数据,如 $Quota、$ObjId、$Reparse、$UsnJrnl 等。 |
12 ... 23 | 保留。 | |
通常是 24 | $Extend\$Quota | 磁盘限额设置。 |
通常是 25 | $Extend\$ObjId | 分布链接跟踪数据。 |
通常是 26 | $Extend\$Reparse | 卷上所有重解析点(如符号链接)的反引用,用于跟踪文件系统对象被引用的情况。 |
27 ... | file.ext | 常规文件系统项目的起始位置。 |
这些元文件会被 NTFS 文件系统程序进行特殊处理,无法直接查看,需要使用专门为此设计的工具完成实现查看其中的内容(例如 WinHex)。
从 MFT 到属性、属性表和流
对于每个 MFT 记录锁描述的文件或目录,都有一个线性存放的流描述符(也即属性)存储区,被打包后存放在一个变长记录(也即属性表)中,然后使用额外的填充符填充以满足 MFT 记录的 1Kib 对齐要求。这部分数据完整地描述了和文件相关联的所有数据流。注意此处的“流”和文件数据流不是一个概念,而是所有数据信息的统称。
每个流(或称属性)本身包含如下数据:类型(内部通常存储为一个固定长度的整数或者一个描述符,但通常开发应用程序开发时调用 FileOpen() 或者 FileCreate() API 时会使用等效的标识符来代表它)、流名称(可选,注意和文件名没有任何关系),以及数据(可选,但大部分流具有数据)。对于 NTFS 而言,文件的主数据(也即文件内容)、目录的索引信息、文件的可选数据流、以及文件的所有属性,处理方式都是完全相同的,他们都是属性表中的某个属性而已。
- 对于每个 MFT 中描述的文件(或非常驻的流描述符存储区,此概念请参考下文),每种流描述符(使用流类型+流名称联合区分)必须唯一。此外,NTFS 还对于描述符有一些用于排序的约束要求。
- NTFS 预定义了一种称为“空流”的类型,用于在流存储区中表明流描述符的结尾。空流必须是每个存储区中的最后一个流描述符,所有之后的剩余空间都将被忽略,只包含填充字节(用于满足 MFT 的记录尺寸要求或者非常驻流存储区的簇尺寸要求)。
- 对于每个 MFT 记录,某些类型的流必须存在,例外是整个记录只有一个空流表示该记录未使用。
- 某些类型的流不能包含名称,必须是匿名的。
- 这里的“某些”包括标准属性、 NTFS 的“文件名”流,以及“短文件名”流(注意如果该文件考虑对 DOS 应用程序的兼容性,则“短文件名”流并不一定出现)。有些时候文件也可能只包含“短文件名”而没有“文件名”,这时候短文件名会代替文件名显示在资源管理器的“文件名”一栏中。
- 即使流存储区中包含有“文件名”流,也并不表示文件一定会出现在文件系统中。要显示文件,该项目还必须要进入卷上的某个目录的索引表。注意目录的索引表中除了记录该文件的 MFT 记录编号外,也对文件单独提供一份 MFT 记录、安全描述符、属性表等,因此理论上单个文件可以被多个目录“硬链接”多次,并且在每个目录中显示为不同的名称。
- 表示文件数据的默认数据流的流类型为 $DATA,该数据流没有名称。可选数据流使用同样的流类型,但必须具有流名称。
- 目录的默认数据流和文件的情况不同,目录的数据流(存放文件的索引表)不是匿名的, NTFS 会通过目录的数据流的名称(如在 NTFS 3 以上版本中为“$I30”)来表明目录索引的格式。
可以使用 nfi.exe(NTFS 文件扇区信息实用工具)查看任意文件或者目录的数据流,这个实用工具目前包含在 Microsoft OEM Support Tools 中,可以免费发布。[54]
常驻文件和非常驻文件
为了优化小数据文件的资源占用并降低 I/O 负荷,在流描述符和文件数据大小总和不超过单个 MFT 最大记录大小时,NTFS 会直接将数据放入流描述符区域中(通常情况下,MFT 中数据流的内容是实际文件数据锁在的簇的列表)。此类直接将数据存入 MTF 的文件被称计算机取证工作者称为“常驻数据”。常驻文件允许的数据量受到文件其它信息占用的流描述符大小的影响,通常一个没有可选数据流流、文件名不长且无特殊 ACL 设置的文件大概需要占用 700 到 800 个字节。
- 某些流描述符(如上文提到的首选文件名、基本文件属性,以及下文所述的非常驻流主分配表)必须以常驻形式存在。
- 启用了 NTFS 加密的流、稀疏数据流,以及压缩数据流无法常驻。
- 非常驻流的分配图格式和文件是否为稀疏文件有关。对目前版本的 NTFS 而言,如果某个非常驻数据流被转换为稀疏流,将无法还原为非稀疏格式,因此该文件将无法重新常驻,除非将流完全截断并且丢弃整个稀疏分配图。
- 如果一个非常驻数据流碎片太多,以至于在 MFT 记录中无法放下整个分配图,则分配图本身可能也会被存放到一个非常驻流当中,而文件本身只包含一个小型常驻数据流,其内容是标识非常驻分配图所在的簇的位置。
- 如果一个文件的流太多(包括可选数据流、扩展属性、安全描述符等),流描述符无法完整放入 MFT 中,则 NTFS 也会建立一个非常驻数据流,用于存放必须常驻的流之外的其它流描述,该数据流使用和 MFT 一样的格式,但不再有空间尺寸限制。
由于常驻文件不直接占据簇(也即基本的“分配单元”),这使得 NTFS 卷有可能包含比簇数目更多的文件。例如,一个 80GB(74.5GiB)的分区,NTFS 可以将其格式化并产生 19,543,064 个 4KiB 的簇。除去系统文件(64MiB 日志文件,一个 2,442,888 字节的位图,以及大约 25 个簇的固定头部),还剩余 19,526,158 个簇可用于文件和索引。由于每个簇有 4 个 MFT 记录,因此卷理论上可以包含将近 4 × 19,526,158 = 78,104,632 个常驻文件。
机会锁
机会锁(Oplock)允许网络客户端改变对文件或数据流的缓存策略,以便于增强性能或降低网络占用。[55] 机会锁应用到文件某个打开的流上,不影响同一个文件的其它流。
机会锁可以用于在后台透明访问文件。 如果没有其它进程访问服务器文件,网络客户端可以避免向文件写入数据;而如果没有其他进程正在写入数据,客户端可以缓存即将读取的数据。
Windows 支持四种不同类型的机会锁:
- 等级 2(共享):多个读取,不可写入(也即读缓存)。
- 等级 1(独占):任意缓冲方式的独占访问(也即读写缓存)。
- 批量锁(也是独占的):在服务器上打开流,在客户端关闭流(读、写和句柄缓存)。
- 过滤锁(也是独占的):当其它程序尝试访问流时,应用程序和系统过滤器可以放弃该锁(读写缓存)(从 Windows 2000 开始受支持)
在 Windows 7 和 Windows Server 2008 R2 系统中,机会锁得到了增强,支持每个客户端使用独立的机会锁键。[56]
限制
下面是一些 NTFS 的限制:
- 保留的文件名
- 文件系统支持最长 32767 个 Unicode 字符的的路径[57]。但每个路径组成部分(目录或文件名)最多只允许包含 255 个字符[57],同时某些特定的名称需要用于保存 NTFS 将元数据,因此禁止用作普通的文件/目录名。NTFS 的元数据都存放在卷的根目录下,因此上文所述的文件名要求也仅限于根目录。被 NTFS 保留的名称有:$MFT、$MFTMirr、$LogFile、$Volume、$AttrDef、.(点)、$Bitmap、$Boot、$BadClus、$Secure、$Upcase,以及 $Extend[2]。在这些项目中,.(点)和 $Extend 是目录类型,其它项目均为文件类型。
- 最大卷尺寸
- 理论上 NTFS 的最大支持的卷尺寸为 264-1 个簇。但目前在 Windows XP Professional 中实现的 NTFS 卷的最大尺寸是 232-1 个簇。例如,如果簇大小为为 64KiB,则 NTFS 卷的最大尺寸是 256TiB 减去 64KiB。如果簇尺寸是用默认大小(4KiB),则 NTFS 卷的最大尺寸是 16TiB 减去 4KiB。另外,由于主引导记录(MBR)上的分区表支持的单个分区容量最大为 2TiB,因此如果 NTFS 卷的尺寸超过 2TiB,则必须创建为动态卷或者 GPT 卷。
- 最大文件尺寸
- 理论值:16EiB 减去 1KiB( 字节)。实际实现:16TiB 减去 64KiB( 字节)
- 可选数据流
- Windows 系统调用可能处理,也可能不处理可选数据流。[2]根据操作系统、应用程序和远程文件系统的实际实现情况,文件传输过程可选数据流可能会在没有任何提示的情况下被直接丢弃。[2]如果要保留可选数据流,则应当使用 BackupRead 和 BackupWrite 系统调用来移动或者复制文件,这两个 API 允许程序获取所有文件中的可选流,并可以选择每个流在移动/复制的过程中需要保留还是被丢弃。[2]
- 最大路径长度
- 绝对路径最多允许 32767 个字符[57]。相对路径最多允许 255 个字符。
- 日期范围
- NTFS 使用和 Windows NT 相同的计算方式:64 位时间戳,允许范围从 1601年1月到 60056年5月28日,分辨率是每秒钟一百万个计数单位。
开发者
NTFS 开发者包括:
- Tom Miller
- Gary Kimura
- Brian Andrew
- David Goebel
另请参阅
- 文件系统比较
- Files-11 — ODS-2 非常类似于 NTFS(如相比较于
INDEXF.SYS
和$Mft
,BITMAP.SYS
和$Bitmap
) - HPFS,为 OS/2 操作系统开发的文件系统
- ntfsresize
- Samba(软件)
参考文献
- ^ 1.0 1.1 1.2 1.3 1.4 Mark Russinovich. Inside Win2K NTFS, Part 1. Microsoft Developer Network. [2008-04-18].
- ^ 2.0 2.1 2.2 2.3 2.4 2.5 2.6 2.7 2.8 Microsoft Corporation. How NTFS Works. [2008-01-27].
- ^ 3.0 3.1 Richard Russon and Yuval Fledel. NTFS Documentation. [2007-07-01].
- ^ Custer, Helen. Inside the Windows NT File System. Microsoft Press. 1994. ISBN 978-1-55615-660-1.
- ^ File Systems Unraveled: New Technolgy File Systems. How-To Guides. pcnineoneone: 3. [2008-06-17].
- ^ Chris Quirke. NTFS vs. FAT32. May 2004 [2008-06-17].
- ^ Attachment A: Additional Laptop Security Considerations. Technical Guidance for HIV/AIDS Surveillance Programs. Centers for Disease Control and Prevention, Dept. of Health and Human Services. May 2004 [2008-06-17].
- ^ Inside Windows NT Disk Defragmenting. Microsoft Technet. Microsoft. March 3,2007 [2008-09-17].
- ^ Paul Thurrott. NTFS Licensee Reports Microsoft Threat, Apology. Windows IT Pro. February 2001 [2008-06-17].
- ^ Kozierok, Charles M. Overview and History of NTFS. PCGuide. April 17, 2001.
- ^ Recovering Windows NT After a Boot Failure on an NTFS Drive. Microsoft. November 1, 2006.
- ^ Loveall, John. Storage improvements in Windows Vista and Windows Server 2008 (PowerPoint). Microsoft Corporation: 14–20. 2006 [2007-09-04].
- ^ New Capabilities and Features of the NTFS 3.1. Microsoft. December 1, 2007.
- ^ 引用错误:没有为名为
Inside Win2K NTFS, Part 1
的参考文献提供内容 - ^ Change Journals (Windows). MSDN. [2010-04-16].
- ^ Creating, Modifying, and Deleting a Change Journal (Windows). MSDN. [2010-04-16].
- ^ MS Windows NT Workstation 4.0 Resource Guide, "POSIX Compatibility"
- ^ MSDN
- ^ Malware utilising Alternate Data Streams?, AusCERT Web Log, 21 August 2007
- ^ Sysinternals Streams v1.56
- ^
Russinovich, Mark E.; Solomon, David A.; Ionescu, Alex. File Systems. Windows Internals 5th. Microsoft Press. 2009: 921. ISBN 978-0-7356-2530-3.
一个使用多数据流的 Windows 组件例子是附件执行服务[...],根据文件所下载位置的所属区域不同[...],Windows 资源管理器可能会警告用户
- ^ Sparse File Errors: 1450 or 665 due to file fragmentation: Fixes and Workarounds, Microsoft Customer Service and Support (CSS) SQL Server Engineers Blog, March 4, 2009
- ^ Sparse Files. MSDN Platform SDK: File Systems. [2005-05-22].
- ^ Sparse FIles and Disk Quotas. Win32 and COM Development: File Systems. [2007-12-05].
- ^ Symbolic Links (Windows). MSDN.
- ^ John Saville, "What is Native Structured Storage?"
- ^ File Compression and Decompression. MSDN Platform SDK: File Systems. [2005-08-18].
- ^ Understanding NTFS Compression. [2011-03-16].
- ^ Shrinking the gap: carving NTFS-compressed files. [2011-05-29].
- ^ How NTFS Works. 2003-03-28 [2011-10-24].
- ^ Should You Compress Data On Your SSD?. 2011-12-01 [2013-04-05].
- ^ Disk Concepts and Troubleshooting. Microsoft. [2012-03-26].
- ^ Read-Only Filegroups and Compression. SQL Server 2008 Books Online (November 2009). [2010-04-20].
- ^ "Best practices for NTFS compression in Windows." Microsoft Knowledge Base. Retrieved on 2005-08-18.
- ^ Daily, Sean. Optimizing Disks. IDG books. January 1998 [2007-12-17].
- ^ http://msdn.microsoft.com/en-us/library/windows/desktop/aa363997.aspx
- ^ http://technet.microsoft.com/en-us/library/cc736811(WS.10).aspx
- ^ Single Instance Storage in Windows 2000 (PDF). Microsoft Research and Balder Technology Group.
- ^ How EFS Works, Microsoft Windows 2000 Resource Kit
- ^ Transactional NTFS. MSDN. [2007-02-02].
- ^ cfsbloggers. How restore points and other recovery features in Windows Vista are affected when dual-booting with Windows XP. The Filing Cabinet. July 14, 2006 [2007-03-21].
- ^ Tuxera NTFS for Mac. Tuxera. August 30, 2011 [September 20, 2011].
- ^ NTFS for Mac OS X, communication channel between Mac OS X and Windows. Paragon Software Group. [September 20, 2011].
- ^ Seagate Read/Write NTFS driver for Mac OS X
- ^ Alvares, Milind. Snow Leopard's hidden NTFS read/write support. Friday, October 2, 2009 [18 September 2010].
- ^ "ntfsmount wiki page on linux-ntfs.org"
- ^ Recovery information
- ^ http://openbsd.com/49.html
- ^ How to Convert FAT Disks to NTFS. Microsoft Corporation. 2001-10-25 [2007-08-27].
- ^ "Beating the Daylight Savings Time bug and getting correct file modification times" The Code Project
- ^ "Microsoft TechNet Resource Kit"
- ^ UltraSearch v1.7 – Freeware for Ultra-Fast File Search.
- ^ Master File Table. MSDN. July 2, 2012.
- ^
OEM Support Tools Phase 3 Service Release 2 Availability. Microsoft Corporation. 2007-02-21 [2010-06-16].
Windows NT File System (NTFS) File Sector Information Utility [...] A tool used to dump information about an NTFS volume
- ^ http://msdn.microsoft.com/en-us/library/cc308442.aspx
- ^ http://technet.microsoft.com/en-us/library/ff383236(WS.10).aspx
- ^ 57.0 57.1 57.2 更精确地说是 32767 UTF-16 码位,因为某些特殊的 Unicode 字符可能需要多个码位
- Bolosky, William J.; Corbin, Scott; Goebel, David; & Douceur, John R. Single Instance Storage in Windows 2000 (PDF). Microsoft Research & Balder Technology Group, Inc. date.
- Custer, Helen. Inside the Windows NT File System. Microsoft Press. 1994. ISBN 978-1-55615-660-1.
- Nagar, Rajeev. Windows NT File System Internals: A Developer's Guide. O'Reilly. 1997. ISBN 978-1-56592-249-5.
外部链接
- 文献:
- Low-level description of NTFS disk structures from the Linux-NTFS project
- NTFS.com – documentation and resources for NTFS
- Microsoft NTFS Technical Reference
- 实现技术:
- NTFS-3G – an open source read/write NTFS driver for Linux, FreeBSD, Mac OS X, NetBSD, Solaris and Haiku.
- Linux-NTFS – an open source project to add NTFS support to the Linux kernel (write support is limited, but can be used for simple tasks), and write POSIX-compatible utilities for accessing and manipulating NTFS (ntfsprogs; includes ntfsls, ntfsresize, ntfsclone, etc). Linux NTFS FAQ and howto
- Captive NTFS – a shim which used the Windows NTFS driver to access NTFS file systems under Linux