专栏名称: HULK一线技术杂谈
HULK是360的私有云平台,丰富的一线实战经验,为你带来最有料的技术分享
目录
相关文章推荐
Allen说懂TRO  ·  警惕!Poppy ... ·  15 小时前  
Allen说懂TRO  ·  警惕!Poppy ... ·  15 小时前  
半导体行业联盟  ·  DeepSeek爆火,梁文峰身家或超黄仁勋! ·  2 天前  
51好读  ›  专栏  ›  HULK一线技术杂谈

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

HULK一线技术杂谈  · 公众号  ·  · 2017-07-04 19:04

正文

女主宣言

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

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,获得类似如下的输出:

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委员会进行标准化,后续得到各大硬盘厂商的支持,大家约定了一份所有制造商都必须遵守共同的规则


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


例如下面的典型属性:


ID 英文名 中文译名 描述
0x01 Read Error Rate 底层数据读取错误率 存储器从一个硬盘表面读取数据时发生的错误率。原始值由于不同厂商的不同计算方法而有所不同,其十进制值往往无意义的
0x05 Reallocated Sector Count 重定位磁区计数 记录由于损坏而被映射到无损的后备区的扇区计数
0x09 Power-On Hours 硬盘加电时间 硬盘自出厂以来加电启动的统计时间,单位为小时(或根据制造商设定为分钟或秒)
0xBC Command Timeout 通信超时 由于无法连接至硬盘而终止操作的统计数,一般为0,如果远超过0,则可能电源问题,数据线接口氧化或更严重的问题
0xC4 Reallocation Event Count 重定位事件计数 记录已重映射扇区和可能重映射扇区的事件计数
0xC5 Current Pending Sector Count 等候重定的扇区计数 记录了不稳定的扇区的数量
0xC6 Uncorrectable Sector Count 无法校正的扇区计数 记录肯定出错的扇区数量

更多指标可以在这里找到: https://zh.wikipedia.org/wiki/S.M.A.R.T.

4

SMART的值:

  • VALUE: 当前值
    这是表格中最重要的信息之一,代表给定属性的标准化值,在1到253之间。253通常意味着最好情况,1意味着最坏情况。
    取决于属性和制造商,初始化VALUE可以被设置成100或200,但有些诸如温度等状态指标除外。


  • THRESH: 临界值
    临界值是硬盘厂商指定的表示某一项目可靠性的门限值,也称阈值,它通过特定公式计算而得。
    如果某个参数的当前值接近了临界值,就意味着硬盘将变得不可靠,可能导致数据丢失或者硬盘故障。


  • WORST: 最差值
    最差值是硬盘运行时各ID项当前值曾出现过的最坏值。
    最差值是对硬盘运行中某项数据变劣的峰值统计,该数值也会不断刷新。通常,
    最差值与当前值是相等的,如果最差值出现较大的波动(小于当前值),表明硬盘曾出现错误或曾经历过恶劣的工作环境(如温度)


  • RAW_VALUE: 数据值
    数据值是硬盘运行时各项参数的实测值,大部分SMART工具以十进制显示数据。
    数据值代表的意义随参数而定,大致可以分为三类:

    • 数据值并不直接反映硬盘状态,必须经过硬盘内置的计算公式换算成当前值才能得出结果

    • 数据值是直接累计的,如Start/Stop Count(启动/停止计数)

    • 有些参数的数据是即时数,如Temperature(温度)


硬盘的每项SMART信息中都有一个临界值(阈值),不同硬盘的临界值是不同的,SMART针对各项的当前值、最差值和临界值的比较结果以及数据值进行分析后,提供硬盘当前的评估状态,也是我们直观判断硬盘健康状态的重要信息。


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


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

  • 当Pre-failure/advisory BIT=0,并且当前值、最差值远大于临界值的情况下,为正常标志

  • 当Pre-failure/advisory BIT=0,并且当前值、最差值大于但接近临界值时,为警告标志

  • 当Pre-failure/advisory BIT=1,并且当前值、最差值小于临界值时,为故障或错误标志

因而平常监控项目中的 pre-fail值就是重点关注对象。


对于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 {







请到「今天看啥」查看全文