我有 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。
底线是:写入统计数据很容易被计为写入的修剪所控制,特别是对于中等填充的文件系统。