|
楼主 |
发表于 2007-4-14 19:08:02
|
显示全部楼层
这是一个长久存在的误解,我在 http://defragfs.sourceforge.net/theory.html 里面已经说过了。
1, 首先,您给出的这篇文章其结论是否正确?自己动手验证是最好的:
#dd if=/dev/zero of=./fat32 bs=1048576 count=256
#losetup /dev/loop0 fat32
#mkdosfs -F 32 /dev/loop0
#mount /dev/loop0 /mnt/tmp
#vim /mnt/tmp/111 (随便写一点东西)
#vim /mnt/tmp/222 (随便写一点东西)
#umount /mnt/tmp
#khexedit fat32
khexedit里可以很方便验证,文件的元数据(即File Allocation Table)的确是连续排布的,但是文件的数据是以8KB一块为单位存放的,并不象您给出的这篇文章中所说的紧密存放。事实上,目前能够实现文件数据紧密存放的主流的文件系统只有Reiser3/4。还有一点值得考虑,Windows中主流的文件系统应该是NTFS,其磁盘结构和操作方式于FAT有非常大的不同,FAT只是为了兼容性而存在。
2, 其次,如果您认为紧密排布存储数据将对磁盘碎片造成巨大的影响,不妨看看Reiser4的成绩,其在磁盘占用率达到90%时仍然能够在20次碎片化操作中维持80%左右的速度。
3, 再次,Linux系统中主流的文件系统至少包括ext3/JFS/XFS/Reiser3/Reiser4等等,它们的磁盘组织结构,块分配方式都不相同,因此性能表现和碎片化程度也各不相同。更何况ext3直到今天也不能支持Extent方式分配空间,几乎其它所有主流文件系统都支持这项可以改善磁盘碎片的特性(ext4可能加入支持)。
4, 第四,磁盘空间占用率的降低真的可以减少碎片吗?对于ext2/3来说,40%空间占用率时比90%空间占用率时碎片化对性能的影响大约有10%的改善,其它文件系统则几乎没有改变。
5, 第五,如果您的文件系统是ext3的话,其块大小很可能是4KB,一个文件超过4KB就需要占用多个磁盘块,例如如下的情况:
。。。。。。。。。。(10个空磁盘块,每块4KB)
1 1 2 2 3 3 3 4 5 。(存放了5个文件,剩下1块)
1 1 。。3 3 3 。5 。(删除2和4)
1 1 6 6 3 3 3 6 5 6 (新文件6占用4块,文件6存在3个碎片)
很明显,碎片产生了。 |
|