ECC RAM 用于减少服务器上的损坏错误。
为什么没有发明 ECC RAM 类型的设备来绕过 HDD 中的坏扇区?
答案1
为什么没有发明 ECC RAM 类型的设备来绕过坏扇区?
您的问题基于一个错误的假设。大容量存储设备确实采用 ECC 来检测和纠正扇区内的数据。
但纠错能力有限。
附加在扇区数据上的典型 ECC 能够检测错误,然后纠正有限长度的短突发位错误。
这种突发错误是存储介质的典型故障。
HDD 传统上采用 7 字节消防规范其能够纠正长达 11 位的错误。
Seagate 文献表示后来的硬盘将 ECC 大小从 50 字节(用于 512 字节扇区)扩展到 100 字节(用于 4K 字节扇区),但忽略了以位数表示的校正能力。ECC
传统上附加在磁盘扇区数据的末尾。
采用 NAND 闪存的 SSD 也使用 ECC,并且具有有限的位校正能力。
事实上,NAND 闪存制造商对其芯片的最低校正能力(即位数)有规范。
通常使用的 ECC 是BCH(Bose、Chaudhuri 和 Hocquenghem)代码ECC
存储在 NAND 芯片的一个独立区域中,与“带外”区域中的数据隔离。
当存储设备从介质读取扇区时,会检查 ECC 以确定是否发生任何错误。
如果没有检测到错误,则扇区数据将传输到主机。
如果检测到错误,但错误的数量和跨度在 ECC 能力范围内,则扇区数据将得到纠正,然后以软读取错误状态传输到主机。
如果检测到错误,并且错误的数量或跨度超出 ECC 能力,则读取被视为失败,并通知主机存在无法纠正的读取错误。
给定长度的 ECC 具有有限的校正能力。
用于 ECC 开销的额外存储量是数据容量和数据冗余之间的权衡,以实现完整性。
选择 ECC 是为了对较小介质缺陷具有最小的校正能力。
随着存储设备使用寿命期间介质缺陷数量的增加,集成控制器和/或主机的文件系统/操作系统的坏块处理有望处理下一级别的损坏。
方案如下RAID,廉价磁盘冗余阵列,也试图适应这种恶化。
换句话说,扩大 ECC 以消除未来坏扇区的经济学是没有意义的。
答案2
硬盘已经使用错误修正来检测和防止少量错误。
每个扇区都有一个ECC区域。
上图来自硬盘内部:磁道和区域
对于每个读取的扇区,硬盘驱动器都会使用 ECC 代码来检测读取的内容是否正确,并且对于单个位错误甚至几个位错误,它可以纠正错误。如果错误太多或扇区完全无法读取,任何软件都无能为力。
要了解有关硬盘上数据的物理结构的更多信息,您应该阅读硬盘内部:磁道和区域
答案3
您混淆了两个不同的东西。纠错码内存 (ECC) 用于保护计算机内存 (RAM) 免受损坏。
从维基百科:
通常,ECC 内存可维护一个不受单比特错误影响的内存系统:从每个字读取的数据始终与写入该字的数据相同,即使实际存储的某个位被翻转为错误状态。
“坏扇区”是指存储介质,例如硬盘、固态硬盘和闪存驱动器。坏扇区通常无法恢复,其中的所有数据都会丢失。这些扇区被标记为坏扇区,不再使用。坏扇区通常身体的磁盘损坏。例如,硬盘驱动器盘片的磁性氧化物涂层不再能够保持磁性状态,或者 SSD 单元随着时间的推移而磨损。
有一些技术可以防止硬盘数据丢失。一个例子是袭击但它有其局限性。您可能会丢失整个磁盘而不会丢失数据,但它无法阻止损坏的数据写入磁盘。还有一些专门用于数据完整性的文件系统,例如虚拟文件系统这就是为什么服务器通常使用一种或多种这些技术来减轻数据损坏和丢失的原因。当然,所有服务器都应该进行备份,以防一切都被毁坏。
答案4
主要原因是 DRAM 中没有坏扇区(严格来说是坏单元):
(1)DRAM 芯片的坏单元率低于闪存芯片,因此丢弃有坏单元的 DRAM 芯片是正常的(有备用单元的芯片即使有极少的坏单元也能正常工作)。闪存芯片的坏单元太多,如果把每个有坏单元的闪存芯片都扔掉,那么就根本没有可用的芯片了。
(2)DRAM芯片在出货前经过了充分的测试,之后出现新的坏单元的几率很低。但是闪存芯片出货后会继续出现更多的坏单元。
DRAM 芯片的 ECC 是针对每 64 位数据纠正一位错误或检测两位错误。此错误是由于软错误造成的,软错误通常是由于强电磁场干扰造成的,而不是由于坏单元造成的。如果发货后发现坏单元,则需要更换 DRAM 模块。
另一方面,闪存芯片的 ECC 可以纠正更多由于坏单元而导致的错误。