| 导语 随着云业务的扩张和服务器数量的增加,硬盘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提前用相应的副本数据进行重写修复