检查 SSD 在一段时间内的写入情况

检查 SSD 在一段时间内的写入情况

我想在 SSD 上安装 Ubuntu(我知道我必须设置 TRIM、noatime 等。)但我想知道是否可以检查过去一天/一周/一个月写入了多少 GB。

因为我想测量如果文件夹 /var 和 /tmp 位于 SSD 上,每天在 SSD 上写入多少 GB。如果每天写入量少于 10GB,我认为这很酷,并且不会对 SSD 造成太大损坏。

不,我不想使用 ramdisk :)

答案1

就像经常发生的那样,我跳过重做smartmontools包中已经存在的轮子。此包提供了大量用于硬盘和 SSD(或更专业的术语,SCSI 设备)的诊断工具。特别是,smartctl命令是我们正在寻找的:

$ sudo smartctl -A /dev/sda
[sudo] password for xieerqi: 
smartctl 6.5 2016-01-24 r4214 [x86_64-linux-4.4.0-65-generic] (local build)
Copyright (C) 2002-16, Bruce Allen, Christian Franke, www.smartmontools.org

=== START OF READ SMART DATA SECTION ===
SMART Attributes Data Structure revision number: 18
Vendor Specific SMART Attributes with Thresholds:
ID# ATTRIBUTE_NAME          FLAG     VALUE WORST THRESH TYPE      UPDATED  WHEN_FAILED RAW_VALUE
  5 Runtime_Bad_Block       0x0000   000   000   000    Old_age   Offline      -       0
  9 Power_On_Hours          0x0000   100   100   000    Old_age   Offline      -       8080
 12 Power_Cycle_Count       0x0000   100   100   000    Old_age   Offline      -       1419
171 Avail_OP_Block_Count    0x0000   100   100   000    Old_age   Offline      -       40907856
174 Pwr_Cycle_Ct_Unplanned  0x0000   100   100   000    Old_age   Offline      -       78
195 Total_Prog_Failures     0x0000   100   100   000    Old_age   Offline      -       0
196 Total_Erase_Failures    0x0000   100   100   000    Old_age   Offline      -       0
197 Total_Unc_Read_Failures 0x0000   100   100   000    Old_age   Offline      -       0
208 Average_Erase_Count     0x0000   100   100   000    Old_age   Offline      -       179
210 SATA_CRC_Error_Count    0x0000   100   100   000    Old_age   Offline      -       0
224 In_Warranty             0x0000   100   100   000    Old_age   Offline      -       1
233 Remaining_Lifetime_Perc 0x0000   095   095   000    Old_age   Offline      -       95
241 Host_Writes_GiB         0x0000   100   100   000    Old_age   Offline      -       3133
242 Host_Reads_GiB          0x0000   100   100   000    Old_age   Offline      -       2745
249 Total_NAND_Prog_Ct_GiB  0x0000   100   100   000    Old_age   Offline      -       301548705

上面显示的是我的 SSD 的属性列表。特别值得关注的是属性 241 (Host_Writes_GiB) 和 242 (Host_Reads_GiB)。这些值以 GiB 为单位(GiB 是计算机科学中的经典度量单位,以 1024 字节的幂为单位,在本例中为 1024^3,而不是 SI 单位的 10 的幂)。

据我所知,从底层来看,此实用程序会解析文件夹lifetime_write_kbytes中的实际文件/sys/fs。具体来说,在我的示例中:

$ cat /sys/fs/ext4/sda1/lifetime_write_kbytes              
4793857835

当然,这是一个命令行实用程序。如果你没有安装它(通过检查apt-cache policy smartmontools),那么通过安装它sudo apt-get install smartmontoolsGnome 磁盘实用程序作为 GUI 替代品并且它与 Ubuntu 一起提供。

然而,有几点需要注意:

  • SMART 信息必须由设备提供。如果设备比较便宜,并且没有此类信息,那么就需要重新设计轮子,就像我最初想通过监控/proc/diskstats文件做的那样。
  • 特定属性必须由设备提供。例如,在smartmontools 网站不提供此类信息。

还有一个小问题:显示的结果信息是读取/写入的总历史记录。因此,您无法提取过去 x 天内的读取/写入。至少到目前为止,smartctl我发现的所有工具都无法做到这一点。但是,您可以做的是安排一个每日cron任务,该任务将读取/sys/fs/ext4/sda1/lifetime_write_kbytes数据并将带有时间戳的数据附加到文件中。稍后,您可以减去差异以查看每天写入了多少。例如,此类命令的内容将是:

30 08 * * * bash -c '{ date; cat /sys/fs/ext4/sda1/lifetime_write_kbytes; echo ;} >> /home/user/my_disk_log.txt'

相关内容