FAT、NTFS檔案系統的大小限制與NTFS的效能及最佳化

ysjxjf發表於2011-11-02
轉載[@more@]FAT、NTFS檔案系統的大小限制與NTFS的效能及最佳化   首先,需要澄清人們對於檔案系統的一些錯誤理解,經常有這樣的說法:“我的硬碟是FAT32格式的”、“我的C盤是NTFS格式”等,這裡的錯誤在於NTFS或FAT32並不是什麼格式,而是管理檔案的系統。   剛買回來的硬碟並沒有檔案系統,必須使用分割槽工具建立“卷”(在基本磁碟中,“卷”也稱為分割槽)並對其格式化後才會在磁碟上建立管理檔案的系統。因此檔案系統是對應卷的,而不是整個硬碟。不論在硬碟上建立了幾個卷,每個卷都要有檔案系統。   名詞介紹:在基本磁碟上只有簡單卷,簡單卷可以指主分割槽,擴充套件分割槽及其包含的邏輯驅動器。   FAT、NTFS檔案系統的大小限制   FAT卷的最大容量和檔案大小   每種檔案系統都有一個卷大小、檔案大小的限制,以及每卷可容納的檔案最大數量。FAT16支援最大為4GB的卷;FAT32支援最大為32GB的卷,因此要建立大於32GB的卷,就必須使用NTFS格式。簡單地說:   一、小於16MB的FAT卷會被格式化為FAT12檔案系統;   二、雖然FAT16支援最大為4GB的卷,但使用MS-DOS及一些早期作業系統的計算機,其FAT16的卷超過2GB就不可訪問了。這個2GB限制是由於這些作業系統不支援超過32KB的簇。   三、從理論上講,FAT32的卷可以達到約8TB(8000GB)大小,但實際上Windows XP Pro可以格式化的FAT32卷最大也就到32GB而已。如果你要在磁碟上建立一個大於32GB的分割槽,就必須使用NTFS檔案系統來格式化這個卷。但是Windows XP Pro還是可以讀寫由其它作業系統格式化的超出32GB大小的FAT32卷。   四、FAT16支援的單個最大檔案為2GB;FAT32支援的單個最大檔案為4GB。   NTFS卷的最大容量和檔案大小   理論上,NTFS的最大卷可以包含 2^64-1 個簇。但在Windows XP Pro中,NTFS卷實際上的最大限制是 2^32-1 個簇。舉例說,如果是64KB的簇,那NTFS卷的最大容量就是256TB減64KB這麼大;如果使用預設的4KB一個簇,那麼它的最大容量就是16TB減4KB 。   雖然NTFS支援的卷可達16TB甚至256TB那麼大,但由於基本磁碟中主開機記錄(MBR)分割槽表的限制,磁碟的全部容量僅能識別到2.19T,因此也無法建立更大的捲了。但是在動態磁碟裡可以建立跨區卷,跨區卷是一種動態卷,Windows XP Pro使用了一種有別於分割槽表的特殊的資料庫來管理動態卷,這就使得動態卷可以超過分割槽表中2.19TB的限制。一個動態卷的大小可以達到NTFS支援的最大限度。   儘管NTFS卷中儲存的檔案大小不能超過它們所在的卷(或分割槽)的大小,但理論上單個最大檔案可達16TB減去64KB。   以下是FAT、NTFS檔案系統的屬性對照表(表中“-”為減號,1EB=1000PG,1PG=1000TB,1TB=1000GB):   NTFS的效能   NTFS檔案系統具有四大優點:   一、具備錯誤預警的檔案系統   在NTFS卷中,最開始的16個扇區是引導扇區,其中儲存著卷引導程式碼,接著就是主檔案表(MFT,Master File Table),但如果它所在的磁碟扇區恰好出現損壞,NTFS檔案系統會智慧地將 MFT換到其它扇區,保證了檔案系統正常執行,也就保證了Windows的正常執行。而FAT的檔案分配表則只能固定在引導扇區的後面,一旦遇到扇區損壞,那麼整個檔案系統就要癱瘓。   二、檔案讀取速度更高效   對DOS略知一二的讀者一定熟悉檔案的各種屬性:只讀、隱藏、系統等。在NTFS檔案系統中這些屬性都還存在,但也有很大不同。在這裡,一切東西都是一種屬性,就連檔案內容也是一種屬性。這些屬性的列表不是固定的,可以隨時增加,這也是為什麼會在NTFS卷中看到檔案有更多的屬性。   NTFS檔案系統中的檔案屬性可以分成兩種:常駐屬性和非常駐屬性,常駐屬性直接儲存在MFT中,像檔名和相關時間資訊,如建立時間、修改時間等永遠屬於常駐屬性;非常駐屬性則儲存在MFT之外,但會使用一種複雜的索引方式來進行指示。如果檔案或資料夾小於1500位元組(其實我們的電腦中有相當多這樣大小的檔案或資料夾),那麼它們的所有屬性包括檔案內容都會常駐在MFT中。而MFT是Windows一啟動就會載入記憶體的,這樣當你檢視這些檔案或資料夾時,它們的內容早已在快取中了,自然大大提高了檔案和資料夾的訪問速度。   那為什麼FAT的效率不如NTFS高呢?因為FAT的檔案分配表只能列出每個檔案的名稱及起始簇,並沒有說明該檔案是否存在,這需要透過其所在資料夾的記錄來判斷,而資料夾入口又包含在檔案分配表的索引中。因此在FAT中訪問檔案時,首先要讀取檔案分配表索引來確定檔案已經存在,然後再次讀取檔案分配表找到檔案的首簇,接著透過鏈式的檢索找到檔案所有的存放簇,最終確定後才可以訪問。   三、磁碟自我修復功能   NTFS可以對磁碟上的邏輯錯誤和物理錯誤進行自動偵測和修復。在FAT16和FAT32時代,我們需要藉助Scandisk這個程式來標記磁碟上的壞扇區,但當發現錯誤時,資料往往已經被寫在了壞的扇區上了,損失已經造成。NTFS檔案系統則不然,每次讀寫時,它都會檢查扇區正確與否。當讀取時發現錯誤,NTFS會報告這個錯誤;當向磁碟寫檔案時發現錯誤,NTFS將會十分智慧地換一個完好位置儲存資料,操作不會受到任何影響。在這種情況下,NTFS會透過硬碟韌體在壞扇區上作標記,防止今後再被使用。這種工作模式可以使磁碟錯誤較早地被發現,避免災難性的事故發生。   四、預防為主的事件日誌   在NTFS檔案系統中,任何操作都被看作一個“事件”。例如將一個檔案從C複製到D,這一過程就是一個事件。事件日誌一直監督著整個操作,只有當它在D發現了完整檔案,才會記錄“已完成”的標記。假如複製中途斷電,重新啟動機器後事件日誌可以讓系統清除磁碟上因寫入資料中斷導致的邏輯錯誤。事件日誌監督所有事件,從而永遠讓系統知道完成了哪些任務,哪些還未完成,保證磁碟資料不會因突發事件發生紊亂,最大程度降低了破壞性。   所以,當你將某個卷改為NTFS檔案系統後,你會發現因意外斷電而重啟後,系統不會再對NTFS捲進行查錯,也不會在卷中形成一堆諸如found.000之類的檔案了,因為NTFS卷中所有錯誤的連結都已自動得到了糾正。   NTFS的最佳化   NTFS的效能受很多因素影響,如簇的大小,磁碟碎片的多少等等。此外,NTFS卷的壓縮和索引服務同樣可能影響其效能,下面是一些最佳化 NTFS 效能的方法。   一、簇的大小   在格式化一個NTFS卷之前,首先要對自己要儲存在該捲上的檔案的型別做一個評估,以便決定是否使用預設的簇大小。重要的是先想想:   要儲存的檔案大小是否基本一致?   大部分檔案的大小是否要小於預設簇的大小?   這些檔案的大小是基本不變的還是常變的?   如果大部分檔案都小於預設簇的大小(例如4KB)並且基本保持檔案尺寸不變,使用預設的簇大小將減少磁碟空間的浪費。而選用更小的簇將增加產生碎片的可能,尤其是當檔案佔用了超過一個簇大小的時候。   如果要儲存的檔案比較大,或者尺寸可能會增大,就該用16KB或32KB的簇來替代4KB的簇。   提示:只有在簇大小為4KB或更小的時候才能實現卷的壓縮功能。   在Windows中,雖然可以在不影響FAT卷資料的情況下將該卷轉換為NTFS卷,但這個無損轉換會影響NTFS卷的效能。因為被轉換後的簇大小是預設的512位元組,MFT也會在轉換過程中產生更多碎片,更糟糕的是,磁碟碎片整理工具往往不能整理MFT。因此與使用NTFS格式化的卷相比,無損轉換後的卷碎片多、讀寫慢,從而對整個系統造成影響。作為最佳化效能來考慮,並不推薦作這樣的無損轉換,最好的方法是將要轉換的FAT分割槽中的所有資料備份到別處,然後把該分割槽重新格式化為NTFS卷,並在格式化的過程中指定簇的大小。   二、短檔名問題   每當建立一個長檔名的檔案時,NTFS就會自動產生一個類似8.3短檔名的備份條目。8.3短檔名就是用8個字元表示檔名,3個字元表示檔案的副檔名,檔名和副檔名之間用一個圓點分隔。   如果在一個資料夾中包含了非常多(例如300,000個或更多)的檔案,而且所有檔案都採用了長檔名規則命名並且初始的字元都相同,那麼建立這些檔案所需的時間就要增多。這是由於NTFS是根據長檔名的前6個字元來建立短檔名索引的。在多於300,000個檔案的一個資料夾中,由NTFS用8.3規則建立檔名時,檔名相似的長檔名所對應的短檔名在備份時會產生衝突。這種在新建短檔名時與已經存在的短檔名之間的衝突,會使在建立新檔案的時候所耗費的時間達到沒有這類衝突時的6到8倍。   要減少這種在建立新檔案時所耗費的時間,可以在命令提示符下使用“fsutil behavior set”這個命令來禁用8.3規則以最佳化檔案系統效能。在“Windows 最佳化大師”這個工具軟體中的“檔案系統最佳化”一欄中就有禁用8.3檔名規則這一最佳化專案。如果的確需要8.3檔名,就應提前制訂自己的命名計劃,使長檔名的前6個字元不相同。   三、目錄結構   NTFS支援在每個捲上有大量檔案和資料夾的存在,在決定一個目錄結構時,下面幾點是要考慮到的:   如果要頻繁和快速地建立、刪除、開啟和關閉其中的檔案,就要儘量避免把大量檔案放在同一目錄下,特別不能放在根目錄下。最好的解決方案是把它們按其內容分門別類地放到幾個子目錄下。如果某些檔案一時無法安排到合適的位置,那就應該禁用8.3檔名規則。   四、卷壓縮功能   卷壓縮功能同樣增加了系統的額外開銷,即使在同一計算機內複製檔案的時候,被壓縮的卷中的檔案也要經歷一個解壓縮、複製、重新壓縮為新檔案這樣一個過程。所以儘量不要使用NTFS的卷壓縮及檔案壓縮功能。   五、索引服務   如果使用者經常在NTFS捲上搜尋檔案,可以透過開啟索引服務來大大減少搜尋的時間。特別是對檔案的內容進行查詢的時候,索引服務更能起到加速的作用。開啟索引服務後,NTFS會使用系統的一部分資源來建立和維護索引,跟蹤檔案更改並對這種更改進行記錄,而這些操作僅僅帶來很小的效能損失。實際上,對於經常進行搜尋的捲來說,啟用索引服務所帶來的查詢速度的提升,要遠遠高於由此引起的系統效能下降的幅度。   六、最近訪問時間   NTFS捲上的每個檔案和資料夾都有一個屬性,就是“最近訪問時間”(LAT),這個屬性表明了該檔案或資料夾的上次訪問時間。當使用者在資料夾中新增、讀取檔案,或者對某檔案進行更改的時候,都會改變這個屬性。LAT在磁碟的兩個地方完成寫入:   1)MFT記錄中檔案屬性的部分;   2)該檔案的目錄項中。目錄項儲存在包含該檔案的資料夾中,當一個檔案被儲存在磁碟上的時候,可能會被分割成多塊而寫到不同的物理區域,然後以一種“連結”使檔案保持為整體,包含多個物理連結的檔案就有多個目錄項。   磁碟上已經存在的LAT並不一定總是最新的,這是因為NTFS檔案系統每隔一小時才將在記憶體中開啟的檔案的屬性儲存一次,在使用者或應用程式對檔案進行只讀操作的時候,NTFS也會延後“最後訪問時間”屬性的寫入。想象一下,在列出某個資料夾目錄或者讀取(不是更改)資料夾中某個檔案的時候,如果對於這個“讀”操作,LAT屬性也要保持最新的話,那所有的“讀”操作就會變成對LAT的“寫”操作,這對NTFS的效能可是影響很大的,所以需要延後“最後訪問時間”屬性的寫入。   另外,基於檔案屬性的LAT即使在磁碟上儲存的所有的值完全不正確,也無關緊要。NTFS會隨時將磁碟上的可疑屬性值用記憶體中儲存的精確值來替換。NTFS最終會將記憶體中的LAT儲存到磁碟的以下位置上:   1)在檔案的屬性中   如果當前記憶體中的LAT和上次儲存在硬碟上的LAT有一個小時的時差,或者記憶體中對該檔案的所有程式都已結束,NTFS就會對該檔案的LAT進行更新。例如,當前一個檔案的LAT是1:00,而你在1:30又讀取了該檔案,檔案系統並不會更新該LAT。而如果你又在2:00的時候再次讀取該檔案,NTFS檔案系統就會把該檔案的LAT更新到2:00,因為此時該檔案的LAT屬性為1:00,而記憶體中的屬性為2:00,已經相差一個小時了。   2)在檔案的目錄項中   在下列事件發生時將更新目錄項:當更新檔案的LAT時,檢測到該檔案的LAT比在目錄項中儲存的LAT差別在一個小時以上的時候。這種更新最典型地發生在當某個應用程式關閉在資料夾中用於訪問該檔案的控制程式碼的時候。如果該程式延長該檔案控制程式碼的開啟時間,就會在更新目錄項的時候出現遲滯。   另外,當NTFS更新檔案的其它屬性如“最近修改時間”(LMT),而LAT的更新未決的時候,NTFS會在不影響系統效能的前提下,隨其它屬性的更新而更新LAT。   因此,如果有某個NTFS捲包含了大量的資料夾和檔案,那麼當某個應用程式對每個檔案依次進行簡短訪問的時候,由建立LAT更新所佔用的I/O頻寬會在全部I/O頻寬中佔據非常明顯的比重。為了加快訪問資料夾或檔案的速度,可以使用“fsutil behavior set disablelastaccess”這個命令來禁止更新LAT。在“Windows 最佳化大師”中的“檔案系統最佳化”一欄中也有“禁止更新訪問時間”這一最佳化專案。   在應用了該命令並重啟計算機後,LAT就不會再被更新了,此時建立一個新的檔案,它的LAT就會永遠保持在它最初建立的時間上。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/66634/viewspace-1056094/,如需轉載,請註明出處,否則將追究法律責任。

相關文章