ShuangChenYue ShuangChenYue
首页
  • Cpp之旅
  • Cpp专栏
  • Effective_CPP
  • muduo网络库
  • Unix环境高级编程
  • Cpp提高编程
  • 计算机网络
  • 操作系统
  • 数据结构
  • Linux
  • 算法
  • 基础篇
  • MySql
  • Redis
  • 电子嵌入式通信协议
  • 深入浅出SSD
  • 文件系统
  • 汇编语言
  • STM32
  • 随笔(持续更新)
  • Git知识总结
  • Git 创建删除远程分支
  • nvm使用小结
  • 虚拟机固定 IP 地址
  • Shell 脚本学习笔记
  • VScode 插件 CodeGeeX 使用教程
  • KylinV10 将项目上传至 Github教程
  • KylinV10 安装 MySQL 教程(可防踩雷)
  • kylinV10-SP1 安装 QT
  • 高并发内存池
  • USBGUARD 项目编译环境配置
  • Power_Destory 项目
  • U 盘清除工具编译教程
  • 个人博客代码推送教程
  • HTML与CSS
  • JS学习
  • Vue3入门
  • Vue3进阶
  • 黑马Vue3
  • MFC编程随记
  • MFC实现ini配置文件的读取
  • MFC实现点击列表头排序
  • 贴图法美化Button按钮
  • 如何高效阅读嵌入式项目代码
  • NAND Flash
  • ARM 处理器
  • 嵌入式基础知识-存储器
  • 闪存存储和制造技术概述
  • 芯片IO驱动力
  • 主流先进封装技术介绍
  • 虎牙C++技术面经
  • 金山一面复习
  • 完美世界秋招 C++ 游戏开发面经(Cpp部分)
  • 博客搭建
  • 网站收藏箱
首页
  • Cpp之旅
  • Cpp专栏
  • Effective_CPP
  • muduo网络库
  • Unix环境高级编程
  • Cpp提高编程
  • 计算机网络
  • 操作系统
  • 数据结构
  • Linux
  • 算法
  • 基础篇
  • MySql
  • Redis
  • 电子嵌入式通信协议
  • 深入浅出SSD
  • 文件系统
  • 汇编语言
  • STM32
  • 随笔(持续更新)
  • Git知识总结
  • Git 创建删除远程分支
  • nvm使用小结
  • 虚拟机固定 IP 地址
  • Shell 脚本学习笔记
  • VScode 插件 CodeGeeX 使用教程
  • KylinV10 将项目上传至 Github教程
  • KylinV10 安装 MySQL 教程(可防踩雷)
  • kylinV10-SP1 安装 QT
  • 高并发内存池
  • USBGUARD 项目编译环境配置
  • Power_Destory 项目
  • U 盘清除工具编译教程
  • 个人博客代码推送教程
  • HTML与CSS
  • JS学习
  • Vue3入门
  • Vue3进阶
  • 黑马Vue3
  • MFC编程随记
  • MFC实现ini配置文件的读取
  • MFC实现点击列表头排序
  • 贴图法美化Button按钮
  • 如何高效阅读嵌入式项目代码
  • NAND Flash
  • ARM 处理器
  • 嵌入式基础知识-存储器
  • 闪存存储和制造技术概述
  • 芯片IO驱动力
  • 主流先进封装技术介绍
  • 虎牙C++技术面经
  • 金山一面复习
  • 完美世界秋招 C++ 游戏开发面经(Cpp部分)
  • 博客搭建
  • 网站收藏箱
  • 电子嵌入式通信协议

  • 深入浅出SSD

  • 文件系统

    • FAT16文件系统
    • FAT32文件系统
    • NTFS文件系统
      • 1. 概述
      • 2. NTFS 文件系统的结构
      • 3. $MFT 元文件
      • 4. MFT 偏移地址计算
      • 5. 遍历分区文件列表的思路
  • 汇编语言

  • STM32

  • 嵌入式软件开发
  • 文件系统
霜晨月
2024-06-03
目录

NTFS文件系统

# NTFS 文件系统

# 1. 概述

NTFS (New Technology File System),是 Windows NT 环境的文件系统。新技术文件系统是 Windows NT 家族(如,Windows 2000、Windows XP、Windows Vista、Windows 7 和 windows 8.1)等的限制级专用的文件系统(操作系统所在的盘符的文件系统必须格式化为 NTFS 的文件系统,4096 簇环境下)。NTFS 取代了老式的 FAT 文件系统。

NTFS 对 FAT 和 HPFS 作了若干改进,例如,支持元数据,并且使用了高级数据结构,以便于改善性能、可靠性和磁盘空间利用率,并提供了若干附加扩展功能。NTFS 文件系统拥有以下特点:

  • 安全性高:NTFS 支持基于文件或目录的 ACL,并且支持加密文件系统(EFS)。
  • 可恢复性:NTFS 支持基于原子事务概念的文件恢复,比较符合服务器文件系统的要求。
  • 文件压缩:NTFS 支持基于文件或目录的文件压缩,可以很方便的节省磁盘空间。
  • 磁盘配额:NTFS 支持磁盘配额,可针对系统中每个用户分配磁盘资源。

# 2. NTFS 文件系统的结构

当用户将硬盘的一个分区格式化为 NTFS 分区时,就建立了一个 NTFS 文件系统。NTFS 文件系统同 FAT32 文件系统一样,也是用“簇”为存储单位,一个文件总是占用一个或多个簇。

NTFS 文件系统使用逻辑簇号(LCN)和虚拟簇号(VCN)对分区进行管理。

  • 逻辑簇号:既对分区内的第一个簇到最后一个簇进行编号,NTFS使用逻辑簇号对簇进行定位。
  • 虚拟簇号:既将文件所占用的簇从开头到尾进行编号的,虚拟簇号不要求在物理上是连续的。

NTFS 文件系统一共由 16 个“元文件”构成,它们是在分区格式化时写入到硬盘的隐藏文件(以 ”$” 开头),也是 NTFS 文件系统的系统信息。

NTFS 的 16 个元文件介绍:

序号 元文件 功能
0 $MFT 主文件表本身,是每个文件的索引
1 $MFTMirr 主文件表的部分镜像
2 $LogFile 事务型日志文件
3 $Volume 卷文件,记录卷标等信息
4 $AttrDef 属性定义列表文件
5 $Root 根目录文件,管理根目录
6 $BitMap 位图文件,记录了分区中簇的使用情况
7 $Boot 引导文件,记录了用于系统引导的数据情况
8 $BadClue 坏簇列表文件
9 $Quota(NTFS4) 在早期的 Windows NT 系统中此文件为磁盘配额信息
10 $Secure 安全文件
11 $UpCase 大小写字符转换表文件
12 $Extend metadata directory 扩展元数据目录
13 $Extend$Reparse 重解析点文件
14 $Extend$UsnJrnl 加密日志文件
15 $Extend$Quota 配额管理文件
16 $Extend$ObjId 对象ID文件

# 3. $MFT 元文件

在 NTFS 文件系统中,磁盘上的所有数据都是以文件的形式存储,其中包括元文件。

每个文件都有一个或多个文件记录,每个文件记录占用两个扇区,而 MFT 元文件就是专门记录每个文件的文件记录。

NTFS 文件系统是通过 MFT 元文件专门记录每个文件的文件记录。由于 NTFS 文件系统是通过 MFT 来确定文件在磁盘上的位置以及文件的属性,所以 MFT 是非常重要的,MFT 的起始位置在 DBR 中有描述。MFT 的文件记录在物理上是连续的,并且从0开始编号。MFT 的文件记录在物理上是连续的,并且从0开始编号。MFT 的前 16 个文件记录总是元文件的,并且顺序是固定不变的。

# 4. MFT 偏移地址计算

说明 数值
MBR 开始扇区 63
每个扇区的字节总数 512
簇大小 8
每个 MFT 记录的簇数 1
MFT 的开始簇号 786432
  • 每个 MFT 字节总数 = 簇大小 * 每个扇区内的字节总数 = 8 * 512 = 4096
  • MBR 开始扇区字节总数 = MBR 起始扇区 * 每个扇区内的字节总数 = 63 * 512 = 32256
  • MFT 的开始位置的字节总数 = MBR 开始扇区字节总数 + MFT 的开始簇号 * 每个 MFT 字节总数 = 32256 + 786432 * 4096 = 3221257728
  • 将 3221257728 转换为十六进制,即得到 MFT 开始位置偏移地址 C0007E00

# 5. 遍历分区文件列表的思路

  1. 定位 DBR,通过 DBR 可得到 “$MFT” 的起始簇号及簇大小;   2. 定位并找到 “MFT” 后,在其中寻找根目录的文件记录,一般在5号文件记录;   3. 在 90H 属性中得到 B+ 树索引的根节点文件信息,重点在 A0 属性上。通过属性中的 “Run List” 定位到其数据流;   4. 从 “Run List” 定位到起始簇后,再分析索引项可以得到文件名等信息;   5. 从索引项中可以获取 “MFT” 的参考号;   6. 进入到 “MFT” 的参考号;   7. 进入到 “MFT” 找到对应的文件记录;   8. 然后再根据 80H 属性中的数据流就,可以找到文件真正的数据了。
上次更新: 2024/6/3 14:54:44
FAT32文件系统
第1章 基础知识

← FAT32文件系统 第1章 基础知识→

Theme by Vdoing | Copyright © 2023-2024 霜晨月
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式