使用 smartmontools 查看硬盘的健康状态
相信各界搞机人士都经历过磁盘损坏导致数据丢失的痛,博主家的 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!
这一行,博主这硬盘已经出现告警了,自检不通过。
这个结果是PASSED
或FAILED
。后者表示即将出现硬件故障,所以需要开始备份这块磁盘上的重要数据!
如果需要查看详细的报告信息,则执行:
[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.