fstrim 和 iostat

fcl*_*lad 5 io ssd trim

我的新笔记本中有一个新的三星 ssd。我调整了所有内容以避免写入磁盘(firefox 配置文件和/var/log内存中),我正在使用ext4fsrelatime并且我fstrim每天使用一次来修剪我的 ssd。

我用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
Run Code Online (Sandbox Code Playgroud)

修剪后 /home

# fstrim -v /home
/home: 100.2 GiB (107555401728 bytes) trimmed
Run Code Online (Sandbox Code Playgroud)

ìostat 显示

Device:            tps    MB_read/s    MB_wrtn/s    MB_read    MB_wrtn
sda
              5.91         0.05         3.51       1859     123498
Run Code Online (Sandbox Code Playgroud)

MB_wrtn增加了102574 MB。这是否意味着fstrim正在写入102574 MB = 100.2 GB我的磁盘?

Trim 应该“标记”不包含有效数据的页面,而不是写入它们。

我想iostat看到了fstrim作为写作的操作(即使它不是写作)。你怎么认为?有没有更好的方法来监控我的磁盘?

注意:使用iotop不是答案,因为它不显示被杀死的进程的数据量。因此,iotop测量是不准确的。

Mar*_*ich 3

MB_wrtn 增加了 102574 MB。这是否意味着 fstrim 正在将 102574 MB = 100.2 GB 写入我的磁盘?

是的,就是这个意思。fstrim本质上查看块设备的每个块并确定该块是否正在被文件系统使用(即包含重要数据):

  • 块正在使用中:忽略它。
  • 块未使用:将此块的 ATA TRIM 命令发送到底层块设备。

完成后,修剪的块的数量应始终等于文件系统上的可用空间。fstrim每次运行时都会修剪每个空闲块,无论它过去是否已经被修剪过,因此如果您更频繁地运行它,它不会变得更快。

内核可能将 TRIM 命令视为写入命令,因此每个执行的 TRIM 命令都算作 4k 写入命令。

Trim 应该“标记”不包含有效数据的页面,而不是写入它们。

将块“标记”为已修剪相当于“写入”它们,因为它们的内容会发生变化。如果您不小心修剪了错误的块,您将丢失数据 - 就像将零写入错误的块会导致您丢失数据一样。