其他分享
首页 > 其他分享> > 基于S.M.A.R.T.的磁盘健康监控

基于S.M.A.R.T.的磁盘健康监控

作者:互联网

基于S.M.A.R.T.的磁盘健康监控

PlatformDev 360云计算

女主宣言

磁盘是数据的重要载体之一,如果磁盘失效,则可能降低线上业务承载的容量,导致线上业务不稳定甚至出现宕机。要保证线上服务的稳定和高效,除了做好集群,异地容灾等措施外,磁盘健康状态的监控和预测也是重要的一个环节。本文主要介绍怎样对磁盘健康状况进行监控和预警。
PS:丰富的一线技术、多元化的表现形式,尽在“HULK一线技术杂谈”,点关注哦!

背景介绍

磁盘是数据的重要载体之一,如果磁盘失效,则可能降低线上业务承载的容量,导致线上业务不稳定甚至出现宕机。要保证线上服务的稳定和高效,除了做好集群,异地容灾等措施外,磁盘健康状态的监控和预测也是重要的一个环节。

S.M.A.R.T.,全称为“Self-Monitoring Analysis and Reporting Technology”,即“自我监测、分析及报告技术”,是一种自动的硬盘状态检测与预警系统和规范。通过在硬盘硬件内的检测指令对硬盘的硬件如磁头、盘片、马达、电路的运行情况进行监控、记录并与厂商所设定的预设安全值进行比较,若监控情况将或已超出预设安全值的安全范围,就可以通过主机的监控硬件或软件自动向用户作出警告并进行轻微的自动修复,以提前保障硬盘数据的安全。除一些出厂时间极早的硬盘外,现在大部分硬盘均配备该项技术。

可以通过对S.M.A.R.T.信息的抓取监控和分析,监测磁盘健康状态,估测磁盘故障时间,随时对即将故障的磁盘采取相应替换措施,保证线上服务的稳定运行。

smartctl

smartctl是linux下查看磁盘S.M.A.R.T.信息的工具。它其实是smartmontools的一部分,默认并不会安装,对于CentOS,可以执行yum install smartmontools进行安装。

安装后,就可以通过smartctl查看磁盘的各种信息了,值得一提的是,smartmontools也支持查看连接在主流RAID方案下的磁盘信息,新版本(6.5及以上版本)也实验性地支持NVMe和一些其他PCI-E磁盘的S.M.A.R.T.信息查看。

smartmontools还包括smartd,它可以经过配置,自动、间隔时间执行smart信息的监控和收集,并且可以在执行后或发现异常等情况下,以邮件形式发送通知。

其实还可以通过 smartctl -t等对磁盘进行检测。但业务上线后,应该避免对磁盘进行长时间的检测。

1

发现磁盘

一般可以通过fdisk -l 来列出机器上的磁盘,然而服务器上一般很少有磁盘不通过RAID卡直接连接到控制器上,通过fdisk -l看到的诸如/dev/sdX的磁盘,直接通过smartctl -a /dev/sdX 并不能查看到磁盘的S.M.A.R.T.信息,而一般只有几行冷冰冰的文字

告诉你改磁盘不支持S.M.A.R.T.不过值得庆幸的是smartctl也支持对raid卡下磁盘S.M.A.R.T.信息的读取。而且几乎市面上主流的RAID卡也都涵盖了。通过smartctl -h 可以看到:


-d TYPE, --device=TYPE
Specify device type to one of: ata, scsi, sat[,auto][,N][+TYPE], usbcypress[,X], usbjmicron[,p][,x][,N], usbsunplus, marvell, areca,N/E, 3ware,N, hpt,L/M/N, megaraid,N, cciss,N, auto, test

例如对接在DELL PERC H710(实际上解决方案是LSI MegaRAID)上的磁盘,可以通过如下方式获取到S.M.A.R.T.信息:


smartctl -? /dev/sda -d sat+megaraid,0

其中 ? 可以替换成smartctl 支持的参数选项,而megaraid后面对应的磁盘ID 0,可以通过megacli工具通过-PDList -aALL获取到。

在实际系统运维中,可以通过脚本处理megacli的输出,再通过smartcli监控磁盘的状态。

而对于NVMe磁盘,smartcli已经支持S.M.A.R.T.信息的读取和分析,但有些品牌的磁盘,可能还要依赖厂商的工具来进行读取和分析。

2

smartctl参数


-h                      显示帮助
-i                      显示磁盘的基础信息
-a                      显示磁盘的所有S.M.A.R.T.信息
-x                      显示磁盘的所有信息,这个内容是相当的全
-d                      设置磁盘设备的类型(ata设备,还是某些raid卡型号)
-s                      设置开启/关闭S.M.A.R.T.

其他诸如容错级别,测试等等功能,对于一般监控来说用不到,同时smartctl -h后列出的帮助信息可以说是非常良心,基本已经涵盖了基础使用的样例。

对于一般监控,比较常见的策略是执行smartctl -a /dev/sdX并通收集数据,落盘,分析各指标是否有异常,是否已经接近临界值,从而针对性的发送警报或汇总。

3

S.M.A.R.T.指标

以一块Intel 520为例,执行smartctl -a,获得类似如下的输出:
基于S.M.A.R.T.的磁盘健康监控
smartctl在执行之后会有一个总体的判定 PASSED 或者 FAILED,即有没有通过S.M.A.R.T.检测。即:


SMART overall-health self-assessment test result: PASSED
Warning: This result is based on an Attribute check.

同时,也会告知你,这个PASSED 还是 FAILED,是根据S.M.A.R.T.特定属性的判定得出的。

言外之意具体怎么样,您还需要再过目。
但一般来说,如果这个都FAILED了,这快盘八成是快要挂了。所以一旦出现FAILED,是很严重的问题,尽可能的备份数据,换盘。

对于不同厂商的不同磁盘,S.M.A.R.T.具体信息可能都不相同,甚至有些指标的编号都不相同。但大多数通用指标,大家是相同的。

Compaq于1995早期将S.M.A.R.T.的前身技术方案提交到SFF委员会进行标准化,后续得到各大硬盘厂商的支持,大家约定了一份所有制造商都必须遵守共同的规则

同时,各制造商也会根据自己需要添加一些自己专有的检测属性。

例如下面的典型属性:
基于S.M.A.R.T.的磁盘健康监控
更多指标可以在这里找到: https://zh.wikipedia.org/wiki/S.M.A.R.T.

4

SMART的值:

根据SMART的规定,状态一般有正常、警告、故障或错误三种状态。

SMART判定这三个状态与SMART的 Pre-failure/advisory BIT(预测错误/发现位)参数的赋值密切相关:

对于Old_age类型,一般来说,是一些统计状况值,并不能直接反映磁盘是否或即将出现失效。

但有些数据项,也可以间接的反映出磁盘是否临近失效,例如249 NAND Writes GB,虽然磁盘出现了重映射,但NAND Writes GB还富裕好多的时候,可以考虑忽略重映射,

亦或NAND Writes GB已经接近NAND白皮书提供的寿命,但磁盘依旧坚挺,这时候也应该考虑更换磁盘了。

信息收集和监控报警

1

磁盘信息数据库

每个厂家的 S.M.A.R.T.信息都不尽相同,尤其是在SSD成为标配的今天,S.M.A.R.T.更成为监控磁盘剩余寿命的最重要的指标。

由于磁盘的多样性,磁盘S.M.A.R.T.信息也不尽相同,类似的指标,在不同型号的磁盘上可能对应到不同的ID,这就导致收集S.M.A.R.T.信息需要对磁盘品牌,型号,甚至固件版本进行适配。

但绝大多数时候不会允许我们直接登录线上机器收集S.M.A.R.T.信息,但我们的脚本又要精确的对各个属性进行匹配。好消息是smartctl 提供了一个S.M.A.R.T.信息的数据库。

里面包含了各种磁盘型号,固件的 S.M.A.R.T. ID对应的指标含义。并且用户可以看到,阅读,甚至编辑。

smartctl 也允许用户在执行的时候手工指定这个数据库文件。只要是符合smartctl能够读取的数据库格式即可。

可以通过 smartctl -h 看到系统默认的数据库文件位置。

例如:
/var/lib/smartmontools/drivedb/drivedb.h

drivedb.h 以如下结构保存相应的信息:


struct drive_settings {
 const char * modelfamily;
 const char * modelregexp;
 const char * firmwareregexp;
 const char * warningmsg;
 const char * presets;};

ModelFamily: 磁盘型号族,例如上面的 Intel 520,如果设置为$开头,忽略。
ModelRegexp: 匹配型号的正则表达式,不能为空。
FirmwareRegexp: 固件匹配正则表达式,可以为空,为空时不进行固件匹配。否则进行固件匹配以缩小适配的磁盘集合。
WarningMsg: 警告信息,当用户的磁盘刚好在匹配的结果内,显示此信息。
presets: S.M.A.R.T. 含义定义,以-v开头。

截取其中的一段:


{ "Intel 520 Series SSDs", // tested with INTEL SSDSC2CW120A3/400i, SSDSC2BW480A3F/400i
 "INTEL SSDSC2[BC]W(060|120|180|240|480)A3F?",
 "", "",
//"-v 5,raw16(raw16),Reallocated_Sector_Ct "
 "-v 9,msec24hour32,Power_On_Hours_and_Msec "
//"-v 12,raw48,Power_Cycle_Count "
 "-v 170,raw48,Available_Reservd_Space "
 "-v 171,raw48,Program_Fail_Count "
 "-v 172,raw48,Erase_Fail_Count "
 "-v 174,raw48,Unexpect_Power_Loss_Ct "
//"-v 184,raw48,End-to-End_Error "
 "-v 187,raw48,Uncorrectable_Error_Cnt "
//"-v 192,raw48,Power-Off_Retract_Count "
 "-v 225,raw48,Host_Writes_32MiB "
 "-v 226,raw48,Workld_Media_Wear_Indic "
 "-v 227,raw48,Workld_Host_Reads_Perc "
 "-v 228,raw48,Workload_Minutes "
//"-v 232,raw48,Available_Reservd_Space "
//"-v 233,raw48,Media_Wearout_Indicator "
 "-v 241,raw48,Host_Writes_32MiB "
 "-v 242,raw48,Host_Reads_32MiB "
 "-v 249,raw48,NAND_Writes_1GiB"},

除了通用值之外,Intel 520系列的特殊值都已经在这里了。如果用户在执行smartctl的时候手工再指定 -v 参数,对应的数据会覆盖drivedb.h中的含义设定。
这些信息还可以在实际执行smartctl收集到数据之前,就能够编写相应的收集脚本。

2

自动化收集,分析和预测

可以通过smartd进行自动的数据收集,检测到数据异常后给相关运维人员发送邮件提醒。但smartd可定制性不高,因而线上并没有采用smartd。

依托命令执行系统qcmd,可以在全量机器上分时,分批,执行单个命令或多个脚本,并将执行结果统一进行收集,分析。相对计划的数据采集,这种方式更为灵活。并且可以在脚本进行流程控制,数据处理等。

整体流程并不复杂:

标签:基于,smartctl,信息,SMART,监控,磁盘,raw48,硬盘
来源: https://blog.51cto.com/15127564/2668949