“fstrim”是否会导致每次写入所有空闲块?

“fstrim”是否会导致每次写入所有空闲块?

我有 Ubuntu 18.04 服务器,带有 500G SSD 磁盘,上面有 LVM 和 dm-crypt。我最近注意到写入磁盘的字节数(由vmstat -d或报告iostat)高得不切实际。监控系统 I/OI 后发现,fstrim.service运行时每周都会出现一次磁盘写入的巨大峰值:

写入的字节数

从日志来看,似乎每周fstrim运行时都会报告基本上所有可用空间都已写入磁盘,即使系统几乎处于空闲状态并且最多一周内写入的数据略低于 10Gb。

这是预期的行为吗?我一直认为只fstrim应丢弃自上次运行以来的新空闲块,而不是每次都丢弃整个空闲空间。这对 SSD 造成了异常高的磨损(根据磁盘报告的介质磨损值来判断)。或者它与 的存在有某种关系吗dm-crypt

该磁盘确实支持 TRIM:

hdparm -I /dev/sda | grep TRIM
  *    Data Set Management TRIM supported (limit 8 blocks)
  *    Deterministic read ZEROs after TRIM

并且还启用了丢弃传递dm-crypt

dmsetup table
  silverbox--vg-swap: 0 19529728 linear 253:0 917964800
  silverbox--vg-root: 0 917962752 linear 253:0 2048
  sda3_crypt: 0 937496576 crypt aes-xts-plain64 00...0 0 8:3 4096 1 allow_discards

答案1

ATAtrim命令仅更改磁盘驱动器中的元数据,它绝对不会对存储单元进行任何低级写入。如果磁盘支持deterministic trim修剪块,则返回零,但这是由控制器根据新的元数据状态完成的,而不是因为单元在命令时实际被擦除trim

trim不幸的是,在我所知道的所有内核统计信息中,命令都被计为写入。所以iostat或者sar或者/sys/fs/ext4/*/lifetime_write_kbytes真实写入和修剪的总和。也可以看看关于超级用户的问题

fstrim每周运行一次,似乎会释放整个未使用的磁盘空间。例如,如果您有一个已使用 50% 的 1 TB 磁盘,则默认fstrim活动在统计信息中显示为每周写入 500 GB 或每天写入 70 GB。

底线是:写入统计数据很容易被计为写入的修剪所控制,特别是对于中等填充的文件系统

相关内容