本文介紹Windows NTFS檔案系統中存在大量小檔案導致空間統計異常的問題原因及解決方案。
大量小於1 KB檔案佔用空間問題
問題描述
如下圖所示,Windows系統中從檔案統計看佔用磁碟空間1.56 MB,共計409,600個小檔案,每個檔案包含幾個字元,容量大約為幾個位元組,但磁碟顯示使用空間已經佔用594 MB,兩處空間大小統計相差較大。

問題原因
該情況為NTFS檔案系統中NFT佔用導致,與NTFS檔案系統中的檔案儲存體方式有關。NTFS檔案系統格式化後簡單的結構如下圖所示。
其中BOOT中存放檔案系統基礎資訊,如簇大小等。NTFS的檔案資訊都存放在Master File Table(MFT)中,每個MFT的記錄是1 KB大小且固定不變。每個記錄對應一個檔案,或者對應其他檔案系統對象。記錄格式為:記錄頭+屬性1+屬性2+...+屬性n,屬性裡包括檔案名稱、長度、修改時間等等。如果檔案資訊足夠小,那麼1 KB的記錄是用不滿的,剩下的部分就可以放檔案內容。其中,當檔案足夠小的時候,DATA裡放的就是檔案內容,當檔案足夠大的時候DATA放的是指標,指向另外一個地區儲存更大的資料。針對此問題,409,600個檔案要消耗409,600個MFT記錄,共計消耗容量400 MB。此外,NTFS檔案系統日誌和位元影像等也需要消耗空間,共計消耗594 MB容量。此情況也可以通過執行chkdsk d:命令擷取相關係統佔用資訊,此問題執行chkdsk d:命令後詳細資料如下圖所示。
或者使用WinHex程式擷取更詳細的系統佔用,下載WinHex後運行,後續使用Tools-Open Disk命令開啟需要分析的磁碟,擷取詳細資料。如圖所示,MFT佔用了400 MB空間,LogFile佔用了64 MB空間,BitMap佔用了3.1 MB空間。 
解決方案
針對MFT中已經分配的空間,預設刪除檔案會被標記為空白,但不會自動回收,提升再次建立檔案時的效率。如果確實需要釋放,一般需要第三方磁碟清理或整理工具進行,分區容量不大時,也可以建立大檔案佔用空間,此時系統會自動釋放已經刪除的MFT空間。針對此類情況,也建議針對小檔案進行定期壓縮備份,降低MFT佔用的空間,或從商務邏輯上減少大量小檔案使用。
大量小檔案但大於1 KB檔案佔用空間問題
問題描述
如下圖所示,共計409,600個小檔案,檔案本身大小為1 KB,實際檔案容量為400 MB,但佔用空間為1.56 GB。

問題原因
針對NTFS檔案系統中預設檔案的配置單位以簇的方式進行分配管理,預設最小的簇大小為4 KB,當檔案小於4 KB或剩餘分派不足4 KB時,實際分配仍舊為一個簇,即4 KB大小,則會導致佔用磁碟空間較大。
解決方案
如果業務中確實有大量小於4 KB檔案或大量小檔案儲存體,也可以定期壓縮備份減少磁碟佔用,或者當小檔案有固定大小時,可以在磁碟格式化時手工指定更小的簇大小,用以避免空間浪費的情況。指定簇大小可以在格式化過程中選擇合適的配置單位大小,其中預設配置大小為 4,096位元組,如下圖所示。
格式化磁碟為危險操作,請提前對磁碟進行快照備份,避免資料丟失。快照備份方法請參考建立快照。
相關文檔
如何定位並更正NTFS檔案系統中的磁碟問題請參見參考文檔。