一、Ntfs文件系统在磁盘上的分布
一个ntfs文件系统由引导扇区、MFT(包含MFT元数据)和数据区组成。
NTFS中存储了两份MFT备份以防MFT文件损坏,两个MFT备份的具体起始位置都存储在引导扇区中。
image.png
二、引导扇区($Boot)
引导扇区是从NTFS文件系统的第一个扇区开始,以55 AA结尾。我们主要关注前88字节的信息,其中重要的就是“NTFS”标识、扇区大小、每簇扇区数、MFT起始簇以及MFT备份MFTMirr位置这些信息。我们可以根据MFT起始簇信息找到MFT,或者根据MFT备份MFTMirr位置找到MFT的另外一个MFT备份。如下图所示:
image.png
1 typedef struct NTFS_BPB{ // 在cmd 输入 fsutil fsinfo ntfsinfo d: 查询 NTFS 信息
2 UCHAR jmpCmd[3];
3 UCHAR s_ntfs[8]; // "NTFS " 标志
4 // 0x0B
5 UCHAR bytesPerSec[2]; // 0x0200 扇区大小,512B
6 UCHAR SecsPerClu; // 0x08 每簇扇区数,4KB
7 UCHAR rsvSecs[2]; // 保留扇区
8 UCHAR noUse01[5]; //
9 // 0x15
10 UCHAR driveDscrp; // 0xF8 磁盘介质 -- 硬盘
11 UCHAR noUse02[2]; //
12 // 0x18
13 UCHAR SecsPerTrack[2]; // 0x003F 每道扇区数 63
14 UCHAR Headers[2]; // 0x00FF 磁头数
15 UCHAR secsHide[4]; // 0x3F 隐藏扇区
16 UCHAR noUse03[8]; //
17 // 0x28
18 UCHAR allSecsNum[8]; // 卷总扇区数, 高位在前, 低位在后
19 // 0x30
20 UCHAR MFT_startClu[8]; // MFT 起始簇
21 UCHAR MFTMirr_startClu[8]; // MTF 备份 MFTMirr 位置
22 //0x40
23 UCHAR cluPerMFT[4]; // 每记录簇数 0xF6
24 UCHAR cluPerIdx[4]; // 每索引簇数
25 //0x48
26 UCHAR SerialNum[8]; // 卷序列号
27 UCHAR checkSum[8]; // 校验和
28 }Ntfs_Bpb,*pNtfs_Bpb;
三、主文件表 (Master File Table, MFT)
MFT是什么,什么作用?
在NTFS中,整个卷的所有文件信息(包括MFT本身、数据文件、文件夹等等)都存储在MFT。每一个文件在 MFT 中都有一个或多个 MFT 项记录文件属性信息。而且每项大小是固定的(一般为1KB),MFT保留了前16项用于特殊文件