我的新笔记本里有一块新的三星固态硬盘。我调整了所有内容以避免在磁盘上写入数据(firefox 配置文件和/var/log
内存),我正在使用ext4
fs,并且每天relatime
使用一次来修剪我的固态硬盘。fstrim
我用 监控磁盘负载iostat -dhm
。在运行所示fstrim
命令之前iostat
Device: tps MB_read/s MB_wrtn/s MB_read MB_wrtn
sda
4.97 0.05 0.59 1856 20924
修剪后/home
# fstrim -v /home
/home: 100.2 GiB (107555401728 bytes) trimmed
ìostat
节目
Device: tps MB_read/s MB_wrtn/s MB_read MB_wrtn
sda
5.91 0.05 3.51 1859 123498
MB_wrtn
增加102574 MB
。这是否意味着fstrim
正在写入102574 MB = 100.2 GB
我的磁盘?
Trim 应该“标记”不包含有效数据的页面,而不是写入它们。
我猜想iostat
看到了由编写的操作fstrim
(即使它不是一种写作)。你怎么认为?有更好的方法来监控我的磁盘吗?
注意:使用iotop
并不是一个答案,因为它不显示被杀死的进程的数据量。因此,iotop
测量是不精确的。
答案1
MB_wrtn 增加了 102574 MB。这是否意味着 fstrim 正在将 102574 MB = 100.2 GB 写入我的磁盘?
是的,就是这个意思。fstrim
本质上查看块设备的每个块并确定该块是否正在被文件系统使用(即包含重要数据):
- 块正在使用中:忽略它。
- 块未使用:将此块的 ATA TRIM 命令发送到底层块设备。
完成后,修剪的块的数量应始终等于文件系统上的可用空间。fstrim
每次运行时都会修剪每个空闲块,无论它过去是否已经被修剪过,因此如果您更频繁地运行它,它不会变得更快。
内核可能将 TRIM 命令视为写入命令,因此每个执行的 TRIM 命令都算作 4k 写入命令。
Trim 应该“标记”不包含有效数据的页面,而不是写入它们。
将块“标记”为已修剪相当于“写入”它们,因为它们的内容会发生变化。如果您不小心修剪了错误的块,您将丢失数据 - 就像将零写入错误的块会导致您丢失数据一样。