以下內容轉載自:http://forum.ubuntu.org.cn/viewtopic.php?t=27451
產生磁碟重組想法的主要在兩類朋友中,一類是受windows思想影響的朋友,還有一類是對作業系統原理有一定程度瞭解的朋友。
我在這裡先簡單地說明一些問題。
所有地作業系統都會產生磁碟片段,這正是部分朋友產生疑慮的原因。這個片段在上面地官方資料中稱為內部片段。它是這樣產生的,假設一個磁碟的空間有20k,它的基本存放裝置單位為簇,設有兩個檔案,一個7k,一個1k。當簇的大小為4k時,磁碟分為了5個簇,兩個檔案共佔用3個簇,即使用了12k,其中浪費地空間就是4k,也就是產生了內部片段4k。因此我們就瞭解了:內部片段主要是造成磁碟空間的浪費。請注意:windows的磁碟磁碟重組功能所整理的片段不是這個片段,也無法對這個片段進行操作,它所對應的片段概念是外部片段。
那麼,可以對內部片段進行最佳化處理嗎。答案是肯定的。以上面的例子來說,如果把每一簇分成2k,那麼20k的磁碟就分為了10個簇,7k和1k兩個檔案共佔用了5個簇,10k的空間,浪費的空間,即內部片段為2k。
由此可見,簇分的越小,所浪費的空間越少。這也是NTFS比FAT32優秀的一個地方。在Win 2000的FAT32檔案系統的情況下,分區大小在2GB~8GB時簇的大小為4KB;分區大小在8GB~16GB時簇的大小為8KB;分區大小在 16GB~32GB時,簇的大小則達到了16KB。而Win 2000的NTFS檔案系統,當分區的大小在2GB以下時,簇的大小都比相應的FAT32簇小;當分區的大小在2GB以上時(2GB~2TB),簇的大小都為4KB。相比之下,NTFS可以比FAT32更有效地管理磁碟空間,最大限度地避免了磁碟空間的浪費。
有的朋友會進一步的思考,那麼為什麼檔案系統不是把簇分的非常的小呢。這裡就引出了另一個問題,檔案訪問尋找的問題。還是以上面的例子說明,當我們要尋找使用一個檔案時,就需要通過頁表來進行訪問。打個比方,你住的地方就好比是檔案所佔用的簇,但是要找到你,就得通過你的住址來進行訪問,而訪問檔案則是通過檔案配置表。如果住的人多,地址也就很多,那麼要查到你住的地址所花的時間也就很多。同樣的道理,當簇分的越小,記錄簇的地址也就越大,尋找檔案所在的簇所花的時間也就越多。當簇為4k時,簇的地址是5個,而簇為2k時,簇的地址是10個。因而簇的大小是在空間和時間上取得平衡的一個結果。
這裡也對另一個問題作一些提示,有些第三方分區軟體可以自訂簇的大小,建議採用預設值,否則會在某些情況下產生一些問題。
有的朋友會進一步提問:那麼為什麼在普通情況下NTFS分的簇會比FAT32的要小,而訪問速度會差不多呢。這又牽涉到檔案訪問機制等等問題。這裡我就不再介紹了,其實這個問題我也不能完全說清,有興趣的朋友可以找一些作業系統方面的資料進行閱讀,可以在一定程度上解決這個問題。
好,下面開始我們的重點:linux不需要磁碟重組。
windows概念下的片段,在上面linux官方資料中稱為外部片段,它就是影響效能的那個片段概念。(This is called"external fragmentation" or simply "fragmentation" and is acommon problem with MS-DOS file systems. )而linux一般不會產生這種片段。外部磁碟片段應該稱為檔案片段,是因為檔案被分散儲存到整個磁碟的不同地方,而不是連續地儲存在磁碟連續的簇中形成的。
當應用程式所需的實體記憶體不足時,一般作業系統會在硬碟中產生臨時分頁檔,用該檔案所佔用的硬碟空間虛擬成記憶體。虛擬記憶體管理程式會對硬碟頻繁讀寫,產生大量的片段,這是產生硬碟片段的主要原因。
其他如IE瀏覽器瀏覽資訊時產生的臨時檔案或臨時檔案目錄的設定也會造成系統中形成大量的片段。檔案片段一般不會在系統中引起問題,但檔案片段過多會使系統在讀檔案的時候來回尋找,引起系統效能下降,嚴重的還要縮短硬碟壽命。另外,過多的磁碟片段還有可能導致隱藏檔的丟失。
上面所說的就是windows如何產生外部片段的,其實這與檔案系統所使用的資料結構有關。對於FAT來說,使用的是chain式的結構來記錄一個檔案所使用的簇。這種方式的好處就是有助於檔案的動態增長的需要。但是卻帶了片段的問題,使得讀寫檔案的時候,磁頭頻繁移動。對於CD-ROM,由於是 read-only的,所以不存在資料增長的問題,所以,採用了連續的方法來記錄資料,也不會產生片段,而linux的ext等檔案格式與CD-ROM的儲存有相似之處。
下面這篇文章通俗易懂地解說了為什麼linux不需要磁碟重組以及windows為什麼需要磁碟重組:
來自http://geekblog.oneandoneis2.org/index.php/2006/08/17/why_doesn_t_linux_need_defragmenting
請注意,官方資料所說的是linux檔案系統在磁碟還有5%空閑空間的情況下是不需要磁碟重組的。(Linux native file systemsdo not need defragmentation under normal use and this includes any conditionwith at least 5% of free space on a disk.)。而在實際使用中,磁碟在還有8%左右未使用時就會有警告產生,所以磁碟重組是不用考慮的。
對windows進行磁碟磁碟重組的朋友,這裡也做一點小小的友情提示。
1、整理磁碟片段的時候,要關閉其他所有的應用程式,包括螢幕保護裝置程式,最好將虛擬記憶體的大小設定為固定值。不要對磁碟進行讀寫操作。
2、整理磁碟片段的頻率要控制合適,過於頻繁的整理也會縮短磁碟的壽命。一般經常讀寫的磁碟分割一周整理一次。
最後想說說思考的話題。
那些想在linux下進行磁碟磁碟重組的朋友,你們考慮過兩個事實嗎。
第一,為什麼類unix系統產生幾十年了,沒有人做一個磁碟磁碟重組軟體。而即使是到現在,在這個論壇上也沒有朋友提到過遇到linux病毒,我們仍然能找到許多類unix殺毒軟體。我就至少能列出3種免費殺毒軟體。
第二,很多類unix作業系統都是長年累月不關機的,諸如銀行、電信、軍工等系統,你能想象它們停止磁碟讀寫,在長達幾小時內進行磁碟磁碟重組所帶來的後果嗎。這些機器的磁碟讀寫量可是比家用機大多了。