Ssd

fstrim 在 xfs 上非常慢,並且總是返回與 ext4 不同的相同值

  • October 16, 2022

我只是注意到如果我time fstrim /<some ext4>; time fstrim /<some ext4>打第二個電話通常會列印0 bytes trimmed並立即完成。但是,如果我在 XFS 上做同樣的事情,其中​​ 2 個呼叫將花費完全相同的時間並列印完全相同數量的修剪字節。這讓我想知道修剪真的有效嗎?如果是,是否可以打開任何標誌以使 XFS 不重新修剪已經修剪的塊?

我使用所有預設設置來掛載 xfs。

Ext4 記憶體已在記憶體中修剪的範圍,並且在重新啟動之前不會重新修剪它們。

XFS 不會記憶體此資訊,並在每次 fstrim 啟動時重新調整所有內容。

資源:

Fstrim 在文件系統上呼叫 FITRIM IOCTL,最終呼叫 FS 特定的內部函式:https ://github.com/util-linux/util-linux/blob/master/sys-utils/fstrim.c#L120

我省略了幾個中間函式……

如果範圍已被丟棄,Ext4 驅動程序會檢查記憶體結構。如果沒有,它會嘗試丟棄它並將其設置為已丟棄,防止進一步丟棄,直到系統重新啟動: https ://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree /fs/ext4/mballoc.c?h=v6.0#n6442

XFS 內部函式沒有這樣的檢查,只是丟棄所有內容: https ://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/fs/xfs/xfs_discard.c?h= v6.0#n151

引用自:https://serverfault.com/questions/1113127