磁盘碎片产生原理

磁盘碎片产生原理


一键清理(http://www.ludashi.com/help/cleanz.htm)

首先,介绍下磁盘碎片的概念。

很多人会把文件碎片跟簇的概念混淆起来。其实对windows系统来说硬盘上的每个分区都是由最小存储单元——簇组成的。就好比,一面墙是由一块块转头组成的。簇的大小可以在分区格式化时由用户定义,一般是数个KB大小,比如是8KB。假设我有一个文件,大小是80MB零1KB(1MB=1000KB),换算一下就是80,001KB,其中的80,000KB正好占用10000个簇,剩下的那1KB,不得以也要占用1个簇,但这最后一个簇还有7KB的空间没用上了。而且这个未完全使用的簇,其他文件也不允许继续使用。这就造成了一点点的空间浪费。

不少人就把这被浪费了的7KB空间理解成文件碎片,这其实是不对的。等看完下面对碎片的介绍,相信你就会明白了。

当然或许你会想,要是将簇设为1KB,甚至1B那岂不是很好?但你要知道硬盘是按照簇来读写的,对于同样的文件,簇设得越小,文件占用的簇的数目就越多。这样读这个文件要访问的簇就多了,数据读写就会变慢(为什么?)。所以硬盘的空间利用率和文件读写的时间效率是一对矛盾。

磁盘碎片实际上指的是一个文件占据那些簇是不连续的,就相当于文件被分割开来,分别存放在相互间断的几段簇上。文件被分割为几个部分就是几个碎片。所以碎片其实是指文件碎片,可以理解成,文件破碎成片之意。而且文件碎片之间有时候顺序还是错乱的。比如说,有时候“文件里靠后的碎片”所占的簇段在硬盘上反而会排在“文件里位置靠前的碎片”簇段的前面。这样一来,一个文件就会以比较混乱的顺序存放在硬盘上。

显然计算机读取连续的有序的数据肯定要比不连续的乱序的数据来得快。所以整理碎片可能会大幅度提高系统性能。

举个例子,起初硬盘某个分区是空白的,写入三个文件A、B和C。显然这个时候,三个文件都是顺次占用三个簇段(这个说明存放文件所用的文件系统应该是类似FAT这样的文件系统,具体参看注释1)。故而三个文件不会产生碎片。

现在假设你删除了B文件,这个时候A和C中间就有一块空闲簇段了。此时还是不存在文件碎片的,因为每个文件各自占据的簇段都是连续的,没有文件被分割。而如果现在需要写入一个文件D,而且D比刚刚删去的文件B要大。那么A和C之间的空闲簇段就不足以放入D,再假设C后面的空闲簇段也不足以放下D,这个时候D就势必要分割成两块存放,一块放在A和C之间,另一块放在C之后。这样一来,文件碎片就产生了。D文件有两个文件碎片。

磁盘碎片整理要做的工作就是:把C文件前移,一直移到紧接A文件的簇段上去。这样A和C之间就没有空闲簇了,C之后剩下的将是一段完整的空闲簇段,足以放下文件D。这样D就也占据一段连续的簇段。碎片也就消除了。

所以换个思路,不用专业的磁盘碎片整理软件也可以实现磁盘碎片的整理工作。

将一个分区的文件全部剪切出去,再复制回来,那么由于复制回来的时候,文件是一个接一个写入的,这样每个文件就会顺次占用簇段,从而也就不会产生碎片了。不过剪切出去再复制回来的这种方法,需要其他分区里足够的空间来存放待整理的分区里所有的文件。其缺点是没有碎片的文件也被剪切复制了,这样整体效率上就不如专业软件了。

但相对于某些软件却有某种优势,比如windows自带的哪个整理工具,在分区的占用率较高时,常常会因为没有足够空闲空间来作文件的中转站,导致不能彻底地消除碎片。而上面提到方法对付这种情况就很理想。

而且如果在复制中优先复制那些有价值的,几乎永远不会删除的文件,将它们存放在分区靠前的部位,这也有利于降低磁盘碎片的产生。

同理也可以将待整理的分区做个ghost备份,再恢复回来,这样也能有效消除磁盘碎片,而且速度也相当快。

注释1

从前微软使用的FAT文件系统——最后一次作为默认系统被看到是在Windows 98和ME,尽管这个系统还在USB驱动器中使用——并不能够很好地排列文件。当你在FAT文件系统中保存文件时,它会尽可能地将文件排列在磁盘的首部。当你存放下一个文件时,它会将这个文件直接存放在第一个文件的后面,以此类推。所以当文件变大,永远都会有碎片产生,因为文件的旁边已经没有空间来存放增加的部分。

http://digi.163.com/14/0121/07/9J3LHEO20016677T.html

磁盘碎片产生原理_第1张图片

http://zxgchinese.blog.51cto.com/2508492/1131456


参考:

文件碎片  谷歌

http://www.ludashi.com/html/20100612/737.html

文件系统碎片 谷歌

http://www.zhihu.com/question/19853952

你可能感兴趣的:(磁盘碎片产生原理)