2023年12月14日发(作者:)
FAT32和NTFS文件系统碎片化研究
我们在谈论FAT32文件系统的缺点时,常会提到碎片化这个词,它是指一个文件在硬盘中存储的位置并不连续,而分散地
存于硬盘中,当我们需要读取这个数据时,硬盘要在不同区域中将其提取合并后,再交由系统处理。对于机械硬盘来说,每读
取一个碎片就意味着磁头需要摆臂到不同的位置上,因此,碎片化越严重的文件系统,执行效率也就越低。FAT32的碎片化
不仅体现在其数据本身在存储时可能被分解为多个碎片分散存储于硬盘不同的区域中,就连其目录结构也是这样离散的,因此
对FAT32分区做过数据恢复的人,都会感觉到使用R-Studio这类工具展开FAT32分区时(尤其是文件数量很多的FAT32分
区)会异常缓慢。
我们知道,数据在文件系统中存储时,大致都分为目录区域和数据区域,事实上,任何一个文件系统,对于数据本身的碎
片化都无法有效避免,因为这样需要在每次对数据进行编辑后都要将其整体搬运到硬盘的某个新地址中保存,这样一来会增加
硬盘的读写负担从而降低系统的运行效率。而对于目录区来说,却有手段可以 避免其过度碎片化。
FAT32之所以碎片化严重,是由于它并没有将数据区和目录区刻意分开,而是混在一起,它在格式化时,将数据区中第
一个簇留给了根目录,而数据则从第二个簇开始写入,如果一个簇的空间不够记录所有的根目录文件,那么FAT32会在数据
区另辟空间来继续存储根目录,同样,子目录也是这样,所有FAT32的子目录都是在数据区中单独开辟区域写入的,然后根
目录与子目录通过地址双向绑定的方式互为记录。同时,FAT32对于目录区的使用规则执行“第一可用原则”,即只要前边的目
录被删除了,新文件就可以马上占用这个位置,因此,即使连续存入的文件目录,也可能保存在硬盘的不同位置上。这就是
FAT32碎片化严重的原因所在,当我们需要建立FAT32的目录结构时,系统需要在硬盘不同的区域上反复读取,对于机械硬
盘来说,执行效率无疑会大打折扣,因此数据恢复软件目录解析速度很慢。
NTFS则有效的解决了这种目录碎片化的弊病,NTFS在格式化时,从分区的786432号簇(或2号簇)开始,向后保留了
分区容量的12.5%作为目录区($MFT)的专属空间,文件目录在这个区域连续向后存储。只有当硬盘存储空间不足时,才会
临时征用$MFT的存储空间,当存储空间释放后,立即归还占用的空间。同时,NTFS对于目录区的使用遵循"下一可用原
则",即除非目录区空间不足,否则新目录会持续向后写入而不马上占用已删除的文件目录。正是这两点特征,使得NTFS的
目录解析效率大大提升。
但是NTFS对于巨大数量文件(数百万甚至上千万)的管理效率依然不尽如人意。这是因为如果$MFT的空间不足时,系
统会在硬盘其他区域为$MFT分配新的空间,而一旦新的空间变多了,NTFS也会走上FAT32这种目录碎片化的道路。因此大
型网站这种文件数量很大的存储环境中,很少有人采用 Windows和NTFS,而更倾向于EXT或者UFS这类效率更高的文件系
统。


发布评论