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

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

例如下面的典型属性:

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

4

SMART的值:

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

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

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

整体流程并不复杂:

  • 目标脚本包含对磁盘设备的枚举,根据特征判定机器是否是 RAID,NVMe,对应执行megacli或其他厂商工具,并根据返回结果最终获取所有磁盘的S.M.A.R.T.信息。入库,落盘,进行后续的数据处理。
  • 对于普通磁盘,在出现重映射/重映射增加/Pending sectors/WARNING/FAILED等异常状态时对应发送app、邮件、短信、等各种等级的报警信息。
  • 对于SSD,收集磁盘磨损信息,并在达到特定级别的时候发送通知或报警。
  • 根据磁盘类型,工作时常,写入量,是否有重映射等指标,得出磁盘是否已经失效或临近失效。当已经即将/已经失效,发送邮件到OPS,并确认报修,尽可能避免可以预见的故障。

    总结

    存储作为最重要的硬件设施之一,直接关系到业务的质量,通过SMART技术,可以有效的避免非突发的磁盘故障。减少运维压力,
    在大规模的部署条件下,还可以收集磁盘故障率、寿命等相关信息,优化采购流程。
    同时,收集到的SMART信息,还可以结合线上服务压力,质量,来评估磁盘是否可靠,为预估和降低成本提供第一手数据,积累运维经验。
    服务质量保障不仅仅是高可用和故障及时切换,随着技术的创新,消灭可以预见的故障已经成为可能。

©著作权归作者所有:来自51CTO博客作者mob604756f04b77的原创作品,如需转载,请注明出处,否则将追究法律责任

更多相关文章

  1. 并非所有信息都是等价的:
  2. 人的认知特性与分析
  3. 磁盘那点事
  4. 某vSAN项目更换数据硬盘实录
  5. 基于web的机票管理系统设计与实现(二)
  6. docker socket文件打开数量过多分析
  7. 位置不可用无法访问磁盘结构损坏且无法读取 chkdsk无法修复. 不
  8. 移动硬盘在磁盘管理中显示没有初始化恢复资料办法
  9. Oracle Linux 7.9+Oracle 12c+ASM安装文档--4、添加ASM磁盘组

随机推荐

  1. Python时间使用指南.pdf
  2. 动画:面试必刷之二维数组中查找一个元素
  3. 为什么急功近利者往往赚不到钱?
  4. 入土系列 | 前端入门实战项目(八)
  5. 入土系列 | 前端入门项目实战 (一)
  6. 吊打面试官系列 | ES6 面试必问知识点(下)
  7. 图解:什么是图?
  8. 在B站外,我看到了另一批“后浪”!
  9. 故事:唐三藏西行之网络原理通信全过程
  10. 图解超经典的KNN算法 - 机器学习算法入门