假設一種情況,一個大盒子裏要放數種口味不同的瓜子,不同口味的瓜子不能混放,還要能夠非常方便的計算出每種瓜子的重量,我們會怎麼做?
有這樣一種方法,在盒子裏做出很多大小相同,又相互隔離的格子,每個格子內能夠存放的瓜子的重量是一定的,假設是50克,我們依次把每一種瓜子放到這些格子裏,比如,五香味的占了五個完整的格子,第六個格子沒有占滿,我們要想知道瓜子的重量,隻需要把第六個沒占滿的格子裏的瓜子稱一下就可以了,如果對重量精度要求不高的話,我們甚至可以直接將最後未滿的格子中的瓜子也計算為50克,這樣的話,瓜子重量的計算就會更加方便快捷。
按照這種方法,其他口味的瓜子從第七個格子開始存放,通過數格子的方法測重,依此類推。
這時候,隻考慮有瓜子的格子,我們就有一個問題,在我們把所有的瓜子都放到盒子裏後,必然會有很多的格子並沒有被占滿,也就是空間的利用率不是百分百,那些未被利用而浪費掉的空間,我們可以將之稱為空間碎片。
計算機操作係統中,對磁盤文件進行管理的功能模塊叫做文件係統,不同的文件係統對磁盤文件的管理方式雖然是不一樣的,但是有一點是相同的,那就是所有的文件係統,在磁盤中存放文件的時候,都會把磁盤存儲空間劃分成大小相同的格子,這種格子在計算機專業中有一個術語,叫做磁盤扇區,給磁盤畫格子的過程,就是我們平時所常說的格式化。
和瓜子重量計算相似,文件係統對文件大小的計算,一般都是按照扇區為單位的,不滿一個扇區的,也會按照一個扇區進行計算。
和前麵講述的盒子裏放瓜子道理一樣,因為文件大小是隨機的,不可能正好是磁盤扇區大小的整數倍,所以任何文件係統對磁盤空間的利用率都不可能是百分之一百,那些無法利用的磁盤空間,就是我們常說的磁盤碎片。
雖然每一個磁盤碎片浪費掉的磁盤空間都非常小,但是我們知道,磁盤中的文件數量是極其龐大的,因此,磁盤碎片的數量也是極其龐大的,如此一來,數量龐大的磁盤碎片,對磁盤空間的浪費就非常可觀了,這些磁盤碎片不僅會造成磁盤空間浪費,還對磁盤讀寫效率有很大影響,這其中的原因比較複雜,這裏不再講述。
因此,任何文件係統,都會有一種機製對磁盤碎片進行處理,較為先進的文件係統,比如WindowsNT上使用的NTFS,對磁盤碎片的管理能力較強,能夠極大的減少磁盤碎片對空間的浪費,比NTFS更為先進的文件係統,甚至能夠隨著磁盤使用時間的推移,碎片越來越少。
然而,在微軟的操作係統Windows98上使用的fat32,卻是一種憋足的文件係統,這種係統對磁盤碎片的管理能力極弱,以至於隨著磁盤使用時間推移,碎片越用越多,然後不得不利用一些外在的磁盤碎片整理工具,對磁盤文件進行重新規劃安排,以達到減少磁盤碎片的目的。
我們通常認為磁盤碎片是無法被利用的,但是一些計算機高手,卻能夠通過某種高明的手段,對這些碎片加以利用,以達到其特殊的目的。
病毒感染磁盤文件,一般會導致磁盤文件體積增大,但是我們想像一下,如果病毒文件在感染磁盤文件時,不占用新的磁盤扇區,而是把自己存放在那些未存滿被感染文件數據的磁盤扇區中,而文件係統又是按照扇區為單位對磁盤文件大小進行計算的,會產生什麼結果?
這個很容易理解,這個時候,雖然病毒文件將自己寫入了文件中,但是磁盤文件的大小卻沒有改變,這種現象就像我們往一桶沙子裏到了一盆水一樣,水倒進去了,桶內沙子的體積卻沒有增加。