磁盘碎片

  磁盘碎片,更确切地应该称为文件系统碎片。按照引文(1)的linux官方资料,可分为外部碎片(external fragmentation)和内部碎片(internal fragmentation)。

  内部碎片是怎么产生的呢?
  我们知道,文件系统以簇(cluster)作为基本存储单位来组织数据的。假设簇大小为4KB,一个大小不足1KB的文件也至少要分配一个簇,即4KB的空间,这就浪费了大约3KB的磁盘空间,产生了3KB的内部碎片。这就是windows文件属性中的占用空间,包含内部碎片的空间。如果将簇大小设为1Byte,那不就不会产生碎片了吗?理论上这是正确的,然而一则簇通常是扇区大小(一般为512Byte)的倍数,磁盘一般按照物理扇区进行数据读写,所以这是不现实的。二则由于物理磁盘访问次数剧增,这会严重影响文件系统I/O性能。因此,文件系统设计都要在内部碎片和性能之间进行权衡,以取得时间和空间上的整体最佳。内部碎片主要是造成磁盘空间的浪费,并且无法进行碎片整理,windows的磁盘碎片整理功能所整理的碎片不是这个碎片,而是外部碎片。

  外部碎片又是怎么产生的呢?
  外部碎片就是我们通常所说的windows碎片整理下的概念,它主要影响性能。外部碎片应该称为文件碎片,是由于文件被分散保存到整个磁盘的不同地方,而不是连续地保存在磁盘连续的簇中形成的。文件碎片一般不会在系统中引起问题,但文件碎片 过多会引起系统性能下降,严重的还要缩短硬盘寿命,还有可能导致存储文件的丢失。FAT文件系统非常容易产生文件碎片,这与文件系统所使用的数据结构有关。对于FAT来说,使用的是链式的结构来记录一个文件所使用的簇。这种方式有助于文件的动态增长,但却产生了碎片的问题。所有的文件都连续存放,因此只要任何一个文件大小变化,就可能产生碎片。于是很快磁盘就会变成很混乱,访问效率就会变低了。而对于ntfs,linux的ext2/3文件系统来说,它们采取在整个磁盘上存储文件,尽量保持单个文件连续存放。因此不易产生文件碎片,也就不需要碎片整理,只在文件系统利用率接近饱和时才需要,但一般情况下是不会发生的。

    小结一下:
    1、windows系统下需要进行文件碎片整理,并且是对于FAT文件系统来说的,NTFS一般不需要。
    2、linux文件系统不需要进行文件碎片整理,估计也没人实现这样的工具。当然对FAT文件系统整理是一个例外。
    3、文件碎片整理是对外部碎片来说的,内部碎片无法进行整理。

( Aiguille.LIU / 刘爱贵, [email protected])

参考文献:
[1] http://www.linux.org/docs/ldp/howto/Partition/appendix.html#fragmentation
    linux官方网站对碎片的解说

[2] http://geekblog.oneandoneis2.org/index.php/2006/08/17/why_doesn_t_linux_need_defragmenting 
    这篇文章通俗易懂地解说了为什么linux不需要碎片整理以及windows为什么需要碎片整理

你可能感兴趣的:(数据结构,windows,linux,存储,byte,磁盘)