fstrim 修剪了很多字节,我不认为我做了那么多删除

fstrim 修剪了很多字节,我不认为我做了那么多删除

最近,我在 Linux Mint 17.1 系统上安装了 SSD。我将一些常用的东西配置为 noop,例如将 io 调度程序设置为 noop,将 /tmp 和 /var/log 挂载到 tmpf 上,在启动时使用 rc.local 对 root 和 home 分区运行 fstrim。我有 8gb 的 RAM,所以我还删除了交换分区。

但是,在我登录系统并执行 5-10 分钟的控制台操作后,当我执行 fstrim 命令时,它减少了近 300mb。在此期间我没有下载任何东西。

所以我的问题是为什么删除了这么多字节。我没有删除任何大文件。可能是什么原因?

提前致谢。

答案1

总结: fstrim 报告的修剪字节数不正确。

一个非常类似问题在 Unix Stackexchange 上被问到。接受的答案是:

担心 fstrim 报告的大小是一个常见的误解。

这真的没什么意义。忽略它就行。

fstrim 只会发出适当的 ioctl,其他一切都由文件系统决定,文件系统的行为也大不相同。例如,ext4 会尝试避免反复修剪相同的内容,因此您会看到修剪后的字节数为 0。xfs 则不会关心这一点,它会修剪所有空闲的内容,因此您会看到修剪后的字节数始终为 0。其他文件系统可能会执行其他操作,这完全取决于文件系统选择如何实现 FITRIM 系统调用逻辑(如果确实实现了该逻辑)。

只要修剪的数据量不大于可用空间,无论 fstrim(实际上是文件系统)报告什么,都应该没问题。

最终只有 SSD 本身才真正知道当前哪些数据被修剪了,哪些数据没有被修剪。修剪已经修剪过的块不会造成任何损害。

不要根据 fstrim 报告的修剪的 x 字节得出结论。

如果您想验证数据是否已被修剪,您必须检查磁盘上的原始数据。(https://unix.stackexchange.com/a/85880/30851)但是该方法可能不适用于btrfs,我从未尝试过。

我向 OP 询问了您描述的具体情况(ext4 文件系统报告修剪了几百 MB,即使没有发生重大的写入活动或删除。他回答说:

一旦你做了一个小的改变,它就会修剪一大片区域(但仍然比可用空间小)。而且它可能不会在重启后记住。我还没有详细研究过实现,我猜它只是没有那么细粒度。

相关内容