PlatformDev 360云计算linux
磁盘是数据的重要载体之一,若是磁盘失效,则可能下降线上业务承载的容量,致使线上业务不稳定甚至出现宕机。要保证线上服务的稳定和高效,除了作好集群,异地容灾等措施外,磁盘健康状态的监控和预测也是重要的一个环节。本文主要介绍怎样对磁盘健康情况进行监控和预警。
PS:丰富的一线技术、多元化的表现形式,尽在“HULK一线技术杂谈”,点关注哦!正则表达式
磁盘是数据的重要载体之一,若是磁盘失效,则可能下降线上业务承载的容量,致使线上业务不稳定甚至出现宕机。要保证线上服务的稳定和高效,除了作好集群,异地容灾等措施外,磁盘健康状态的监控和预测也是重要的一个环节。 数据库
S.M.A.R.T.,全称为“Self-Monitoring Analysis and Reporting Technology”,即“自我监测、分析及报告技术”,是一种自动的硬盘状态检测与预警系统和规范。经过在硬盘硬件内的检测指令对硬盘的硬件如磁头、盘片、马达、电路的运行状况进行监控、记录并与厂商所设定的预设安全值进行比较,若监控状况将或已超出预设安全值的安全范围,就能够经过主机的监控硬件或软件自动向用户做出警告并进行轻微的自动修复,以提早保障硬盘数据的安全。除一些出厂时间极早的硬盘外,如今大部分硬盘均配备该项技术。 安全
能够经过对S.M.A.R.T.信息的抓取监控和分析,监测磁盘健康状态,估测磁盘故障时间,随时对即将故障的磁盘采起相应替换措施,保证线上服务的稳定运行。服务器
smartctl是linux下查看磁盘S.M.A.R.T.信息的工具。它实际上是smartmontools的一部分,默认并不会安装,对于CentOS,能够执行yum install smartmontools进行安装。 app
安装后,就能够经过smartctl查看磁盘的各类信息了,值得一提的是,smartmontools也支持查看链接在主流RAID方案下的磁盘信息,新版本(6.5及以上版本)也实验性地支持NVMe和一些其余PCI-E磁盘的S.M.A.R.T.信息查看。 运维
smartmontools还包括smartd,它能够通过配置,自动、间隔时间执行smart信息的监控和收集,而且能够在执行后或发现异常等状况下,以邮件形式发送通知。 ide
其实还能够经过 smartctl -t等对磁盘进行检测。但业务上线后,应该避免对磁盘进行长时间的检测。工具
通常能够经过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.信息的读取和分析,但有些品牌的磁盘,可能还要依赖厂商的工具来进行读取和分析。
-h 显示帮助 -i 显示磁盘的基础信息 -a 显示磁盘的全部S.M.A.R.T.信息 -x 显示磁盘的全部信息,这个内容是至关的全 -d 设置磁盘设备的类型(ata设备,仍是某些raid卡型号) -s 设置开启/关闭S.M.A.R.T.
其余诸如容错级别,测试等等功能,对于通常监控来讲用不到,同时smartctl -h后列出的帮助信息能够说是很是良心,基本已经涵盖了基础使用的样例。
对于通常监控,比较常见的策略是执行smartctl -a /dev/sdX并通收集数据,落盘,分析各指标是否有异常,是否已经接近临界值,从而针对性的发送警报或汇总。
以一块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委员会进行标准化,后续获得各大硬盘厂商的支持,你们约定了一份全部制造商都必须遵照共同的规则
同时,各制造商也会根据本身须要添加一些本身专有的检测属性。
例以下面的典型属性:
更多指标能够在这里找到: https://zh.wikipedia.org/wiki/S.M.A.R.T.
VALUE: 当前值
这是表格中最重要的信息之一,表明给定属性的标准化值,在1到253之间。253一般意味着最好状况,1意味着最坏状况。
取决于属性和制造商,初始化VALUE能够被设置成100或200,但有些诸如温度等状态指标除外。
HRESH: 临界值
临界值是硬盘厂商指定的表示某一项目可靠性的门限值,也称阈值,它经过特定公式计算而得。
若是某个参数的当前值接近了临界值,就意味着硬盘将变得不可靠,可能致使数据丢失或者硬盘故障。
WORST: 最差值
最差值是硬盘运行时各ID项当前值曾出现过的最坏值。
最差值是对硬盘运行中某项数据变劣的峰值统计,该数值也会不断刷新。一般,
最差值与当前值是相等的,若是最差值出现较大的波动(小于当前值),代表硬盘曾出现错误或曾经历过恶劣的工做环境(如温度)
硬盘的每项SMART信息中都有一个临界值(阈值),不一样硬盘的临界值是不一样的,SMART针对各项的当前值、最差值和临界值的比较结果以及数据值进行分析后,提供硬盘当前的评估状态,也是咱们直观判断硬盘健康状态的重要信息。
根据SMART的规定,状态通常有正常、警告、故障或错误三种状态。
SMART断定这三个状态与SMART的 Pre-failure/advisory BIT(预测错误/发现位)参数的赋值密切相关:
对于Old_age类型,通常来讲,是一些统计情况值,并不能直接反映磁盘是否或即将出现失效。
但有些数据项,也能够间接的反映出磁盘是否临近失效,例如249 NAND Writes GB,虽然磁盘出现了重映射,但NAND Writes GB还富裕好多的时候,能够考虑忽略重映射,
亦或NAND Writes GB已经接近NAND白皮书提供的寿命,但磁盘依旧坚挺,这时候也应该考虑更换磁盘了。
每一个厂家的 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收集到数据以前,就可以编写相应的收集脚本。
能够经过smartd进行自动的数据收集,检测到数据异常后给相关运维人员发送邮件提醒。但smartd可定制性不高,于是线上并无采用smartd。
依托命令执行系统qcmd,能够在全量机器上分时,分批,执行单个命令或多个脚本,并将执行结果统一进行收集,分析。相对计划的数据采集,这种方式更为灵活。而且能够在脚本进行流程控制,数据处理等。
总体流程并不复杂:
存储做为最重要的硬件设施之一,直接关系到业务的质量,经过SMART技术,能够有效的避免非突发的磁盘故障。减小运维压力, 在大规模的部署条件下,还能够收集磁盘故障率、寿命等相关信息,优化采购流程。 同时,收集到的SMART信息,还能够结合线上服务压力,质量,来评估磁盘是否可靠,为预估和下降成本提供第一手数据,积累运维经验。 服务质量保障不只仅是高可用和故障及时切换,随着技术的创新,消灭能够预见的故障已经成为可能。