NTFS源码阅读引导(1) -- NTFS 概述
来源:
NTFS 是一个日志型文件系统, 使用 NTFS Log($LogFile)记录针对卷的 metadata 修改, 以确保它内部数据的一致性.
目前 NTFS 主要版本有:
- 3.0: Windows 2000 开始
- 3.1: Windows XP 开始(又被称为 NTFS 5.1, 在 Win8 之后, LFS 版本更新为了 2.0)
一些特性简介
- NTFS 对 4KB cluster 的支持效果较好, 但最大支持到 2MB cluster 大小.
- NTFS 使用 ACL(access control list) 和用户级加密(EFS), 来确 保用户数据安全.
- 由于 Win8 及以上系统 $LogFile 版本为 2.0, Win7 及以下为 1.1, 因此在此两个系统挂载时, 为保证向下兼容, 在卸载前会对日志版本进行降级, 再在挂载时决定对日志升级与否.
- 支持硬链接, 限制最多一个文件 1024 个.
- 支持文件/目录级别的压缩(LZNT1 算法, 为 LZ77 的变种)
- 小于约 900 Byte 的文件会支持存储在 MFT 中对应目录项内.
- 在 metadata 中通过一定手段表示稀疏文件中的空洞, 空洞不占用实际存储空间.
sparse file
属性表示该文件允许有空洞. - 可以使用除 0x0000 外的任意 16 位值序列作为文件名/stream名/index名.
- 文件名长度限制 255 个 UTF-16 code unit.
- NT 内核限制 full path 长度为 32767 个 UTF-16 code unit.
- 保留的文件名包括:
$MFT
,$MFTMirr
,$LogFile
,$Volume
,$AttrDef
,.
(dot),$Bitmap
,$Boot
,$BadClus
,$Secure
,$UpCase
, and$Extend
. 其中.
(dot) 和$Extend
为目录, 其余为文件. - 所有 NTFS 中使用的时间值都是基于 UTC 的. 在 NTFS 和非 NTFS 文件系统间拷贝/移动文件, 需要在过程中转换时间.
NTFS 文件系统结构
- 一个 partition boot sector (PBS) 用于保存 boot 信息
- 一个 MFT(master file table)保存文件系统中所有文件和目录的记录.
- 一系列的 meta 文件用于高效组织元数据
- 数据流(data streams)以及 locking 机制支持.
- 一个文件系统日志, 用于保证文件系统元数据的完整性(不作用于单个文件的内容).
NTFS 内部使用 B 树索引文件系统中的数据, 一个格式化后的 NTFS 卷逻辑结构如下所示:
上述内容的细节, 详见文章开头的链接.