我剛剛升級到SSD。表現非常出色。
但是,每次重新啟動後,當我對分區執行 fstrim 時,它將修剪所有可用空間。據我了解,修剪會寫入所有可用的可用空間。不確定是否相關,但我使用全盤加密(包括/boot)。
由於頻繁寫入會大幅縮短 SSD 的壽命,因此我對這種調整感到擔憂。
以下是我每次修剪時保存的日誌:
Jul 30 13:46:00 /: 478.6 MiB (501862400 bytes) trimmed
Jul 31 13:22:26 /: 347.8 GiB (373409230848 bytes) trimmed
Jul 31 13:25:32 /: 194.3 MiB (203710464 bytes) trimmed
Jul 31 13:25:40 /: 19.2 MiB (20111360 bytes) trimmed
Aug 02 14:08:06 /: 345.9 GiB (371398463488 bytes) trimmed
Aug 02 22:21:36 /: 56.9 GiB (61047971840 bytes) trimmed
Aug 02 22:31:27 /: 347.7 MiB (364560384 bytes) trimmed
Aug 02 22:31:43 /: 127 MiB (133144576 bytes) trimmed
Aug 02 22:33:01 /: 243 MiB (254767104 bytes) trimmed
Aug 03 06:58:47 /: 1 GiB (1080602624 bytes) trimmed
Aug 03 10:00:02 /: 2.4 GiB (2526216192 bytes) trimmed
Aug 03 11:42:14 /: 341 GiB (366146318336 bytes) trimmed
Aug 03 16:00:01 /: 0 B (0 bytes) trimmed
Aug 03 16:33:53 /: 0 B (0 bytes) trimmed
Aug 03 16:48:43 /: 341 GiB (366074740736 bytes) trimmed
Aug 03 16:50:13 /: 1.2 GiB (1297809408 bytes) trimmed
Aug 03 16:53:31 /: 341 GiB (366074695680 bytes) trimmed
Aug 03 17:07:55 /: 340.9 GiB (366066126848 bytes) trimmed
Aug 05 22:00:13 /: 341 GiB (366073069568 bytes) trimmed
Aug 05 22:07:22 /: 1.2 GiB (1261793280 bytes) trimmed
Aug 06 07:41:50 /: 1.4 GiB (1522991104 bytes) trimmed
Aug 06 10:00:11 /: 341 GiB (366068740096 bytes) trimmed
可以看到,電腦開機後的修剪量約為 340GiB,而正常使用時的修剪量僅為 1GiB 左右。
我應該擔心這會磨損我的 SSD 嗎?我不應該修剪嗎?
答案1
有一個誤解。修剪不會導致額外的寫入,它減少他們。
SSD,或者更確切地說,它的 NAND,有兩個「區塊」概念,其中一個實際上稱為堵塞(通常是 128k 到 512k),另一種更接近您在檔案系統中談論「區塊」時的意思,稱為頁(通常是 4k 左右)。你可以寫一次輸出一個完整的頁面,就像在舊硬碟上一樣,沒問題。一切都按預期進行。
但是,您不能覆蓋一頁,它們是一次性寫入的。此後您只能擦除它,使其再次可寫。這就是 NAND 使用壽命的重要因素。問題只是…現實中你不能擦除頁面。你只能抹去區塊(即一次包含 32-64 個頁面的群集)。
這意味著當您覆蓋頁面(檔案系統中的“區塊”)時,控制器必須:
- 讀入完整區塊
- 如果存在「原始」或已擦除的區塊,請使用該區塊
- 否則清除同一個區塊
- 寫出完整的區塊,並相應地修改了被覆蓋頁面的內容
- 執行一些未指定的“魔法”,以便擦除週期在所有區塊上均勻分佈,從而防止過早死亡
這個有點簡化了,但是原理就是這樣。 A聰明的控制器可能會做一些稍微不同的事情(例如,邏輯地重新映射頁面,填充所有頁面直到沒有留下任何頁面,並以某種方式“記住”哪些頁面是好的,哪些頁面是陳舊的,等等),但原則上工作流程如上所述。
這是一個問題,因為小寫入是很常見的事情,所以很快磁碟上的每個區塊都至少被寫入一次。現在控制器能做什麼?不多。它並不真正知道檔案系統正在做什麼或預期什麼,因此它必須在最保守的假設下工作。也就是說,曾經寫下的所有內容都必須保留。
TRIM解決了這個問題。它告訴控制器這樣那麼大的範圍沒有被使用,因此控制器也可以丟棄它。它什麼也沒寫。如果有的話,它也只會擦除區塊(不過,只會擦除一次,而不是每次)。
由於您告訴控制器您沒有使用該數據,因此它可能會冒著將其丟棄而不會造成傷害的風險。現在突然又出現了可寫區塊,無需複製資料和重複擦除區塊。這不僅使寫入快點而且也減少了必須發生的擦除次數。
答案2
fstrim
似乎釋放全部分割區的可用空間,不僅僅是自上次呼叫以來釋放的空間fstrim
。也可以看看這個帖子。