您的位置:首页 > 其它

文件系统之FAT32、NTFS

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

二、分区结构
1、FAT32



DBR(DosBootRecord,引导记录)
FAT(FileAllocationTable,文件分配表)

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





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



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




2、NTFS




MFT(MasterFileTable,主控文件表)

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





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

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




三、直接删除文件的变动
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的大小太小,如果以扇区为单位,就要花大量空间来记录扇区号;但是簇也不是越大越好,簇过大会导致“大材小用”的局面,也就是空间浪费。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: