Linux

fstrim 修剪超過一半的分區大小,即使分區掛載時丟棄

  • January 17, 2014

當我安裝我的 SSD 時,我只是安裝了discard它並且沒有出汗。但是今天我正在閱讀有關使用的優缺點,fstrim並決定執行該程序以了解它實際需要多長時間(仍然使用我的分區安裝discard)。該命令在我的根分區和主分區上都花費了幾分鐘。對於我的家庭分區,我使用-v並得到了這個:

$ sudo fstrim -v /home
/home: 137494052864 bytes were trimmed

這超過了分區上的可用空間量!

$ df -h /home
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda2       206G   78G  118G  40% /home

隨後的執行在不到一秒的時間內完成,例如:

$ sudo fstrim -v /home
/home: 0 bytes were trimmed

當然,如果我一直將分區掛載discardfstrim不應該像那樣修剪大量數據嗎?該discard選項肯定已啟用,以下是相關fstab行:

UUID=xxxxxxxx...    /          ext4   noatime,discard,errors=remount-ro  0      1
UUID=xxxxxxxx...    /home      ext4   noatime,discard,errors=remount-ro  0      2

mount輸出線:

/dev/disk/by-uuid/xxxxxxxx... on / type ext4 (rw,noatime,discard,errors=remount-ro,stripe=128,data=ordered)
/dev/sda2 on /home type ext4 (rw,noatime,discard,errors=remount-ro,stripe=128,data=ordered)

SSD 是東芝 THNSNS256GMCP。為什麼會這樣?

這裡有兩件事:

  1. fstrim修剪文件系統中所有未分配的數據(嗯,不是所有數據,只有未分配的數據塊,我不認為 inode 表的未使用部分或未完全使用的塊的部分是修剪),無論是否discard使用。fstrim無法知道這些未分配的塊中的哪些已被“修剪”或過去尚未被“修剪”,但它(實際上是核心,所有fstrim工作都在 中完成FITRIM ioctl)但是會跟踪哪個塊組已被修剪,如果從那時起該塊組中沒有任何取消分配,則不會再次修剪它們,除非您請求具有較小最小範圍長度的 FITRIM(通過檢查 ext4 程式碼,它可能與其他文件系統),這解釋了為什麼你在下次執行時得到 0。

請注意,修剪已經修剪過的塊並沒有什麼害處。這只是再次告訴 SSD ,它可以隨心所欲地使用它(比如擦除它,以便它可以再次用於其他用途)。 2. 在df輸出中,“可用”值沒有考慮“保留”的空間root,您會注意到 206 - 76 是 130G,而不是 118G。預留12G(約5%)。請參閱tunefs -m更改保留的數量。

引用自:https://unix.stackexchange.com/questions/109812