iT邦幫忙

1

SSD保留分割區20%,這樣能預防寫滿變慢的問題嗎?

ssd
  • 分享至 

  • xImage

SSD寫滿會變慢,如果先分割20%不使用,這樣能預防寫滿變慢的問題嗎?

作業系統的根目錄或C:\的空間不足,一樣變慢,而不是你分割了多少保留區可以緩解
至於怎麼做比較好?換一個大的SSD,我用1TB,不分割,全做C
supermaxfight iT邦研究生 4 級 ‧ 2025-06-26 08:28:05 檢舉
原則上是同型號,容量越大越好,除非遇到主控太爛,只剩100MB/s不到在運作
基本上個人建議打包一個VHD檔案,VHD本身可以壓縮,跟SSD的機制不一樣,壓縮之後,檔案文件都會是循序存放,所以讀寫速度比較穩定,而SSD本身雖然主控可以控制,但壓縮空間要靠第三方軟體,比直接用官方的VHD檔案還麻煩,還有就是剩餘空間不是保留幾成的問題,你保留空間次數到了,也就死了,其實都一樣
QLC 也就三百次而已,樓主覺得呢 ?
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

4
Ray
iT邦大神 1 級 ‧ 2025-06-25 17:12:32

1.企業級的通常出廠就先幫你保留好, 你看不到, 也不需要額外留
2.消費級的你可以自己保留, 建議保留30%

0
Alan Wu
iT邦見習生 ‧ 2025-06-29 10:15:22

個人認為是可以預防,不過我不是專家,如果有誤再麻煩大大們指正補充

要解釋這個問題,需要先理解 SSD 的一些特性:

  1. SSD 寫入資料後,無法覆寫,必須先抹除後才能再寫
  • SSD 是由很多 block 組成,而一個 block 又是由很多 page 組成,而 page 就是 SSD 的最小讀寫單位
  • 一個 page 可以被讀很多次,但是只能寫一次,除非把整個 block 抹除,還原成未寫入的狀態
  1. Wear Leveling
  • 通常 SSD 會實作 Flash Translation Layer,也就是讓作業系統想要寫入的地址不等於真正實體的地址,而是會由 SSD 內部的 Controller 來分配實際會寫到哪個 block 的哪個 page
  • 這是因為抹除 block 需要的電壓較高,除了耗電較高以外,最重要的是會導致該 block 的壽命耗損,因此 SSD 通常不會為了修改一個 page 的資料而立刻把整個 block 都抹除再寫回去
  • 假如今天只是想改某個位址的一個 byte,實際上 SSD Controller 會將整個 page 讀出來、找到未寫入狀態的 page、把修改後的整個 page 寫進去,最後把原本的 page 標記為可抹除
  • 而等到多次讀寫後,某一個 block 上面的所有 page 都被標記為可抹除,此時再透過 Garbage Collecting, 將整個 block 抹除,就可以只耗損一次的壽命
  • 透過這種做法可分散需要被抹除的 block,而不是因為同一個位置的資料一直反覆讀寫,就一直損耗同一個 block 的壽命。
  1. 寫入放大
  • 今天只是想改一個 byte,實際上卻需要寫整個 page 的資料量,這本身就已經造成寫入放大了
  • 要是今天 SSD 剩餘可用的 block/page 過低,那麼就沒有多少空間可以用來做 Wear Leveling
  • 萬一今天沒有可以寫的 page 了,通常 Controller 就會強制執行一次 Garbage Collecting 來騰出空間
  • 此時,即使某個 block 還有 page 沒有被標記為可抹除,也可能會被當作抹除的對象
  • 例如有兩個 block 都只剩一半有效的 page ,那就可以把這兩個 block 的有效 page 都彙整到一個新的 block 上,藉此就可以將原本兩個 block 抹除,騰出空間。
  • 此時寫入放大就會更加顯著,因為本來只是想寫一個 byte,卻要等 Garbage Collecting 騰出空間後才能完成
  • 這就是為什麼當 SSD 剩餘空間越低,會越耗電、效能越差、壽命耗損越快的原因

回到問題本身, 由於 Flash Translation Layer 的關係,無論分割表、檔案系統怎麼寫,實際使用哪個 block 都是 SSD 裡面的 Controller 決定,
而 Controller 自己肯定會知道還有哪些 block/page 可以寫入 (才有辦法做 Wear Leveling),
所以即使作業系統看到自己的 root file system 已經用了超過 85% 甚至 95% 也無妨,
由於你有預留 20% 的總空間,理論上可以避免 SSD 內部因為可用的 block 不夠而需要一直強制 Garbage Collecting 的問題。

另外,考慮到 NAND Flash 的良率問題、延長使用壽命,
有些 SSD 內部實際的 block 數量會超過標示的容量,也就是本來就預留了一些備用的 block,
這種情況就可以減輕硬碟寫太滿、可用 block 不足,以至於要一直強制 Garbage Collecting 的問題,
更多 block 互相分攤抹除次數,也就可以延長每個 block 平均的使用壽命。
不過 SSD 一般都不會告訴你裡面有沒有備用的 block,所以建議還是不要把 SSD 用到太滿。

以上的都是針對 SSD 底層的原理來討論,針對作業系統的 root file system 太滿會不會有其他導致變慢的因素 (例如 swap 空間不夠?) 這邊暫且忽略不計。

我要發表回答

立即登入回答