TRIM
/ TRIM = trim /
當你刪除一個檔案,檔案系統只是在它自己的位元圖裡把它的區塊標為空閒——它不抹掉它們,而且它沒有理由告訴磁碟任何事,因為一顆普通磁碟不在乎哪些磁區使用中。但一台 SSD 極度在乎:它的 FTL 需要知道哪些磁區裝著死資料,好有效率地抹除與重用那塊快閃。沒被告知的話,SSD 無從得知一個磁區現在是垃圾、便會忠實地持續保存它。TRIM 正是那個彌合這道缺口的指令——檔案系統告訴 SSD「這些邏輯磁區不再裝有效資料了;你可以丟棄它們。」
以下是它在機制上為何要緊。FTL 永遠只看見對邏輯磁區的讀與寫;檔案系統內部的一次刪除對它是隱形的。所以當你釋放一個檔案,SSD 仍以為所有那些磁區都還活著、便盡責地在垃圾回收與磨損平衡期間到處複製它們(如今無用的)內容,做著無意義的工作並放大寫入。一個 TRIM 指令(在 Linux 裡叫 discard、在 SCSI 裡叫 UNMAP)讓檔案系統通知磁碟機某範圍的邏輯磁區現在空閒,使 FTL 能把它們從記帳裡剔除、略過搬移它們的資料、並更早回收那塊快閃。這既加快未來的寫入(更多預先抹除好、待命的空間)、也減少磨損。TRIM 可以連續發出(掛載選項 discard,每次刪除都送一個 TRIM),或更常見且更有效率地,透過 fstrim 指令以週期性批次發出(常由計時器每週執行),一次 TRIM 掉所有目前空閒的空間。
為何重要:TRIM 正是為何一台維護良好的 SSD 能長時間保持它的寫入效能,而非隨著 FTL 用盡已知空閒、可寫入的空間而緩緩衰退。誠實的細節:TRIM 只幫得了 SSD 與其他快閃/精簡配置儲存——它對一顆單純的旋轉磁碟毫無意義,那種磁碟不在乎空閒磁區。在某些磁碟機上,每次刪除都連續 discard 可能增添延遲,這正是為何通常偏好週期性的 fstrim。而 TRIM 是關於空閒空間的「建議性提示」,不是安全抹除:一個被 TRIM 的磁區的資料可能、也可能不會立刻變得無法讀取,所以別依賴 TRIM 來保證資料銷毀。
$ sudo fstrim -v / /: 41.2 GiB (44231901184 bytes) 已修剪 # 告訴 SSD 哪些目前空閒的邏輯磁區它可以丟棄, # 使 FTL 停止保存死資料、並更早回收那塊快閃
fstrim 把一批空閒磁區清單交給 SSD,使它的 FTL 能停止保存、開始回收它們。
TRIM 只對快閃與精簡配置儲存有意義;在旋轉磁碟上毫無作用。它是空閒空間的提示、不是安全抹除——別假設被 TRIM 的資料立刻無法復原。在某些磁碟機上連續 discard 可能增添每次刪除的延遲,所以週期性的 fstrim 通常是更好的選擇。