SMART 监控项研究以及存储健康分级机制
xsobi 2024-12-18 17:46 2 浏览
在机械硬盘技术极为成熟的当下,硬盘损坏对普通消费者来说似乎越来越遥远,我自己用的一台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.芯片故障导致的无法读取。该级别的硬盘完全无法工作。
特征界定:
1. 满足多项「衰退」的特征。
2. 或S.M.A.R.T.信息无法读取。
3. 存在大量系统级告警或干脆无法识别。
处理动作:更换它!
S.M.A.R.T.关键监控项详解Raw_Read_Error_Rate 原始读取错误率ID:1,告警项:
「报告」:巡检 / Patrol.
阈值:单位时间内极高增长率
说明:从硬盘读取原始数据时的错误率。一个非零值表示磁盘表面或读写磁头有问题。
影响:该项数据大幅度增加通常说明硬盘年事已高,应当考虑预备从线上环境替换下来,但短期内不会有太大问题,只是会一定程度上影响性能,而该值增长率非常大的情况下也可能较大程度的影响硬盘性能。
由于各厂商对该值定义不同,该值增加情况和硬盘工作状况也不存在强关联性,所以不作为警戒和衰退等级界定要素。
Seek_Error_Rate 寻道错误率ID:7,告警项:
说明:定位数据时的错误频率
影响:该项数据大幅度增加时,硬盘性能有一定影响,但还可以正常工作,不会立马嗝屁,但存在一定风险,该项数据和原始读取错误率同时上涨的情况下,硬盘可能发生机械性能衰退,声音变大,震动加剧,甚至产生难听的噪声,应当考虑尽快替换或退役。
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,告警等级:
报告级: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.监控失效情况了。
声明:IT之家网站刊登/转载此文出于传递更多信息之目的,并不意味着赞同其观点或论证其描述。
相关推荐
- 好用的云函数!后端低代码接口开发,零基础编写API接口
-
前言在开发项目过程中,经常需要用到API接口,实现对数据库的CURD等操作。不管你是专业的PHP开发工程师,还是客户端开发工程师,或者是不懂编程但懂得数据库SQL查询,又或者是完全不太懂技术的人,通过...
- 快速上手:Windows 平台上 cURL 命令的使用方法
-
在工作流程中,为了快速验证API接口有效性,团队成员经常转向直接执行cURL命令的方法。这种做法不仅节省时间,而且促进了团队效率的提升。对于使用Windows系统的用户来说,这里有一套详细...
- 使用 Golang net/http 包:基础入门与实战
-
简介Go的net/http包是构建HTTP服务的核心库,功能强大且易于使用。它提供了基本的HTTP客户端和服务端支持,可以快速构建RESTAPI、Web应用等服务。本文将介绍ne...
- #小白接口# 使用云函数,人人都能编写和发布自己的API接口
-
你只需编写简单的云函数,就可以实现自己的业务逻辑,发布后就可以生成自己的接口给客户端调用。果创云支持对云函数进行在线接口编程,进入开放平台我的接口-在线接口编程,设计一个新接口,设计和配置好接口参...
- 极度精神分裂:我家没有墙面开关,但我虚拟出来了一系列开关
-
本内容来源于@什么值得买APP,观点仅代表作者本人|作者:iN在之前和大家说过,在iN的家里是没有墙面开关的。...
- window使用curl命令的注意事项 curl命令用法
-
cmd-使用curl命令的注意点前言最近在cmd中使用curl命令来测试restapi,发现有不少问题,这里记录一下。在cmd中使用curl命令的注意事项json不能由单引号包括起来json...
- Linux 系统curl命令使用详解 linuxctrl
-
curl是一个强大的命令行工具,用于在Linux系统中进行数据传输。它支持多种协议,包括HTTP、HTTPS、FTP等,用于下载或上传数据,执行Web请求等。curl命令的常见用法和解...
- Tornado 入门:初学者指南 tornados
-
Tornado是一个功能强大的PythonWeb框架和异步网络库。它最初是为了处理实时Web服务中的数千个同时连接而开发的。它独特的Web服务器和框架功能组合使其成为开发高性能Web...
- PHP Curl的简单使用 php curl formdata
-
本文写给刚入PHP坑不久的新手们,作为工具文档,方便用时查阅。CURL是一个非常强大的开源库,它支持很多种协议,例如,HTTP、HTTPS、FTP、TELENT等。日常开发中,我们经常会需要用到cur...
- Rust 服务器、服务和应用程序:7 Rust 中的服务器端 Web 应用简介
-
本章涵盖使用Actix提供静态网页...
- 我给 Apache 顶级项目提了个 Bug apache顶级项目有哪些
-
这篇文章记录了给Apache顶级项目-分库分表中间件ShardingSphere提交Bug的历程。说实话,这是一次比较曲折的Bug跟踪之旅。10月28日,我们在GitHub上提...
- linux文件下载、服务器交互(curl)
-
基础环境curl命令描述...
- curl简单使用 curl sh
-
1.curl--help#查看关键字2.curl-A“(添加user-agent<name>SendUser-Agent<name>toserver)”...
- 常用linux命令:curl 常用linux命令大全
-
//获取网页内容//不加任何选项使用curl时,默认会发送GET请求来获取内容到标准输出$curlhttp://www.baidu.com//输出<!DOCTYPEh...
- 三十七,Web渗透提高班之hack the box在线靶场注册及入门知识
-
一.注册hacktheboxHackTheBox是一个在线平台,允许测试您的渗透技能和代码,并与其他类似兴趣的成员交流想法和方法。它包含一些不断更新的挑战,并且模拟真实场景,其风格更倾向于CT...
- 一周热门
- 最近发表
-
- 好用的云函数!后端低代码接口开发,零基础编写API接口
- 快速上手:Windows 平台上 cURL 命令的使用方法
- 使用 Golang net/http 包:基础入门与实战
- #小白接口# 使用云函数,人人都能编写和发布自己的API接口
- 极度精神分裂:我家没有墙面开关,但我虚拟出来了一系列开关
- window使用curl命令的注意事项 curl命令用法
- Linux 系统curl命令使用详解 linuxctrl
- Tornado 入门:初学者指南 tornados
- PHP Curl的简单使用 php curl formdata
- Rust 服务器、服务和应用程序:7 Rust 中的服务器端 Web 应用简介
- 标签列表
-
- grid 设置 (58)
- 移位运算 (48)
- not specified (45)
- patch补丁 (31)
- strcat (25)
- 导航栏 (58)
- context xml (46)
- scroll (43)
- element style (30)
- dedecms模版 (53)
- vs打不开 (29)
- nmap (30)
- webgl开发 (24)
- parse (24)
- c 视频教程下载 (33)
- paddleocr (28)
- listview排序 (33)
- firebug 使用 (31)
- transactionmanager (30)
- characterencodingfilter (33)
- getmonth (34)
- commandtimeout (30)
- hibernate教程 (31)
- label换行 (33)
- curlpost (31)