我刚刚注意到,如果我进行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
| 归档时间: |
|
| 查看次数: |
1810 次 |
| 最近记录: |