分析硬盘介质错误
| 导语 随着云业务的扩张和服务器数量的增加,硬盘Media Error的现象也越来越受到用户的关注。本文结合腾讯云海量服务器运营经验,浅谈产生Media Error的原因和硬盘自身容错机制,以及应用层的处理建议。
一、 什么是Media Error
Media Error,有时也称为Medium Error,一般是指硬盘在读操作中遇到了不可纠正的扇区从而无法给host返回准确的数据,对应到SCSI协议KCQ代码为03/11/xx。Media Error的产生意味着即使硬盘自身已经用尽了所有容错手段(如LDPC解码, retry等),该扇区(LBA)的数据已经无法被正确读出。
二、产生Media Error 的原因
Media Error产生的本质原因是硬盘的读写信号处理系统无法对硬盘介质(如HDD的碟片,SSD的NAND)上读取的数据信号进行正确解码。下面分别针对HDD和SSD剖析造成Media Error的几个主要原因。
HDD:
由于极其精密的内部机械构造,当前主流HDD的磁头和碟片之间的距离已经压缩至1nm左右, 外部的轻微干扰都会造成读写信号质量出现波动。HDD产生Media Error的原因主要是以下几种:
- Unreliable LBA: 读写信号质量的波动会造成零星的不稳定LBA导致上报Media Error,但有时硬盘也有可能通过多次retry后恢复。
- Weak write/ High fly write: 硬盘读写时需要对磁头进行加热,利用热胀冷缩的原理使头碟距离进一步贴近从而提供更优的读写信号质量。而高IO的读写会对热凸起造成一定影响,从而一定程度上增加弱写的概率。弱写发生后,写入信号强度较弱,读取时可能会出现不能正确纠错从而造成Media Error。High fly write则是由于硬盘内部游离的微量颗粒(particle)在高IO的情况下(磁头摆动频率增加)被空气流卷起而撞击到磁头,造成写数据时磁头飞高产生弱写。
- Shock/Vibration/Acoustic: 外部的撞击、震动、音噪都会在盘内部产生较大的共振,从而使磁头产生摆动,导致出现偏离磁道的读写,造成了Media Error。
- Media Defect: 碟片划伤,由于盘内大颗粒物或者磁头撞击碟片,部分区域的磁性材料被损坏从而造成数据无法被读取。
- Head Degrade: 磁头降级,磁头结构或者材料受到损伤而造成读写信号质量大大降级,从而出现Media Error。
以上第4点和第5点是有硬件损伤且不可恢复,一般会造成大量的LBA出现不可恢复读错误,而第1点到第3点都不涉及硬件损耗,可以通过简单的复写恢复。
SSD:
简单来讲,SSD数据读取的过程是通过阈值电压Vt与floating gate里存储的电子相对应的过程,随着SSD P/E的增加,raw BER也会随之增加。
图片来源:IEEE:Flash Correct-and-Refresh: Retention-Aware Error Management for Increased Flash Memory Lifetime
造成SSD产生Media Error的主要原因如下:
- Program disturb: 在写入过程中一些本不应被写入的Cell(同page或邻近page的一些cell)受到升高的电压应力而造成比特翻转,尤其是在对partial-page进行大量写入时,干扰尤为严重。
图片来源:《The Inconvenient Truths of NAND Flash Memory》
- Read disturb: 在读取过程中由于受到升高的电压应力而对邻近的page产生干扰,造成比特改变。
图片来源:《The Inconvenient Truths of NAND Flash Memory》
- Over-programming: bit line的阈值电压(threshold gate voltage)太高导致不正确的读写数据。
- Data retention: 当控制极不加电压时,浮栅极里的电子会产生本征电场,使得电子会从浮栅慢慢泄漏,数据就会发生错误
图片来源:《The Inconvenient Truths of NAND Flash Memory》
- Media wear-out: SSD 擦写次数(P/E Cycle)超过设计规格,绝缘的浮栅极氧化层老化耗损,无法隔离与保留电子,从而产生大量错误。
图片来源:《The Inconvenient Truths of NAND Flash Memory》
以上第5点是SSD NAND硬件损伤且不可恢复,而第1点到第4点都不涉及硬件损耗,可以通过简单的block擦除与复写恢复。
三、硬盘内的容错机制
为了尽量减少Media Error的发生,硬盘内部有着极其复杂的纠错流程与算法对原始误码(Raw Bit Error)进行纠错, 确保用户数据能够被正确的解码。从产品规格来说,经过层层纠错处理算法后,HDD UBER可以达到10-15, SSD UBER可以达到10-17
HDD:
HDD读取的原始信号是通过磁头将碟片上的磁场极性转化而成的电信号,微弱且嘈杂,无法被识别。得益于HDD强大的PRML(Partial Response Maximum Likelihood)信道处理技术, 微弱嘈杂的模拟电信号经过模拟信号处理,模数转换,数字信号处理以及SOVA-LLR(Soft Output Viterbi Algorithm – Log Likelihood Ratio)检测,LDPC解码等一系列高精尖的信号处理技术,转变为误码率极低的用户数据。然而,即使拥有如此强大的信号处理系统,某些扇区也会出现不可恢复的错误,所以HDD也拥有复杂的扇区级retry算法,通过各种方式对不可恢复的扇区进行重解码尝试,包括重读,噪声补偿,磁头偏移,参数调节等不同级别的retry 步骤。除此之外,在新的HDD技术中,也引入了类似盘内RAID校验的思路,每条磁道的末尾有会校验扇区,当该磁道出现多个扇区不可读时,可以通过检验扇区来重构不可恢复的扇区,从而实现盘内同磁道多扇区校验与恢复的作用。
SSD:
SSD虽然不像HDD需要进行复杂的模数信号处理,但内部也有着一套完整的错误校验与修复机制。当host从NAND读取到数据后,SSD内部会有一些列的ECC校验,LDPC校验,盘内“RAID”校验, retry等多种纠错步骤,以确保读出正确的数据。只有当所有的手段都失效后,SSD才会上报Media Error, 告知host原始数据无法被恢复。
四、Media Error发生的场景
通常情况下,Media error发生于硬盘自检与host主动读取两种场景下。
- 硬盘自检:硬盘定期在后台进行扫描时发现,Host未感知。
- 硬盘在非繁忙时定期在后台执行扫描任务检测Media Error
- 硬盘在碟片上尝试读取数据,但是未能成功
- 硬盘启动恢复程序,包括加强LDPC解码循环,介入Retry机制等纠错方案
- 若仍未能纠错,硬盘则将该LBA放置在pending list里,等待Host对该扇区重写后完成重映射。
- Host主动读取:Host在读取任务时上报Media Error。
- 当Host对硬盘进行读操作时,若硬盘经过了所有的纠错步骤都不能读出LBA的数据时,则生成03/11/xx(表征着Media Error的SCSI KCQ)通知Host,这意味着该LBA的数据已经无法被正确读取
- 若配有RAID卡且具备校验配置( RAID5), RAID卡会定期进行一致性校验(Consistency Check),通过冗余校验码对单盘Media Error进行修复
- 若无RAID卡配置,Host应该尽快使用备份数据重新写入该地址以进行修复
五、Media Error的常见误区
- 出现Media Error了就是硬盘故障:× Media error十分常见,尤其当硬盘运行在24x7的企业级高IO服务器时。像上文所述,对于HDD来讲,高Workload会产生高强度地磁头寻道和读写,加上机框的震动和风扇风噪等,会不可避免的存在弱写、unreliable LBA等原因造成的Media Error;而对于SSD来讲,高Workload会增加program disturb、read disturb等现象从而增加Media Error出现的概率。出现少量的Media Error的现象很常见,并非不可逆的硬件损耗,可以通过复写修复,不代表硬盘的故障。
- Media Error数量越多代表硬盘坏块越多:× Media Error的计数不代表坏块的数量,一个坏块(LBA)被读取多次,就会在系统里产生多次Media Error 报错,我们需要判断产生Media Error的LBA是否是零星的还是大量的
- 硬盘应该自身去修复Media Error,保证数据安全:× 某个LBA出现Media Error,代表着硬盘内部用尽所有的纠错措施都无法恢复,该LBA数据在单盘内已经丢失。这时就需要上层(如RAID卡,业务副本)来进行数据冗余修复,硬盘单盘不保证数据冗余和安全。
六、应用层Media Error容错方案建议
如前文所述,当硬盘上报Media Error,则表示着该硬盘对应的LBA数据已经无法恢复,那么从应用层的角度就需要对数据进行多副本备份与修复。
- 文件系统校验+多副本: 对存储文件进行checksum校验,若校验失败则读取相应副本数据,同时对原数据进行重写修复
- 定期巡检与一致性校验 定期对多副本数据进行巡读和checksum校验,对报错的block提前用相应的副本数据进行重写修复
如何有效地进行代码 Review?
商业化增长之路:如何设计好玩的抽奖
腾讯的敏捷研发之战
推荐阅读
-
生产环境java.util.concurrent.RejectedExecutionException:事件执行器终止 错误分析
-
发现一个有趣的函数:av_strerror,它有助于分析错误代码。
-
Zabbix 监控项目无法获取数据?解决问题的 3 个步骤,11 种错误报告场景分析
-
纯干货分享 | 研发效能提升——敏捷需求篇-而敏捷需求是提升效能的方式中不可或缺的模块之一。 云智慧的敏捷教练——Iris Xu近期在公司做了一场分享,主题为「敏捷需求挖掘和组织方法,交付更高业务价值的产品」。Iris具有丰富的团队敏捷转型实施经验,完成了企业多个团队从传统模式到敏捷转型的落地和实施,积淀了很多的经验。 这次分享主要包含以下2个部分: 第一部分是用户影响地图 第二部分是事件驱动的业务分析Event driven business analysis(以下简称EDBA) 用户影响地图,是一种从业务目标到产品需求映射的需求挖掘和组织的方法。 在软件开发过程中可能会遇到一些问题,比如大家使用不同的业务语言、技术语言,造成角色间的沟通阻碍,还会导致一些问题,比如需求误解、需求传递错误等;这会直接导致产品的功能需求和要实现的业务目标不是映射关系。 但在交付期间,研发人员必须要将这些需求实现交付,他们实则并不清楚这些功能需求产生的原因是什么、要解决客户的哪些痛点。研发人员往往只是拿到了解决方案,需要把它实现,但没有和业务侧一起去思考解决方案是否正确,能否真正的帮助客户解决问题。而用户影响地图通常是能够连接业务目标和产品功能的一种手段。 我们在每次迭代里加入的假设,也就是功能需求。首先把它先实现,再逐步去验证我们每一个小目标是否已经实现,再看下一个目标要是什么。那影响地图就是在这个过程中帮我们不断地去梳理目标和功能之间的关系。 我们在软件开发中可能存在的一些问题 针对这些问题,我们如何避免?先简单介绍做敏捷转型的常规思路: 先做团队级的敏捷,首先把产品、开发、测试人员,还有一些更后端的人员比如交互运维的同学放在一起,组成一个特训团队做交付。这个团队要包含交付过程中所涉及的所有角色。 接着业务敏捷要打通整个业务环节和研发侧的一个交付。上图中可以看到在敏捷中需求是分层管理的,第一层是业务需求,在这个层级是以用户目标和业务目标作为输入进行规划,同时需要去考虑客户的诉求。业务人员通过获取到的业务需求,进一步的和团队一起将其分解为产品需求。所以业务需求其实是我们真正去发布和运营的单元,它可以被独立发布到我们的生产环境上。我们的产品需求其实就是产品的具体功能,它是我们集成和测试的对象,也就是我们最终去部署到系统上的一个基本单元。产品需求再到了我们的开发团队,映射到迭代计划会上要把它分解为相应的技术任务,包括我们平时所说的比如一些前端的开发、后端的开发、测试都是相应的技术任务。所以业务敏捷要达到的目标是需要去持续顺畅高质量的交付业务价值。 将这几个点串起来,形成金字塔结构。最上层我们会把业务目标放在整个金字塔的塔尖。这个业务目标是通过用户的目标以及北极星指标确立的。确认业务目标后再去梳理相应的业务流程,最后生产。另外产品需求包含了操作流程和业务规则,具需求交付时间、工程时间以及我们的一些质量标准的要求。 谈到用户影响的地图,在敏捷江湖上其实有一个传说,大家都有一个说法叫做敏捷需求的“任督二脉”。用户影响地图其实就是任脉,在黑客马拉松上用过的用户故事地图其实叫督脉。所以说用户影响地图是在用户故事地图之前,先帮我们去梳理出我们要做哪些东西。当我们真正识别出我们要实现的业务活动之后,用户故事地图才去梳理我们整个的业务工作流,以及每个工作流节点下所要包含的具体功能和用户故事。所以说用户影响地图需要解决的问题,我们包括以下这些: 首先是范围蔓延,我们在整张地图上,功能和对应的业务目标是要去有一个映射的。这就避免了一些在我们比如有很多干系人参与的会议上,那大家都有不同想法些立场,会提出很多需求(正确以及错误的需求)。这个时候我们会依据目标去看这些需求是否真的是会影响我们的目标。 这里提到的错误需求,比如是利益相关的人提出的、客户认为产品应该有的、某个产品经理需求分析师认为可以有的....但是这些功能在用户影响地图中匹配不到对应目标的话,就需要降低优先级或弃掉。另外,通常我们去制定解决方案的时候,会考虑较完美的实现,导致解决方案括很多的功能。这个时候关键目标至关重要,会帮助我们梳理筛选、确定优先级。 看一下用户影响到地图概貌 总共分为一个三层的结构: 第一层why,你的业务目标哪个是最重要的,为什么?涉及到的角色有哪些? 第二层how ,怎样产生影响?影响用户角色什么样的行为? (不需要去列出所有的影响,基于业务目标) 第三层what,最关键的是在梳理需求时不需一次把所有细节想全,这通常团队中经常遇到的问题。 我们用这个例子来看一下 这是一个客服中心的影响地图,业务目标是 3个月内不增加客服人数的前提下能支持1.5倍的用户数。此业务目标设定是符合 smart 原则的,specific非常的具体,miserable 是可以衡量的,action reoriented是面向活动的, real list 也是很实际的。 量化的目标会指引我们接下来的行动,梳理一个业务目标,尽量去量化,比如 :我们通过打造一条什么样的流水线,能够提高整个部署的效率,时间是原来的 1/2 。这样才是一个能量化的有意义的目标。 回到这幅图, how 层级识别出来的内容,客服角色:想要对它施加的影响,把客户引导到论坛上,帮助客户更容易的跟踪问题,更快速的去定位问题。初级用户:方论坛上找到问题。高级用户:在论坛上回答问题。通过我们这些用户角色,进行活动,完成在不增加客户客服人数的前提下支持更多的用户数量。 最后一个层级,才是我们日常接触比较多的真正的功能的特性和需求,比如引导到客户到论坛上,其实这个产品就需要有一个常见问题的论坛的链接。这个层次需要我们团队进一步地在交付,在每个迭代之前做进一步的梳理,细化成相应的用户故事。 这个是云智慧团队中,自己做的影响地图的范例,可以看下整个的层级结构。序号表示优先级。 那我们用户影响地图可以总结为:
-
一、分析 Spring 启动错误 BeanCurrentlyInCreationException 背后的原因--什么情况下循环注入会报错!
-
JVM 致命错误日志(hs_err_pid.log)分析
-
紧急模式问题处理 - 图 1 紧急模式 根本原因分析 应急模式提供了尽可能小的环境,即使无法进入应急模式,也可以在其中修复系统。在应急模式下,系统只安装根文件系统供读取,不尝试安装任何其他本地文件系统,不激活网络接口,只启动一些基本服务。 进入应急模式的原因通常是 /etc/fstab 文件中存在错误,导致文件系统挂载失败。 文件系统中存在错误,导致。 约束和限制 本节适用于 Linux 操作系统紧急模式。程序涉及修复文件系统。修复文件系统有丢失数据的风险,因此请先备份数据,然后再执行修复操作。 处理方法 输入根密码,然后进入修复模式。 在应急模式下,根分区以只读模式挂载。要修改根目录中的文件,需要执行以下命令以读写模式重新挂载根分区。# mount -o rw,remount / 请执行以下命令首先检查 fstab 文件是否有误,然后尝试挂载所有未挂载的文件系统。# mount -a 如果挂载点不存在,请创建一个挂载点。 如果不存在此类设备,请注释或删除挂载行。 如果指定了不正确的挂载选项,请将挂载参数更改为正确的参数。 如果没有发生错误,但出现 UNEXPECTED INCONSISTENCY;RUN fsck MANUALLY 消息(通常是由文件系统错误引起的),请跳至第 7 步。 执行以下命令打开 /etc/fstab 以修改相应的错误。# vi /etc/fstab /etc/fstab 文件包含以下字段,以空格分隔:[文件系统] [dir] [type] [options] [dump] [fsck] 表 1 /etc/fstab 参数 说明 参数 说明 [文件系统] 要挂载的分区或存储设备。 文件系统]列建议以 UUID 的形式写入。执行 blkid 命令可查询设备文件系统 UUID。 参考格式如下: # <device> <dir> <type> <options> <dump> <fsck>; UUID=b411dc99-f0a0-4c87-9e05-184977be8539 /home ext4 defaults 0 2 使用 UUID 的好处是,它们与磁盘顺序无关。如果你在 BIOS 中更改了存储设备的顺序,或重新插入了存储设备,或者因为某些 BIOS 可能会随机更改存储设备的顺序,那么使用 UUID 会更有效率。 [文件系统] 文件系统]的挂载位置。 类型 挂载设备或分区的文件系统类型,支持多种不同的文件系统:ext2、ext3、ext4、reiserfs、xfs、jfs、smbfs、iso9660、vfat、ntfs、swap 和 auto。 设置为自动类型后,挂载命令会猜测所使用的文件系统类型,这对 CDROM 和 DVD 等移动设备非常有用。 选项 挂载时要使用的参数,有些参数是特定文件系统特有的。例如,默认值参数使用文件系统的默认挂载参数,ext4 的默认参数为:rw、suid、dev、exec、auto、nouser、async。 有关更多参数,请执行以下命令查看 man 手册:# man mount
-
Linux 内核 I/O 系统错误日志和硬盘故障通信
-
vsftpd 目录限制 chroot(用户隔离)500 错误分析和解决方案
-
分析网络服务器错误的原因和解决方案