在 Windows 環境中,如果您經常刪除並重新建立大型資料集 (例如:備份至磁片),上述刪除動作可能會在陣列上產生大量 UNMAP 命令。如果您重寫相同的磁碟空間,您的寫入效能可能會受到影響,因為傳入的寫入會等待 UNFP 的處理,UNFP 會將磁碟空間元素傳回陣列端的磁片集區。
驅動此儲存效率邏輯的作業系統機制稱為「TRIM」。如果 TRIM 處於作用中狀態,而且如果您在檔案系統上刪除區塊,檔案系統 (NTFS) 會產生釋放空間的中繼資料,並將其傳遞至 I/O 堆疊。在 I/O 堆疊的磁片層級,系統會決定是否將目標磁片連接為 ATA。在這種情況下,ATA TRIM 命令會傳送至實體磁片物件。如果磁片是 SCSI 磁片,則 TRIM 會轉換為 SCSI UNMAP。
如果您再次刪除並重寫相同的資料區段,則此返回集區機制的儲存效率方面會受到限制。在這種情況下,您可能已選擇在個別生產工作期間停用 NTFS 層級的 TRIM,或完全停用 TRIM。
產生的問題是,如何確保磁片長期仍可節省空間?
若要在裝置上觸發擷取,您通常會使用 /L 選項執行 defrag 命令。當您使用「fsutil behavior set disabledtenotify 1」停用 TRIM 時,您可能會在以下印象中: 僅在刪除時停 用裝飾或取消對應,且擷取功能如預期運作。情況並非如此。碎片分割中的擷取動作是一種機制,可分配空白的分割檔案,然後呼叫FSCTL_MOVE_FILE移動資料。如需進一步詳細資料,請參閱 「Windows Internals 7」,「Part II」,p. 644 ff。產生的行為表示主機殼蓋下的刪除動作。很抱抱,如果Disabledtenotify 是「1」,則擷取命令仍會成功。這不會導致取消對圖。
因此,回收儲存裝置的順序必須包含在執行磁碟重組之前啟動 TRIM 的步驟。
此外,如果您已在全球範圍內停用 TRIM,請將其啟動、進行磁碟重組,然後再次停用,雖然命令已傳回提示,但停用程式可能會與未完成的擷取命令執行發生碰撞。在 Windows 2019 上進行實驗室測試時,我們發現我們必須等待幾秒鐘,然後再將 Disabledtenotify 設定為「1」。我們相信這是由譯文命令與背景中優化服務之間的互動所致。
如果您使用磁片磁碟機優化工具排定 TRIM,則預設的 Explorer 功能表需要在工作排程器中稱為「ScheduledDefrag」(/Microsoft/Windows/Defrag) 的排定工作。如果您修改工作,Drive Optimizer 會偵測到此事實,並要求還原預設值,然後才能繼續。如果您停用此工作,您仍然可以手動執行磁碟重組命令,但無法排程。
此「ScheduledDefrag」工作也稱為「系統維護」(控制台\所有控制台專案\安全性與維護\自動維護)。
因此,我們建議您將這些系統預設設定保留在原樣,並考慮在工作排程器中建立新工作,如此一來:
步驟 3 中的逾時值是實驗室測試的推斷。我們從不需要超過 10 秒的時間,才能讓磁碟重組成功,並相信 60 秒是合理的起點。如果您發現陣列端分配容量值與檔案系統報告的已使用容量值之間出現差異,請嘗試使用更大的值,例如 300 秒 (5 分鐘)。
在下列內容中,我們提供範本,讓您匯入工作排程器以供您使用。複製並貼上以下 xml 代碼至檔案,將檔案置於您想要設定的伺服器系統範圍內,並使用工作匯入動作匯入工作。以下工作範本稱為 DellSanDiskMaintenance。每週執行上述四個步驟,星期六 20:00h (晚上 8 點),並置於排程器的根部,例如:
Dell Technologies 2023-07-07T09:21:50.4883878 Dell Technologies This task is an example of how to optimize thin SAN drives, if TRIM is globally disabled on the system. \DellSanDiskMaintenance D:AI(A;;FA;;;BA)(A;;FA;;;SY)(A;;FRFX;;;LS)(A;;FR;;;AU) 2023-07-01T20:00:00 PT2H true 1 S-1-5-18 HighestAvailable IgnoreNew true true true false false false false true true false false false true P1D P4D false false PT4H 7 %windir%\system32\fsutil.exe behavior set disabledeletenotify 0 %windir%\system32\defrag.exe /C /L /U timeout /t 60 %windir%\system32\fsutil.exe behavior set disabledeletenotify 1