文件系统之FAT32、NTFS

一、磁盘的MBR
MasterBootRecord,主引导记录
大小为一个扇区即512B=446(引导程序)+64(16*4,DiskPartitionTable硬盘分区表)+55 AA(结束标志)
四个DPT一般为“基本分区、扩展分区、保留、保留”对应“C、其它盘、无、无”


二、分区结构
1、FAT32
文件系统之FAT32、NTFS
DBR(DosBootRecord,引导记录)
FAT(FileAllocationTable,文件分配表)

→ 磁盘文件是以簇为单位进行存储的,簇的大小是扇区的倍数,通常最大32KB也就是64个扇区;FAT32的簇号     是32位即4B,类似的,FAT16是2B
文件系统之FAT32、NTFS

→ 根文件夹中的每一项对应一个文件,大小为32B,其中有该文件首簇号和文件簇数等信息
文件系统之FAT32、NTFS

→ FAT表记录了文件数据的簇链,通过根文件夹首簇可以跳转到FAT中对应位置,根据簇号来定位数据存储位置
文件系统之FAT32、NTFS


2、NTFS
文件系统之FAT32、NTFS
MFT(MasterFileTable,主控文件表)

→  MFT的表项叫做FR,FileRecord,文件记录,大小为1KB,0~15个FR是元数据文件记录,16之后的是用户文件或目录记录(目录也被看作是文件);其中$Bitmap的文件用数组方式记录了DATA区每一簇的使用情况
文件系统之FAT32、NTFS

→ FR由“表头+属性+FFFFFFFFH结束标志”构成,属性由“header+body”构成,其中header的前四字节是属性标志,如30H--文件名属性,、80H--数据属性

→ Data属性详解:
小文件(不超过700多字节)直接存在该属性的body中,大文件则以“运行”的方式来存储
PS:相当于一段连续的簇打了个包,包的首簇号和簇数等信息以“运行项”的形式存储在body中
PPS:一个文件有多个包时就有多个运行项,要注意的是,后面运行项的首簇号是相对于前一项首簇号的偏移值
eg:0x20处的0040H是data run的偏移值,由80H开始偏移0040H即data run;有三个运行项,“ 4 1 12 30 DD 81 00”中“1”和“4”分别指后面1B和4B是该运行的簇数和首簇号
运行一,首簇号0081DD30H,簇数12H;运行二,首簇号(81DD30+4A03)H,簇数02H;…
文件系统之FAT32、NTFS


三、直接删除文件的变动
1、FAT32
① 根文件夹中对应项的首字节置“E5”,首簇号高位两字节置“00 00”
② FAT表中对应簇链表的各簇号置“00 00 00 00”
2、NTFS
① 该文件的FR偏移16H处的一个字节改变:0--文件被删除,1--文件正被使用,2--是一个目录,3--目录被删除
② 该文件父文件夹的INDEX_ROOT属性(90H属性)或者INDEX_ALLOCATION(A0H属性)改变…
③ $Bitmap中把该文件所占用的簇对应的位置置0


四、一些问题
1、在存储文件时,FAT32先按顺序进行簇分配,先存的文件首簇号在前,后存的在后,存储顺序和簇链顺序是线性的;删除一些文件后簇链表之中出现一些未占用簇碎片,此时再存储新文件时就打破了线性规则,可能出现“后存的比先存的首簇号要小”“簇链中簇不是连续的”,这给FAT32的数据恢复增加了难度。
2、簇的大小和FAT表的大小之间的平衡关系。之所以引入簇作为文件存储的单位,是因为扇区512B的大小太小,如果以扇区为单位,就要花大量空间来记录扇区号;但是簇也不是越大越好,簇过大会导致“大材小用”的局面,也就是空间浪费。

你可能感兴趣的:(文件系统之FAT32、NTFS)