相信各界搞机人士都经历过磁盘损坏导致数据丢失的痛,博主家的 NAS 就曾经坏了一块 3T 硬盘,数据尽失,那个痛啊!此后,博主家的 NAS 就改成了 RAID 1。

Too young,too simple. RAID 1 虽然允许坏一块硬盘,但如果你都不知道它什么时候坏了,等两块都坏了那就真的无力回天了。

为了避免遇到这种困境,用户可以试用一款叫做 smartmontools 的软件包程序,它通过使用自我监控(Self-Monitoring)、分析(Analysis)和报告(Reporting)三种技术(缩写为S.M.A.R.T.或SMART)来管理和监控存储硬件。如今大部分的ATA/SATA、SCSI/SAS和固态硬盘都搭载内置的SMART系统。SMART的目的是监控硬盘的可靠性、预测磁盘故障和执行各种类型的磁盘自检。smartmontools由smartctl和smartd两部分工具程序组成,它们一起为Linux平台提供对磁盘退化和故障的高级警告。

安装 Smartmontools

[root@localhost ~]# yum install -y smartmontools

使用 smartctl 检测硬盘的健康状况

[root@localhost ~]# smartctl --info /dev/sdc

smartctl 6.5 2016-05-07 r4318 [x86_64-linux-3.10.0-957.5.1.el7.x86_64] (local build)
Copyright (C) 2002-16, Bruce Allen, Christian Franke, www.smartmontools.org

=== START OF INFORMATION SECTION ===
Model Family:     Seagate Barracuda 7200.14 (AF)
Device Model:     ST500DM002-1BD142
Serial Number:    W2AL00M0
LU WWN Device Id: 5 000c50 05ccf9cc4
Firmware Version: KC45
User Capacity:    500,107,862,016 bytes [500 GB]
Sector Sizes:     512 bytes logical, 4096 bytes physical
Rotation Rate:    7200 rpm
Device is:        In smartctl database [for details use: -P show]
ATA Version is:   ATA8-ACS T13/1699-D revision 4
SATA Version is:  SATA 3.0, 6.0 Gb/s (current: 6.0 Gb/s)
Local Time is:    Mon Mar 18 15:03:42 2019 CST
SMART support is: Available - device has SMART capability.
SMART support is: Enabled

这仅是磁盘的一些信息,如果需要查看 S.M.A.R.T.,需执行:

[root@localhost ~]# smartctl -H /dev/sdc

smartctl 6.5 2016-05-07 r4318 [x86_64-linux-3.10.0-957.5.1.el7.x86_64] (local build)
Copyright (C) 2002-16, Bruce Allen, Christian Franke, www.smartmontools.org

=== START OF READ SMART DATA SECTION ===
SMART overall-health self-assessment test result: FAILED!
Drive failure expected in less than 24 hours. SAVE ALL DATA.
Failed Attributes:
ID# ATTRIBUTE_NAME          FLAG     VALUE WORST THRESH TYPE      UPDATED  WHEN_FAILED RAW_VALUE
  5 Reallocated_Sector_Ct   0x0033   002   002   036    Pre-fail  Always   FAILING_NOW 32280

特别需要关注 SMART overall-health self-assessment test result: FAILED! 这一行,博主这硬盘已经出现告警了,自检不通过。

这个结果是PASSEDFAILED。后者表示即将出现硬件故障,所以需要开始备份这块磁盘上的重要数据!

如果需要查看详细的报告信息,则执行:

[root@localhost ~]# smartctl -a /dev/sdc

--- 省略部分输出内容 ---
SMART Attributes Data Structure revision number: 10
Vendor Specific SMART Attributes with Thresholds:
ID# ATTRIBUTE_NAME          FLAG     VALUE WORST THRESH TYPE      UPDATED  WHEN_FAILED RAW_VALUE
  1 Raw_Read_Error_Rate     0x000f   105   099   006    Pre-fail  Always       -       10318688
  3 Spin_Up_Time            0x0003   100   097   000    Pre-fail  Always       -       0
  4 Start_Stop_Count        0x0032   100   100   020    Old_age   Always       -       604
  5 Reallocated_Sector_Ct   0x0033   002   002   036    Pre-fail  Always   FAILING_NOW 32280
  7 Seek_Error_Rate         0x000f   081   060   030    Pre-fail  Always       -       8888905893
  9 Power_On_Hours          0x0032   091   091   000    Old_age   Always       -       8194
 10 Spin_Retry_Count        0x0013   100   100   097    Pre-fail  Always       -       0
 12 Power_Cycle_Count       0x0032   100   100   020    Old_age   Always       -       586
183 Runtime_Bad_Block       0x0032   100   100   000    Old_age   Always       -       0
184 End-to-End_Error        0x0032   100   100   099    Old_age   Always       -       0
187 Reported_Uncorrect      0x0032   100   100   000    Old_age   Always       -       0
188 Command_Timeout         0x0032   100   100   000    Old_age   Always       -       0 0 1
189 High_Fly_Writes         0x003a   100   100   000    Old_age   Always       -       0
190 Airflow_Temperature_Cel 0x0022   069   057   045    Old_age   Always       -       31 (Min/Max 23/31)
194 Temperature_Celsius     0x0022   031   043   000    Old_age   Always       -       31 (0 11 0 0 0)
195 Hardware_ECC_Recovered  0x001a   056   023   000    Old_age   Always       -       10318688
197 Current_Pending_Sector  0x0012   100   100   000    Old_age   Always       -       0
198 Offline_Uncorrectable   0x0010   100   100   000    Old_age   Offline      -       0
199 UDMA_CRC_Error_Count    0x003e   200   200   000    Old_age   Always       -       0
240 Head_Flying_Hours       0x0000   100   253   000    Old_age   Offline      -       8197h+48m+17.746s
241 Total_LBAs_Written      0x0000   100   253   000    Old_age   Offline      -       2857884957
242 Total_LBAs_Read         0x0000   100   253   000    Old_age   Offline      -       3019366102
--- 省略部分输出内容 ---

需要特别关注上面这部分内容,这些是描述 S.M.A.R.T. 各个项目的监控状态。

  • ID:属性ID,通常是一个1到255之间的十进制或十六进制的数字。
  • ATTRIBUTE_NAME:硬盘制造商定义的属性名。
  • FLAG:属性操作标志(可以忽略)。
  • VALUE:这是表格中最重要的信息之一,代表给定属性的标准化值,在1到253之间。253意味着最好情况,1意味着最坏情况。取决于属性和制造商,初始化VALUE可以被设置成100或200.
  • WORST:所记录的最小VALUE。
  • THRESH:在报告硬盘FAILED状态前,WORST可以允许的最小值。
  • TYPE:属性的类型(Pre-fail或Oldage)。Pre-fail类型的属性可被看成一个关键属性,表示参与磁盘的整体SMART健康评估(PASSED/FAILED)。如果任何Pre-fail类型的属性故障,那么可视为磁盘将要发生故障。另一方面,Oldage类型的属性可被看成一个非关键的属性(如正常的磁盘磨损),表示不会使磁盘本身发生故障。
  • UPDATED:表示属性的更新频率。Offline代表磁盘上执行离线测试的时间。
  • WHEN_FAILED:如果VALUE小于等于THRESH,会被设置成“FAILING_NOW”;如果WORST小于等于THRESH会被设置成“In_the_past”;如果都不是,会被设置成“-”。在“FAILING_NOW”情况下,需要尽快备份重要文件,特别是属性是Pre-fail类型时。“In_the_past”代表属性已经故障了,但在运行测试的时候没问题。“-”代表这个属性从没故障过。
  • RAW_VALUE:制造商定义的原始值,从VALUE派生。

更多 S.M.A.R.T. 属性信息请参考维基百科 https://zh.wikipedia.org/wiki/S.M.A.R.T.

你也许会想:这要人为去查看才能知道 S.M.A.R.T. 状态,有没有自动检测,发现问题就发邮件通知的机制呢?

smartmontools 也为用户想到了这点,自带了 smartd 守护程序,只需要做简单的配置,就可以实现上述功能。

配置文件位于:/etc/smartmontools/smartd.conf

默认只有一条配置,简单修改看一下:

DEVICESCAN -H -m root -M exec /usr/libexec/smartmontools/smartdnotify -n standby,10,q

这个配置的意思是扫描所有磁盘设备,如发现 SMART 告警,则执行 /usr/libexec/smartmontools/smartdnotify ,这是一个 shell 脚本,功能是发送邮件给 root 用户和把信息发给在线的 tty 终端。

如果需要发送给其他邮箱地址,则简单修改一下即可:

DEVICESCAN -a -m youmail@domain -M daily
  • -m :指定发送测试报告到某个电子邮件地址。这里可以是系统用户比如root,或者如果服务器已经配置成发送电子邮件到系统外部,则是类似于[email protected]的邮件地址。
  • -M :指定发送邮件报告的期望类型。

    • once:为检测到的每种磁盘问题只发送一封警告邮件。
    • daily:为检测到的每种磁盘问题每隔一天发送一封额外的警告提醒邮件。
    • diminishing:为检测到的每种问题发送一封额外的警告提醒邮件,开始是每隔一天,然后每隔两天,每隔四天,以此类推。每个间隔是前一次间隔的2倍。
    • test:只要smartd一启动,立即发送一封测试邮件。
    • exec PATH:取代默认的邮件命令,运行PATH路径下的可执行文件。PATH必须指向一个可执行的二进制文件或脚本。当检测到一个问题时,可以指定执行一个期望的动作(闪烁控制台、关闭系统等等)。

收到邮件的信息如下:

标题:SMART error (Health) detected on host: localhost
发件人:root <[email protected]>
收件人:youmail@domain

邮件正文:
This message was generated by the smartd daemon running on:

   host name:  localhost
   DNS domain: localdomain

The following warning/error was logged by the smartd daemon:

Device: /dev/sdc [SAT], FAILED SMART self-check. BACK UP DATA NOW!

Device info:
ST500DM002-1BD142, S/N:W2AL00M0, WWN:5-000c50-05ccf9cc4, FW:KC45, 500 GB

For details see host's SYSLOG.

You can also use the smartctl utility for further investigation.
Another message will be sent in 24 hours if the problem persists.

标签: S.M.A.R.T.

添加新评论