在机械硬盘技术极为成熟的当下,硬盘损坏对普通消费者来说似乎越来越遥远,我自己用的一台 X200 笔记本从 2009 年买来用到现在,那块日立硬盘一点问题都没出过,好像都没有理由换笔记本了嘤嘤嘤……
不过残酷的现实是,对于商业应用来说,消费级硬盘的可靠性仍然是一个需要关注的问题,特别是如BlackBlaze 那样使用消费级硬盘来搭建存储系统的系统。
对 UPYUN 来说,虽然我们核心系统并未使用消费级存储设备,但外围系统快速增长,数量庞大的硬盘开始对运维部门精简的人员数量造成了巨大的压力,因为普通的“损坏-更换”的方式造成的事务堆积和时间碎片化使得人员精力分散,不堪重负。
于是本文的主题诞生了,在一系列调查和统计数据的支撑下,当然还要感谢万能的 Google ,我们最终有效的解决了这方面问题。
S.M.A.R.T. 信息是 UPYUN 监控硬盘的极为重要的指标,我们能通过它对硬盘底层的健康状况进行诊断甚至预测,从而在硬盘故障前就将其从业务系统中摘除,避免影响线上服务。
同时也能通过它对存储装置的异常原因进行诊断,可判断因素包括温度、震动、机件故障、瞬间冲击等,是运维工作中不可替代的存储系统底层检测方式。
我提取了部分线上机器共 3047 块硬盘的 S.M.A.R.T. 的数据用于研究分析,并以这些原始数据为基础总结了一些能有效判定硬盘健康程度的项目。
根据过滤无效数据后的 61511 条数据,我们将一些项目作为了系统剔除硬盘的异常判断依据,以及预测硬盘是否需要更换的依据。
我们根据关键的硬盘监控数据将硬盘的健康状况分为下面几级。
硬盘健康级别
Good 「健康」级
该级别的硬盘非常健康,无任何风险存在,通常为全新上线的硬盘,对于标记为 Good 的硬盘,不会有任何问题存在,也无需留意和监控。
特征界定:所有风险判断项均为 0 或关键原始数据增长情况低于「报告」标准。
Caution 「报告」级
健康状况为 Caution 「报告」的硬盘,在监控指标上存在一定程度的劣化,但是尚在硬盘主控的安全范围,主控芯片可有效的处理异常并在性能上没有任何明显衰退迹象,它还能承担很长时间的正常服务,但是有必要考虑它的健康状况随时可能提升到警戒级别。
特征界定:任一风险项满足「报告」标准。
Threatening 「警戒」级
健康状况为 Threatening 「警戒」的硬盘,已经存在一定的性能衰退风险,因为已经开始有一些主控芯片无法控制的情况发生,它的性能可能也已经有些微下降,它的健康状况正在逐步脱离主控系统的控制,应当发出告警通知到运维人员并考虑尽快从业务系统中摘除该硬盘进行替换,避免它进入衰退级别时还在进行线上服务。
特征界定:任一风险项满足「警戒」标准
处理动作:人力允许的情况下安排更换硬盘,从警戒告警发出到进入衰退期通常有足够的时间进行硬盘替换。如果意外进入衰退期,系统也会自动将其从业务系统中隔离。
Decline 「衰退」级
健康状况为 Decline 「衰退」的硬盘,不应该在线上服役,原则上处于警戒级别的硬盘就应该被更换,因为「衰退」的硬盘用于线上服务时已经有很大的可能对业务系统的整体运行造成威胁,通常表现为业务系统性能下降,数据读写出错和超时等,但刚刚进入「衰退」级别的硬盘通常不会产生系统级别的错误,只能从性能下降角度判断它存在性能衰退的情况。
特征界定:任一风险项满足「衰退」标准
处理动作:系统会自动将其从业务系统中剔除,但如因各种原因暂时无法更换,则应尽快在物理上将其断开和设备的连接,避免硬盘状态接近「灾难」级而导致系统出现异常(例如进程卡死)。
Disaster 「灾难」级
健康状况为 Disaster 「灾难」的硬盘通常不会在任何线上系统中出现。在硬盘分级机制启用后,理论上会出现「灾难」级硬盘的情况只有剧烈冲击或突然掉电或电流冲击导致的硬盘瞬间损坏以及 S.M.A.R.T. 芯片故障导致的无法读取。该级别的硬盘完全无法工作。
特征界定:
- 满足多项「衰退」的特征。
- 或 S.M.A.R.T. 信息无法读取。
- 存在大量系统级告警或干脆无法识别。
处理动作:更换它!
S.M.A.R.T. 关键监控项详解
Raw_Read_Error_Rate
原始读取错误率
ID:1,告警项:
「报告」:巡检 / Patrol.
- 阈值:单位时间内极高增长率
- 说明:从硬盘读取原始数据时的错误率。一个非零值表示磁盘表面或读写磁头有问题。
- 影响:该项数据大幅度增加通常说明硬盘年事已高,应当考虑预备从线上环境替换下来,但短期内不会有太大问题,只是会一定程度上影响性能,而该值增长率非常大的情况下也可能较大程度的影响硬盘性能。
由于各厂商对该值定义不同,该值增加情况和硬盘工作状况也不存在强关联性,所以不作为警戒和衰退等级界定要素。
Seek_Error_Rate
寻道错误率
ID:7,告警项:
「报告」:巡检 / Patrol.
- 阈值:单位时间内极高增长率
- 说明:定位数据时的错误频率
- 影响:该项数据大幅度增加时,硬盘性能有一定影响,但还可以正常工作,不会立马嗝屁,但存在一定风险,该项数据和原始读取错误率同时上涨的情况下,硬盘可能发生机械性能衰退,声音变大,震动加剧,甚至产生难听的噪声,应当考虑尽快替换或退役。
由于各厂商对该值定义不同,该值增加情况和硬盘工作状况也不存在强关联性,所以不作为警戒和衰退等级界定要素。
Reallocated_Sector_Ct
重分配扇区计数
ID:5,告警项:
「警戒」:性能衰退 / Performance decline.
「衰退」:数据风险 / High Data Risk.
- 阈值:「警戒」非 0
- 说明:当硬盘发现一个读/写/验证错误,它会标记扇区为 "Reallocated" 并移动数据到一个保留区
- 影响:硬盘状况已经恶化到不单单主要影响性能,甚至发生数据完整性风险的程度,它已经不用抢救了,应当立即更换或退役,这时它依然还可以依靠主控系统的努力坚持一段时间,但风险已经增加到不可控的程度。
Unexpect_Power_Loss_Ct / Power-off Retract Count / Emergency Retract Cycle Count
异常断电计数
ID:174 / 192,告警项:
「报告」:侦测到核心供电异常 / Core Power Interruption Detected.
- 阈值:增加
- 说明:检测到该值增长应检查设备是否存在电源故障或供电异常
- 影响:该计数值增加通常表明设备经历了一次异常关机,如果是单个硬盘发生该项告警,则应考虑线缆或主板故障,监控该值的意义主要是判断设备供电故障而非异常关机,因为外部检测系统能更快的发现异常关机。
Wear_Leveling_Count
颗粒平均擦写次数
ID:177,告警项:
「警戒」:寿命将尽 / Disk Is Dying.
「衰退」:回天乏术 / Disk Is Dead.
阈值:
警戒级 WORST 数据(非 RAW )低于15;
衰退级 WORST 数据(非 RAW )为 小于等于 1 .说明:SSD 特有项,用于评估 SSD 寿命,因厂商评估标准不同,故不以 RAW VALUE 为标准。
影响:硬盘进入警戒级时应考虑更换它,因为该项降为 0 和硬盘工作情况不存在强关联性,但即便各项指标均无异常,也不推荐在线上使用时超期服役。
一般认为该值为零时,已达到硬盘设计使用寿命。
Runtime_Bad_Block
运行时坏块计数
ID:183,告警项:
「报告」:安定度下降 / Stability declining.
- 阈值:报告级:大于 1
- 说明:这个值代表硬盘运行时出现的坏块数量,通常该值为零。
- 影响:该值和硬盘运行状况不存在强关联,该值意味着运行时遇到坏块,但是对于 NAND 存储装置来说,坏块不像机械硬盘那么敏感,主控能很好的处理这些问题,但是该值和硬盘可靠及稳定性相关,需要密切关注。
根据统计数据来看,线上所有 SSD 该值增长的数量非常少。具体对可靠性和性能的影响还需后续观察,所以先置为报告级监控项。
End-to-End_Error
端到端校验错误
ID:184,告警项:
「报告」:传输介质异常 / Transmission Medium Fucked Up.
- 阈值:一个非 0 值
- 说明:主机和硬盘间的数据传输校验出错计数。
- 影响:这个值极为少见,我用于测试的全部 3000 多块硬盘中无一出现该值。根据资料来看,该值增长一般情况下是传输介质例如 SATA 线或者接口存在问题。可尝试重新拔插或者更换传输线。
因没有发现案例,所以该项目前是置为报告级的。
Reported_Uncorrect
无法恢复的错误
ID:187,告警等级:
衰退:侦测到数据风险 / High Data Risk.
- 说明:该项值非零既代表硬盘已经出现较为严重的问题,它代表着主控已经确认无法以包括硬件 ECC 在内的任何手段纠正的错误开始出现。
- 影响:这样的硬盘应立刻安排替换而不应继续使用。
COMMAND_TIMEOUT
指令超时
ID:188,告警等级:
「警戒」:性能衰退 / Performance decline.
「衰退」:严重性能衰退风险 / High Performance Risk.
「灾难」:别闹 / Performance is gone.
阈值:
警戒级:非 0
衰退级:高于 10
灾难级:高于 1000000说明:该项值非零并持续增长表明硬盘响应能力下降,性能受严重影响。
影响:需要即刻更换,但因该值刚开始上升时不会发生严重错误,从而可能难以触发告警,它的独立上涨将导致硬盘性能受到难以感知的影响,但是会逐步劣化成严重的性能下降风险。
根据经验,一般认为该值和 SMART187 以及 SMART183 存在关联性,上述二者的出现有一定可能(看读写频率)导致该值持续升高。
High_Fly_Writes
磁头在异常高度工作
ID:189,告警等级:
「报告」:磁头异常 / Disk Fly High.
- 阈值:大于 1 或增长
- 说明:该项值非零时表明硬盘可能曾遭到冲击或存在机件异常。
- 影响:需要密切监控是否存在恶化情况,该值持续增长可导致设备性能下降,因该值的增长意味着未完成就被中止的操作数量增长。
G-sense Error Rate
加速度传感器告警
ID:191,告警等级:
「报告」:碰撞警报 / Physical Impact Warning.
- 阈值:增长
- 说明:盘体内置加速度传感器检测到可能对硬盘造成伤害的运行时冲击。
- 影响:该值比较少见,但是意味着外部环境有剧烈变动,例如服务器受到撞击,地震等,当某个机房所有服务器都检测到该项值上升时,请联系机房确认环境是否有剧变或地震发生。
Temperature_Celsius
或 Airflow_Temperature_Celsiu
温度 / 气流温度
ID:194 或 190,告警等级:
「报告」:烧烤硬盘 / BBQ.
「警戒」:率先踏入地狱 / Drop feet first in the hell.
阈值:
报告级:52
警戒级:62说明:硬盘工作温度情况。
- 影响:如果某个机房的硬盘工作温度普遍过高,应当确认机房内散热情况是否会导致设备寿命降低。
Current_Pending_Sector
当前待映射扇区计数
ID:197,告警等级:
「报告」:安定度下降 / Stability declining.
「警戒」:性能衰退 / Performance decline.
「衰退」:数据风险 / High Data Risk.
阈值:
报告级:非 0
警戒级:3
衰退级:10说明:这一参数的数据表示了“不稳定”的扇区数,即“等待被映射”的扇区数量。
- 影响:如果有扇区在读取时出现错误,ID197 就会增长,如果该扇区随后被读写成功,等待被映射的操作就会取消,ID197 会下降。如果下一次对该扇区的写操作继续发生错误,就会产生重映射,然后 ID5 计数增长,ID197 计数下降。如果该扇区后续无操作到达,ID197 数值也会维持不变。
因此,该项少量错误不会有严重后果,但该项值快速或大量发生变化,则应考虑是否硬盘发生了稳定性方面的问题。
Offline Uncorrectable / Uncorrectable Sector Count
屏蔽扇区计数
ID:198,告警等级:
「报告」:安定度下降 / Stability declining.
阈值:
报告级:3说明:这一项数据代表磁盘主控确认失效已经屏蔽的扇区计数。
影响:理论上该值过大会导致数据风险。统计显示绝大多数磁盘该数据为零。但该值非零并不和磁盘性能下降或故障存在强关联,问题磁盘的这个值一般都比较高,所以将其置为报告级别待后续研究。
关于 S.M.A.R.T. 数据的可靠性
S.M.A.R.T. 数据在正常情况下都是能快速响应并准确的。
在 UPYUN 的实际线上环境,遇到过部分硬盘存在 S.M.A.R.T. 信息无法读取的情况。我对发生这些情况的硬盘做了一下简单的调查后,发现发生此类情况的硬盘一般伴随着性能的严重下降,通常原始读取错误增长率约为十几秒百万,或某个单项监控增长率异常高,基本上摘除以后 S.M.A.R.T. 响应速度都能一定程度上恢复。
我认为这可能是由于硬盘主控芯片已无力处理海量的数据纠正要求,从而没有空闲的资源响应系统对 S.M.A.R.T. 的请求导致的,而事实上这些硬盘已经存在非常严重的问题了。只要我们针对其硬盘工作状态作出合理的健康判断并在它表现出明显故障之前摘除,那么就基本上不会发生 S.M.A.R.T. 监控失效情况了。
注: 文章为 UPYUN 攻城狮 WooDragon 原创内容,转载需经过作者授权,同时保留署名和原文链接。