为什么重启后 fstrim 会修剪 mdraid 镜像上的所有可用空间?

为什么重启后 fstrim 会修剪 mdraid 镜像上的所有可用空间?

我有一台带有 2 个 SSD 的服务器:

Model Family:     Intel 520 Series SSDs
Device Model:     INTEL SSDSC2BW240A3F
Firmware Version: 400i
User Capacity:    240,057,409,536 bytes [240 GB]
Sector Size:      512 bytes logical/physical

在它们上我有 3 个 mdraid 镜像设备(md0,1,2),使用 EXT4 文件系统格式化。我使用的是 mbr(不是 gpt)分区表。所有 3 个文件系统均通过以下方式挂载丢弃安装选项。

/dev/md0 on / type ext4 (rw,discard,errors=remount-ro)
/dev/md2 on /vservers type ext4 (rw,discard)
/dev/md1 on /var type ext4 (rw,discard)

问题是每当我重新启动服务器时,fstrim -v /any_mountpoint说它需要修剪所有未使用的空间。一旦我对文件系统进行了完整的 fstrim,一切都会按预期工作,直到下次重新启动。重新启动后再次运行 fstrim 会修剪整个文件系统。

有人可以向我解释我做错了什么吗?我认为 ext4 记住了文件系统已经修剪的部分(在我的带有 1 个 SSD 的桌面上,确实如此)。这是在具有 3.13.0-23-generic 内核的 Ubuntu 14.04 上。

答案1

不久前我问了一个非常相似的问题 -即使使用丢弃挂载的分区,fstrim 也会修剪一半以上的分区大小。对于这个问题上发生的情况有更详细的解释/讨论,但基本上,已修剪的内容fstrim(以及底层FITRIM ioctl)的记录保存在内核内存中,而不是写入磁盘。每次fstrim重新启动后运行,FITRIM ioctl都会发出 s 的完整可能范围。

相关内容