桌面檔案磁碟重組的真相

Wes Miller

我必須強調一點,只要使用硬碟,必然會有磁碟分散。如果您真的關心系統的健康,就該定期執行磁碟重組。這句話是不是很像牙醫師每年都督促您要使用牙線呢?他的叮嚀應該不陌生吧。沒錯,磁碟重組就是這麼重要。

除非電腦一直被晾在一邊不開機,否則硬碟分散的情形一定會越來越嚴重。待會兒我就說明這種情形如何發生,不過現在先讓我們稍微回顧一下磁碟重組的歷史。

磁碟重組和 Windows NT

Windows NT® 並沒有內建的磁碟重組公用程式,而當時也普遍認為沒這個必要,反正 NTFS 的架構已經夠完善,不像 FAT 磁碟區老是為劇烈的磁碟分散所苦。但即使完善如 NTFS,日積月累下,有朝一日也會被不完善的檔案配置所連累。於是磁碟重組工具市場因此應運而生,並且繁榮壯大。 其中 Executive Software (現在是 Diskeeper Corporation) Diskeeper 產品,可說是 IT 專家最愛用的一種。最初 Windows 2000 整合磁碟重組功能時,Microsoft 是向 Executive Software 取得技術授權。Windows® 2000 磁碟重組功能過去是附隨在自家產品 Microsoft® Management Console (MMC) 嵌入式管理單元 (dfrg.msc) 中,可以按一下任一磁碟區或手動從命令列執行 defrag.exe 來啟動這項功能。這項功能只能以簡單的命令列加以執行,無法事先排定執行時間,於是許多 IT 專家便自行撰寫功能指令碼,讓這個內建產品自動執行磁碟重組。到了 Windows XP 和 Windows Server® 2003,Defrag.exe 就更進步了,不過它的自動功能仍然有限 — 想要它自動執行重組,還是得靠自己撰寫指令碼才行。

雖然有些廠商 (包括我的前一任雇主 Winternals Software 在內) 也製造專供企業磁碟重組空間使用的軟體,但是這些產品多半大同小異,都有一個中央主控台、有一個安裝在用戶端系統的代理程式 (有時候全天候工作,有時候您要它工作它才工作),還有一個語音輸入結構,可以聽從使用者指定執行磁碟重組工作的時間和方式。

而 Windows Vista® 則仍保有一脈相傳的單系統重組,另外再把重組工具最佳化,加入重組小檔案片段 (64MB 或更小) 等選項。這種做法雖然可以加速重組作業的進行,但缺點是大型檔案片段都被留置磁碟上沒有處理。Windows Vista 和 Windows Server 2008 的磁碟重組引擎本身比舊版 Windows 更加強大,而且可以自動執行重組,不必手動排定時間。不過如果您所經營的是大型公司,或者您想要以重組工具所未提供的方式將系統最佳化,還是需要取得其他廠商軟體的授權才行。舊版軟體無法對啟用並廣泛使用 NTFS 壓縮功能的磁碟區進行重組。這時候其他廠商工具就可以彌補這個不足。

磁碟分散是怎麼發生的?

磁碟分散主要是因為檔案日積月累產生變化所導致。在理想狀態下,Windows 檔案本身不會改變,或者至少變化頻率不高,只有在安裝 Service Pack 和軟體更新項目時才會發生。如果沒有執行這兩項作業,系統檔案基本上不會產生什麼變化。然而,執行大規模的更新作業 (如安裝 Service Pack) 後磁碟分散就自然產生,因為被更新的檔案通常無法在其所在的位置被覆寫,再加上可能需要重新開機才能讓更新生效,使得分散情形更加嚴重。

另一方面,使用者的檔案和資料 (以及 Windows 登錄) 也會隨著持續不斷的改變而變化。不斷的讀取、寫入、編輯、複製和刪除檔案,都會導致磁碟大量分散,尤其當磁碟機容量已滿時更是明顯。

讓我具體說明這種情況:假設現在有一個排列完善的磁碟,磁碟的檔案與檔案之間緊密相鄰,毫無空隙。您開啟並編輯其中一個檔案,然後存檔。如果檔案變大,Windows 就必須把整個檔案儲存在磁碟的另一處 (假設儲存在第 N 個檔案後面),或者把最新資料儲存在第 N 個檔案後面,但是這麼一來,第 2 個檔案就分散兩處了。如果現在再編輯第 1 個檔案,就會出現兩個分散的檔案。同樣的動作不斷重複執行,時間一久,系統自然變得七零八落。每當存取一個檔案,磁碟機就必須跑遍各處尋找這個檔案。如果資料檔案很大,或者硬碟檔案因為虛擬運算技術而膨脹,或者磁碟佈滿大量的影音視訊檔案,磁碟分散就成為家常便飯了。當然嘍,持續擴充硬碟的確可以減輕問題,但並不能解決問題。如果您用的是硬碟較小、無法擴充的舊型膝上型電腦,電腦反應就會越來越遲鈍,開機越來越慢,開啟和儲存檔案的時間也會越來越長。

其實您最該擔心的不是系統的分散情形,而是檔案的分散情形。自從磁碟重組工具問世以來,使用者的感想難道就只能是「喜歡看見重組後整齊的色塊」嗎?不是吧。有的產品是以兩個區塊代表磁碟,一個彩色 (代表檔案資料),一個白色 (代表可用空間)。不過,要盡量降低重組的頻率和成本,最不該選的就是這個產品了。如果把所有的檔案資料全部壓縮到磁碟前端,再次編輯時要是佔用大多數的可用空間,編輯內容只好全部寫到檔案資料結尾,結果這種重組方式從再次編輯的那一刻反而助長了分散。好的磁碟重組並不是兩個排列整齊的檔案資料區塊而已,而是看起來並不怎麼完美的圖案。您可以參閱 [圖 1] 所示的範例,看看重組前的測試系統。然後再參閱 [圖 2],看看 Windows 完成重組之後的同一個系統。

[圖 1] 重組前的磁碟機

[圖 1]** 重組前的磁碟機 **(按影像可放大)

[圖 2] 重組後的磁碟機

[圖 2]** 重組後的磁碟機 **(按影像可放大)

請注意,Windows 不是把重點擺在磁碟檔案的分散,而是擺在個別檔案本身的分散 (如果您想看看在重組系統之前,針對分散最嚴重的檔案所做的重組報告那個區段,請參閱 [圖 3])。

[圖 3] 磁碟重組報告

[圖 3]** 磁碟重組報告 **

您會發現,即使在重組之後,Windows 也不會把檔案資料完全壓縮到磁碟前端。另外要注意的是 [圖 1][圖 2] 所示的大塊綠色資料。那是 Windows 分頁檔,接下來我會討論這個部分。如果您在 Windows 系統有啟用休眠,那麼在進行重組時,會出現類似的動作。

記得定期重組

就像人類每天都要用牙線一樣,機器也要定期進行磁碟重組。使用度高的系統 (例如伺服器) 更需要經常重組,因為只要稍一怠慢,重組程序就會拖得很長,導致伺服器無法使用或者沒有反應 (因為重組作業可能會花費大量時間,有的重組階段也會耗用 CPU 資源)。

即使最好的線上重組工具,也沒辦法重組所有的項目。例如,開啟的檔案或已鎖定的檔案 (例如,分頁檔或登錄檔) 就不一定能夠重組得到,如果有休眠檔,就必須避開休眠檔 (因為它跟系統正在使用的 RAM 一樣大)。如果要將鎖定的檔案最佳化,請參閱接下來討論重組陷阱的這一節。

瞭解磁碟重組的迷思和真相是非常重要的一環。[圖 4][圖 5] 將會示範幾個在討論磁碟重組時經常提到的主題,並且解說這些問題真正發生的時機。

Figure 5 磁碟重組的迷思

迷思 可能性
系統當機。 不可能 — 當機通常是因為驅動程式或硬碟問題所導致 (記憶體損毀、因熱力問題導致重新開機,或是因為濫用磁碟熱能而使磁碟失效)。
應用程式當掉。 不可能 — 以整個系統來說,一個設計精密的應用程式,不會因為磁碟重組而當掉。除非確實可疑,否則不應假設磁碟重組就是元兇。
登錄損毀。 不可能 (請參閱上文) — 分散不會導致登錄損毀。
在進行磁碟重組時,畫面會出現代表磁碟的實心直條。 不可能 — 平常最好不要把系統上所有的檔案全部壓縮在一起,除非您特別打算使用磁區型映像工具來反映系統映像,而不排除可用空間,或者縮小或分割磁碟分割。建議您最好將檔案置於磁碟前端,否則,過度合併檔案只會讓檔案更加分散。
   

Figure 4 磁碟重組的一般疑慮

疑慮 可能性
折損系統效能。 高 — 尤其視系統的使用情形而定。
很難或者無法修復不慎刪除的檔案。 高 — 大部分的修復工具都要視啟發學習法 (Heuristic,以判斷資料類型) 和檔案叢集接近度而定。檔案散亂,會使修復作業更加複雜,或者無法執行,
而加重系統重組的成本。 中 — 系統的使用量,與系統日積月累的檔案變化量,兩者之間有直接的關聯。比方說,使用者雖然經常編輯檔案,卻只把檔案儲存在伺服器共用區,那麼即使經過一段時間也不會有太多折損。
使磁碟受損。 低 — 不太可能。跟前面一樣,系統愈被濫用 (一直讓磁碟保持在開啟狀態,不斷的編輯、修改或刪除檔案),磁碟就愈容易受損。不過以現今的硬碟來說,光是編輯檔案還不至於會損毀磁碟。
   

把磁碟重組當作基礎結構的一部分

可以的話,我勸您在所有系統上都定期執行磁碟重組。您可以選擇使用 Windows 內建的重組工具,也可以另外採用其他廠商推出的重組工具。基本上,它是根據您想要進行多少工程作業而定。如果您是用 Windows XP 和更新的版本,可以把 defrag.exe 加入作為排定的工作 (相關步驟請參閱 support.microsoft.com/kb/555098 這篇知識庫文章)。請注意,膝上型電腦的重組作業還附帶一些特殊的考量事項。您想在使用者系統開機狀態時進行重組 (理想狀態是透過 AC 電源),但是當行動使用者想要完成工作時,又不想耗用 CPU 或磁碟週期。怪就怪在當行動使用者不在系統上工作時,它會切斷與 AC 電源的連線,然後在一旁待命或休眠 (從電源管理和「排定的工作」的角度來看,它是在關機狀態)。當我還服務於 Winternals 時 (其實其他公司也一樣),大家曾經花過許多時間來設計理想的行動使用者實務。如果您是使用 Windows Vista,不妨使用內建的磁碟重組工具和「排定的工作」,因為它的電源感知能力比舊版更好,絕對是不錯的解決方案。如果不是使用 Windows Vista,就必須尋求其他廠商開發的行動系統專用產品了。有的產品還會正式展開磁碟重組工作,並且告訴您它執行什麼、何時執行 (還有多常執行),以及執行多久。

除了行動產品的重組之外,我們還要討論檔案系統的重組。其實不只桌上型系統或行動系統需要關心這個問題,伺服器、Microsoft Exchange、SQL ServerTM 或其他資料存放區也需要執行磁碟重組。如果您使用的是後者,就必須決定要在執行檔案系統重組之前還是之後進行重組。

如果您要使用其他廠商的磁碟重組工具,必須選擇使用 Windows 磁碟重組 API 的重組工具。為了預防不慎遺失資料,Windows 自 Windows NT 4.0 開始就擁有自己的磁碟重組 API。比方說,如果您在移動檔案時,系統突然斷電,這時候最怕的就是分散移動不完整,因為這樣可能會導致資料遺失,其至再也無法開機。

最後一點,如果您有使用任何虛擬運算技術,也得學習管理虛擬磁碟的重組。虛擬磁碟的重組頻率並不下於實體磁碟,而且由於大小限制的關係,它們的情況會更嚴重。另外,如果您的虛擬解決方案容許您縮小磁碟或磁碟分割,可能得先執行重組來清出空間 (至少能夠減少縮小作業所花的時間)。

其他工具

說到現在,您應該不會懷疑磁碟重組的重要性了吧。即使您不使用其他廠商的工具來進行磁碟重組本身,也可以考慮使用由 Mark Russinovich 開發的一種名叫 PageDefrag 的工具,這個工具可以從 Microsoft Sysinternals 工具網站取得 (請參閱 microsoft.com/technet/sysinternals/FileAndDisk/PageDefrag.mspx)。我在前面提過,只要 Windows 在線上,就不能對 Windows 分頁檔進行磁碟重組。其實 Windows 登錄檔和事件記錄也一樣。但是 PageDefrag 就可以讓您在 Windows 完成開機和鎖定這些檔案之前,先使用一個小型驅動程式重組鎖定的檔案。使用的方法很簡單,只要執行 PageDefrag,將它設為在下次重新開機或每次重新開機時執行即可。每當系統重新開機時 (您之前可能看過,開機程序中執行磁碟檢查的那個時間點),就會重組清單指定的檔案 (見 [圖 6])。

[圖 6] 在 PageDefrag 中重組的檔案

[圖 6]** 在 PageDefrag 中重組的檔案 **

PageDefrag 完成之後,正常的系統開機就告完成。如需 PageDefrag 的其他相關資訊,請參閱 Lance Whitney 在 9 月號所寫的《公用程式焦點》 (請參閱 technetmagazine.com/issues/2007/09/UtilitySpotlight)。請注意,目前只有 Windows NT 4.0、Windows 2000、Windows XP 和 Windows Server 2003 支援 PageDefrag,Windows Vista 並不支援。

除了 PageDefrag 之外,您還可以從 Sysinternals 取得另一種名叫 Contig 的工具,這個工具可讓您以手動方式,針對特定的檔案進行重組 (請參閱 microsoft.com/technet/sysinternals/FileAndDisk/Contig.mspx)。如果只有某個檔案無法透過正常重組工作進行重組,或者如果只有該檔案分散,而磁碟區的其他部分都很完整,就可以使用 Contig。

如果您想重組整個目錄或子目錄,Contig 也可以利用萬用字元辦到。下面這個程式碼的任務,就是重組 Windows 目錄下所有的檔案,無論這些檔案在哪裡都無所遁形。

Contig –s c:\Windows\*.*

套用 –v 參數,表示詳細的執行作業,而套用 –q 則表示在背景執行作業。

Wes Miller 在德州奧斯丁的 Pluck 公司 (www.pluck.com) 擔任開發經理。他之前任職於同樣位在奧斯丁的 Winternals Software,並且曾在 Microsoft 擔任 Windows 的專案經理與產品經理。Wes 的聯絡方式為:technet@getwired.com

© 2008 Microsoft Corporation and CMP Media, LLC. 保留所有權利;未經允許,嚴禁部分或全部複製.