整理自原文:http://www.databack.com.cn/News/2005.html

FAT32之所以碎片化严重,是由于他并没有将数据区和目录区分开,而是混在一起,它在格式化时,将数据区中第一个簇留给了根目录,而数据则从第二个簇开始写入。

如果一个簇的空间不够记录所有的根目录文件,那么FAT32会在数据区另辟空间来继续存储根目录.
同样,子目录也是这样,所有FAT32的子目录都是在数据区中单独开辟区域写入的,然后根目录与子目录通过地址双向绑定的方式互为记录。
同时,FAT32对于目录区的使用规则执行"(First)第一可用原则”,即只要前边的目录被删除了,新文件就可以马上占用这个位置。
因此,即使连续存入的文件目录,也可能保存在硬盘的不同位置上。这就是FAT32碎片化严重的原因所在,当我们需要建立FAT32的目录结构时,系统需要在硬盘不同的区域上反复读取,对于机械硬盘来说,执行效率无疑会大打折扣,因此数据恢复软件在进行目录解析时,速度很慢。

NTFS则有效的解决了这种目录碎片化的弊病。
NTFS文件系统中的文件属性可以分成两种:目录区和数据区。1)目录区直接保存在$MFT中,像文件名和相关时间信息(例如创建时间、修改时间等)永远属于常驻属性,2)数据区则保存在$MFT之外,但会使用一种复杂的索引方式来进行指示。
NTFS在格式化时,从分区的786432号簇(或2号簇)开始,向后保留了分区容量的12.5%作为目录区$MFT的专属空间,文件目录在这个区域连续向后存储。

只有硬盘存储空间不足时,才会临时征用$MFT的存储空间。
当存储空间释放后,即归还占用的空间。
同时,NTFS对于目录区的使用规则为"(Next)下一可用原则",即除非目录区空间不足,否则新目录会持续向后写入而不马上占用已删除的文件目录。正是这两点特征,使得NTFS的工作效率大大提升。

但是NTFS对于巨大数量文件(数百万甚至上千万)的管理效率依然不尽如人意。这是因为如果$MFT的空间不足时,系统会在硬盘其他区域为$MFT分配新的空间,而一旦新的空间变多了,NTFS也会走上FAT32这种目录碎片化的道路。因此大型网站这种文件数量很大的存储环境中,很少有人采用Windows和NTFS,而更倾向于EXT、UFS这类效率更高的文件系统。

其他见:搞懂「文件系统」

 posted on 2022-06-03 11:35  DomE843  阅读(338)  评论(0)    收藏  举报