Windows 在磁碟空間低於 10% 時會亮紅燈警示,找出並清除佔用空間檔案是老司機們的必備技能,理論上用左手都能完成。應該有不少人跟我一樣,採用的 SOP 是用 WinDirStatdu 掃瞄,找出佔空間的檔案刪除或搬走,空間就回來了。

不過,處理 750 萬個檔案事件的過程,意外學到一些新知,發現原本的做法與概念可能有盲點,會出現分析結果跟實際狀況不符的情況。例如:80GB 的磁碟用到只剩 5GB,但把所有掃瞄到檔案大小加總還不到 40GB,剩下 30GB 不知去向。要釐清這種狀況,有些進階知識與技巧。

  1. 權限問題
    WinDirStat 靠列舉檔案統計使用大小,掃瞄時可能因執行身分無權存取略過部分資料夾,形成沒統計到的黑數。(例如 750 萬檔案所在目錄 C:\ProgramData\Microsoft\Crypto\SystemKeys 是作業系統專屬資料夾,一般使用者無法存取)
    因此,使用管理者權限執行掃瞄是基本要求,至少排除因權限不足忽略的比例。
  2. 查不到的系統檔案
    磁碟機上有些檔案總管跟 DIR 看不到的系統檔案,例如 $Mft (Master File Table)、$MftMirr、$LogFilke、$Volume、$Boot... 等。

    參考來源:NTFS Reserved File Names
    一般來說,上述檔案佔用空間有限,不太會是兇手,有個例外是 Volume Shadow Copy 備份資料,這部分可用 vssadmin list shadowstorage 等指令檢查。參考:Volume Shadow Copy Troubleshooting
  3. 檔案大小不等於佔用的磁碟空間
    NTFS 配置空間給檔案時一般以 4KB 為單元(依總容量決定,大於 2GB 預設為 4KB),即使資料不足 4KB,剩下空間也無法給其他檔案使用,所以一個 1KB 的檔案會用掉 4KB 磁碟空間;有個但書,當檔案很小,NTFS 也可能直接將資料存在 MFT,此時佔用的磁碟空間則是 0;另外,若檔案用到 ADS (Alternative Data Stream),會再多佔用空間。磁碟空間(Size on Disk)會顯示在檔案總管的屬性頁:

    延伸閱讀:你可能不知道的 NTFS 檔案佔用磁碟大小 (Size On Disk) 原則

最後談談工具,750 萬事件讓我深深感到 WinDirStat 的不足,它有兩個嚴重問題:速度太慢與無法呈現實際佔用磁碟空間。

WinDirStat 透過列舉查詢檔案的方式掃瞄,遇到百萬級檔案數便會慢到讓你懷疑人生,以前一篇文章的兩百萬個檔案為例,X 槽被灌了 200 萬個檔案,檔案總數為 238 萬,WinDirStat 要花一小時 28 分才統計完畢。

而上圖也突顯了另一個問題,200 萬個檔案大小合計 2GB,但因為 4KB 配置單位實際要佔用 8GB,這點在 WinDirStat 是看不出來的。

WinDirStat 是個老軟體,2007 年後沒再更新過,最大的好處是採 GPL,不用擔心授權問題,但處理刁鑽一點的狀況便顯力不從心,於是我重新 Survey 磁碟空間分析軟體,找到兩個替代方案。

WizTree

WizTree 是 AntiBody Software 公司開發的磁碟空間分析工具,以直接解析讀取 MFT 取代呼叫 Windows API 列舉檔案,掃瞄速度快如閃電,WinDirStat 耗時一個半小時的 X 槽,WizTree 只需要 14 秒,而且除了檔案大小還能看得到佔用磁碟大小(Allocated),更能真實呈現空間使用狀況:

能看到 $MFT 等系統檔也是 WizTree 的強項:

但 WizTree 的免費授權限個人使用(Free for Personal Use),若在工作環境使用屬於商業用途(Commerical Use)範圍,需購買授權。

【補充】關於商業用途,這裡借用 TeamViewer 的定義,基本上,只要可能牽涉到任何金錢或服務就算商業用途。

商業用途的範例:

  • 幫助或支援客戶或同事
  • 協助企業或組織,即使是義務性質

個人使用/非商業用途的範例:

  • 使用在家用電腦
  • 幫助或支援朋友或親屬

TreeSize Free

TreeSize Free 是 JAM Software 推出的資料夾大小分析工具免費版,個人版跟專業版提供更多進階功能,但免費版功能已足夠初步分析磁碟資訊。TreeSize 的掃瞄速度比不上 WizTree,但實測 238 萬個檔案的 X 槽只花數分鐘,也完全輾壓 WinDirStat,而且它有提供 Allocated,判斷實際佔用空間精準許多:

TreeSize 相較 WizTree 有個優勢是可以只掃瞄特定資料夾。

總結

歷經幾篇文章的分析探討,學到一些新知識,決定將我的「磁碟空間分析 SOP」修正如下:

  1. 確認磁碟總空間及剩餘空間
  2. 使用 TreeSize Free 或 WizTree (非工作環境或有購買授權) 掃瞄磁碟,依據 Allocated 空間找兇手
    若無法使用上述工具,可用 WinDirStat 或 du,但要記得啟用管理者權限及「檔案大小不等於佔用磁碟大小」,以確保分析結果正確
  3. 若尚有差距,使用 vssadmin 指令排除是否被 Volume Shadow Copy 服務佔據空間
    註:WizTree 能直接檢查 $Mft 等系統底層檔案,是偵察工具首選,惟於工作環境使用需注意授權問題


Comments

# by Allex

姿勢? 知識?

# by Ming

姿勢沒錯啦!XD

# by Dennys

您好, 我使用的是 WizTree 4.12, 他可以選 <Select Folder...>, 就可以只掃某個資料夾了, 不確定是不是某個新版後才提供的, 您參考看看.

# by pplus

Windirstat 确实有点老了,2007 年之后就没更新过。

Post a comment