9

分析 Windows 磁碟空間不足的正確姿勢

 2 years ago
source link: https://blog.darkthread.net/blog/disk-space-analysis-sop/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

分析 Windows 磁碟空間不足的正確姿勢

2022-07-24 09:17 PM 0 449

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... 等。
    Fig1_637942661355324139.png
    參考來源: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)會顯示在檔案總管的屬性頁:
    Fig2_637942661355719121.png
    延伸閱讀:你可能不知道的 NTFS 檔案佔用磁碟大小 (Size On Disk) 原則

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

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

Fig3_637942661356621854.png

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

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

WizTree

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

Fig4_637942661357161552.png

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

Fig5_637942661357614251.png

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

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

商業用途的範例:

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

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

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

TreeSize Free

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

Fig6_637942661358223491.png

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

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

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

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK