Skip to main content

NTFS源码阅读引导(1) -- NTFS 概述

来源:

  1. 概要介绍: https://en.wikipedia.org/wiki/NTFS
  2. 详解: https://www.ntfs.com/index.html

NTFS 是一个日志型文件系统, 使用 NTFS Log($LogFile)记录针对卷的 metadata 修改, 以确保它内部数据的一致性.

目前 NTFS 主要版本有:

  1. 3.0: Windows 2000 开始
  2. 3.1: Windows XP 开始(又被称为 NTFS 5.1, 在 Win8 之后, LFS 版本更新为了 2.0)

一些特性简介

  1. NTFS 对 4KB cluster 的支持效果较好, 但最大支持到 2MB cluster 大小.
  2. NTFS 使用 ACL(access control list) 和用户级加密(EFS), 来确保用户数据安全.
  3. 由于 Win8 及以上系统 $LogFile 版本为 2.0, Win7 及以下为 1.1, 因此在此两个系统挂载时, 为保证向下兼容, 在卸载前会对日志版本进行降级, 再在挂载时决定对日志升级与否.
  4. 支持硬链接, 限制最多一个文件 1024 个.
  5. 支持文件/目录级别的压缩(LZNT1 算法, 为 LZ77 的变种)
  6. 小于约 900 Byte 的文件会支持存储在 MFT 中对应目录项内.
  7. 在 metadata 中通过一定手段表示稀疏文件中的空洞, 空洞不占用实际存储空间. sparse file 属性表示该文件允许有空洞.
  8. 可以使用除 0x0000 外的任意 16 位值序列作为文件名/stream名/index名.
  9. 文件名长度限制 255 个 UTF-16 code unit.
  10. NT 内核限制 full path 长度为 32767 个 UTF-16 code unit.
  11. 保留的文件名包括: $MFT, $MFTMirr, $LogFile, $Volume, $AttrDef, . (dot), $Bitmap, $Boot, $BadClus, $Secure, $UpCase, and $Extend. 其中 . (dot) 和 $Extend 为目录, 其余为文件.
  12. 所有 NTFS 中使用的时间值都是基于 UTC 的. 在 NTFS 和非 NTFS 文件系统间拷贝/移动文件, 需要在过程中转换时间.

NTFS 文件系统结构

  • 一个 partition boot sector (PBS) 用于保存 boot 信息
  • 一个 MFT(master file table)保存文件系统中所有文件和目录的记录.
  • 一系列的 meta 文件用于高效组织元数据
  • 数据流(data streams)以及 locking 机制支持.
  • 一个文件系统日志, 用于保证文件系统元数据的完整性(不作用于单个文件的内容).

NTFS 内部使用 B 树索引文件系统中的数据, 一个格式化后的 NTFS 卷逻辑结构如下所示:

ntfs volume logical structure

上述内容的细节, 详见文章开头的链接.