Linux
fstrim 修剪超過一半的分區大小,即使分區掛載時丟棄
當我安裝我的 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
當然,如果我一直將分區掛載
discard
,fstrim
不應該像那樣修剪大量數據嗎?該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。為什麼會這樣?
這裡有兩件事:
fstrim
修剪文件系統中所有未分配的數據(嗯,不是所有數據,只有未分配的數據塊,我不認為 inode 表的未使用部分或未完全使用的塊的部分是修剪),無論是否discard
使用。fstrim
無法知道這些未分配的塊中的哪些已被“修剪”或過去尚未被“修剪”,但它(實際上是核心,所有fstrim
工作都在 中完成FITRIM
ioctl
)但是會跟踪哪個塊組已被修剪,如果從那時起該塊組中沒有任何取消分配,則不會再次修剪它們,除非您請求具有較小最小範圍長度的 FITRIM(通過檢查 ext4 程式碼,它可能與其他文件系統),這解釋了為什麼你在下次執行時得到 0。請注意,修剪已經修剪過的塊並沒有什麼害處。這只是再次告訴 SSD ,它可以隨心所欲地使用它(比如擦除它,以便它可以再次用於其他用途)。 2. 在
df
輸出中,“可用”值沒有考慮“保留”的空間root
,您會注意到 206 - 76 是 130G,而不是 118G。預留12G(約5%)。請參閱tunefs -m
更改保留的數量。