Tom Cobalt Asked: 2020-05-23 20:11:14 +0800 CST2020-05-23 20:11:14 +0800 CST 2020-05-23 20:11:14 +0800 CST 为什么没有发明 ECC RAM 类型的设备来绕过 HDD 中的坏扇区? 772 ECC RAM 用于减少服务器上的损坏错误。 为什么没有发明 ECC RAM 类型的设备来绕过 HDD 中的坏扇区? hard-drive ecc 6 个回答 Voted Best Answer sawdust 2020-05-23T22:30:16+08:002020-05-23T22:30:16+08:00 为什么没有发明 ECC RAM 类型的设备来绕过坏扇区? 您的问题是基于错误的假设。大容量存储设备确实使用 ECC 来对扇区中的数据进行错误检测和纠正。 但校正能力有限。 附加到扇区数据的典型 ECC 能够检测错误,然后为跨越有限长度的短突发比特错误提供纠正。 这种错误突发是存储介质的特征性故障。 HDD 传统上使用 7字节Fire 代码,该代码能够纠正长达 11 位长度的错误。 希捷文献表明,后来的 HDD 将 ECC 大小从 50 字节(对于 512 字节扇区)扩展到 100 字节(对于 4K 字节扇区),但忽略了比特数的校正能力。 ECC 传统上附加到磁盘扇区数据的末尾。 采用 NAND 闪存的 SSD 也使用 ECC 并具有有限的位校正能力。 事实上,NAND 闪存制造商对其芯片的最小校正能力(即位数)有规范。 通常使用的 ECC 是BCH(Bose、Chaudhuri 和 Hocquenghem)代码。 ECC 与“带外”区域中的数据存储在 NAND 芯片的单独区域中。 当存储设备从介质中读取一个扇区时,会检查 ECC 以确定是否发生任何错误。 如果未检测到错误,则将扇区数据传输到主机。 如果检测到错误但错误的数量和跨度在 ECC 能力范围内,则纠正扇区数据,然后以软读错误的状态传输到主机。 如果检测到错误并且错误的数量或跨度超出了 ECC 能力,则认为读取失败,并且主机会收到无法纠正的读取错误的通知。 给定长度的 ECC 具有有限的校正能力。 用于 ECC 开销的额外存储量是数据容量和数据冗余之间的权衡以实现完整性。 选择 ECC 是为了对较小的介质缺陷具有最小的校正能力。 随着存储设备生命周期内介质缺陷数量的增加,通过集成控制器和/或主机的文件系统/OS 进行的坏块处理预计将处理下一个级别的恶化。 诸如RAID、廉价磁盘冗余阵列之类的方案也试图适应这种恶化。 IOW 扩展 ECC 以消除未来不良部门的经济学没有意义。 Keltari 2020-05-23T20:40:51+08:002020-05-23T20:40:51+08:00 你混淆了两个不同的东西。纠错码内存 (ECC) 用于保护计算机内存 (RAM) 免受损坏。 来自维基百科: 通常,ECC 存储器维护一个不受单位错误影响的存储系统:从每个字读取的数据始终与写入其中的数据相同,即使实际存储的一位已被翻转到错误的状态。 “坏扇区”是指存储介质,例如硬盘驱动器、固态驱动器和闪存驱动器。坏扇区通常是不可恢复的,并且它们上的所有数据都会丢失。这些扇区被标记为坏的并且不再使用。坏扇区通常是对磁盘的物理损坏。例如,硬盘驱动器盘片的磁性氧化物涂层不再能够保持磁性状态,或者 SSD 单元随着时间的推移而磨损。 有些技术可以防止硬盘数据丢失。一个例子是RAID,但它有其局限性。您可以在不丢失数据的情况下丢失整个磁盘,但它不能防止损坏的数据被写入磁盘。还有一些专用于数据完整性的文件系统,例如ZFS。这就是为什么服务器通常使用这些技术中的一种或多种来减轻数据损坏和丢失的原因。当然,他们都应该做备份,以防万一一切都被破坏。 Mokubai 2020-05-23T22:31:55+08:002020-05-23T22:31:55+08:00 硬盘已经使用纠错来检测和防止少量错误。 每个扇区都有一个 ECC 区域。 上图来自HDD 内部:Tracks and Zones 对于读取的每个扇区,硬盘驱动器使用 ECC 代码来检测读取的内容是否正确,并且对于单个位错误或什至可能是几个位,它可以纠正错误。如果错误太多或扇区完全不可读,则任何软件都无能为力。 要了解有关数据在硬盘上的物理结构的更多信息,您应该阅读HDD 里面的内容:轨道和区域 Dylan McNamee 2020-05-23T20:31:08+08:002020-05-23T20:31:08+08:00 我相信这是因为即使在没有错误的情况下,允许内存模块绕过坏内存的间接层也会引入不可接受的延迟。也就是说,只要坏内存不是关键的未分页内核内存,操作系统就可以识别 ECC 错误并避免使用这些页面。这个问题和答案描述了有关此过程的一些细节。 jw_ 2020-05-23T21:37:23+08:002020-05-23T21:37:23+08:00 主要原因是 DRAM 中没有坏扇区(严格来说是坏单元): (1) DRAM芯片的坏细胞率低于闪存芯片,那么坏细胞的DRAM芯片被丢弃是正常的(有备用细胞,一些坏细胞很少的芯片可能仍然工作)。闪存芯片有太多坏单元,如果你把每个闪存芯片都扔坏单元,那么根本就没有可用的芯片。 (2) DRAM 芯片在出货前经过全面测试,之后出现新坏单元的几率非常低。但出货后闪存芯片将继续有更多的坏细胞。 DRAM 芯片的 ECC 是为每 64 位数据纠正一位错误或检测两位错误。这个错误是由于软错误造成的,通常是由于强电磁场干扰,而不是由于坏电池。如果发货后有坏电池,则更换 DRAM 模块。 另一方面,闪存芯片的 ECC 可以纠正更多由坏单元引起的错误。 Gordan Bobić 2020-05-23T22:30:41+08:002020-05-23T22:30:41+08:00 HDD 扇区实际上包含前向纠错 FEC,它在概念上与 RAM 上的 ECC 非常相似。 FEC 相对于扇区大小的大小正是 HDD 一直从 512 字节扇区移动到 4096 字节扇区的原因——这绝对减少了开销。这变得很有必要,因为随着 HDD 中位密度的增加,它们需要越来越多的 FEC,而扩大扇区是一种将数据:奇偶校验比恢复到不会牺牲太多原始容量的合理范围的方法。
您的问题是基于错误的假设。大容量存储设备确实使用 ECC 来对扇区中的数据进行错误检测和纠正。
但校正能力有限。
附加到扇区数据的典型 ECC 能够检测错误,然后为跨越有限长度的短突发比特错误提供纠正。
这种错误突发是存储介质的特征性故障。
HDD 传统上使用 7字节Fire 代码,该代码能够纠正长达 11 位长度的错误。
希捷文献表明,后来的 HDD 将 ECC 大小从 50 字节(对于 512 字节扇区)扩展到 100 字节(对于 4K 字节扇区),但忽略了比特数的校正能力。
ECC 传统上附加到磁盘扇区数据的末尾。
采用 NAND 闪存的 SSD 也使用 ECC 并具有有限的位校正能力。
事实上,NAND 闪存制造商对其芯片的最小校正能力(即位数)有规范。
通常使用的 ECC 是BCH(Bose、Chaudhuri 和 Hocquenghem)代码。
ECC 与“带外”区域中的数据存储在 NAND 芯片的单独区域中。
当存储设备从介质中读取一个扇区时,会检查 ECC 以确定是否发生任何错误。
如果未检测到错误,则将扇区数据传输到主机。
如果检测到错误但错误的数量和跨度在 ECC 能力范围内,则纠正扇区数据,然后以软读错误的状态传输到主机。
如果检测到错误并且错误的数量或跨度超出了 ECC 能力,则认为读取失败,并且主机会收到无法纠正的读取错误的通知。
给定长度的 ECC 具有有限的校正能力。
用于 ECC 开销的额外存储量是数据容量和数据冗余之间的权衡以实现完整性。
选择 ECC 是为了对较小的介质缺陷具有最小的校正能力。
随着存储设备生命周期内介质缺陷数量的增加,通过集成控制器和/或主机的文件系统/OS 进行的坏块处理预计将处理下一个级别的恶化。
诸如RAID、廉价磁盘冗余阵列之类的方案也试图适应这种恶化。
IOW 扩展 ECC 以消除未来不良部门的经济学没有意义。
你混淆了两个不同的东西。纠错码内存 (ECC) 用于保护计算机内存 (RAM) 免受损坏。
来自维基百科:
“坏扇区”是指存储介质,例如硬盘驱动器、固态驱动器和闪存驱动器。坏扇区通常是不可恢复的,并且它们上的所有数据都会丢失。这些扇区被标记为坏的并且不再使用。坏扇区通常是对磁盘的物理损坏。例如,硬盘驱动器盘片的磁性氧化物涂层不再能够保持磁性状态,或者 SSD 单元随着时间的推移而磨损。
有些技术可以防止硬盘数据丢失。一个例子是RAID,但它有其局限性。您可以在不丢失数据的情况下丢失整个磁盘,但它不能防止损坏的数据被写入磁盘。还有一些专用于数据完整性的文件系统,例如ZFS。这就是为什么服务器通常使用这些技术中的一种或多种来减轻数据损坏和丢失的原因。当然,他们都应该做备份,以防万一一切都被破坏。
硬盘已经使用纠错来检测和防止少量错误。
每个扇区都有一个 ECC 区域。
上图来自HDD 内部:Tracks and Zones
对于读取的每个扇区,硬盘驱动器使用 ECC 代码来检测读取的内容是否正确,并且对于单个位错误或什至可能是几个位,它可以纠正错误。如果错误太多或扇区完全不可读,则任何软件都无能为力。
要了解有关数据在硬盘上的物理结构的更多信息,您应该阅读HDD 里面的内容:轨道和区域
我相信这是因为即使在没有错误的情况下,允许内存模块绕过坏内存的间接层也会引入不可接受的延迟。也就是说,只要坏内存不是关键的未分页内核内存,操作系统就可以识别 ECC 错误并避免使用这些页面。这个问题和答案描述了有关此过程的一些细节。
主要原因是 DRAM 中没有坏扇区(严格来说是坏单元):
(1) DRAM芯片的坏细胞率低于闪存芯片,那么坏细胞的DRAM芯片被丢弃是正常的(有备用细胞,一些坏细胞很少的芯片可能仍然工作)。闪存芯片有太多坏单元,如果你把每个闪存芯片都扔坏单元,那么根本就没有可用的芯片。
(2) DRAM 芯片在出货前经过全面测试,之后出现新坏单元的几率非常低。但出货后闪存芯片将继续有更多的坏细胞。
DRAM 芯片的 ECC 是为每 64 位数据纠正一位错误或检测两位错误。这个错误是由于软错误造成的,通常是由于强电磁场干扰,而不是由于坏电池。如果发货后有坏电池,则更换 DRAM 模块。
另一方面,闪存芯片的 ECC 可以纠正更多由坏单元引起的错误。
HDD 扇区实际上包含前向纠错 FEC,它在概念上与 RAM 上的 ECC 非常相似。
FEC 相对于扇区大小的大小正是 HDD 一直从 512 字节扇区移动到 4096 字节扇区的原因——这绝对减少了开销。这变得很有必要,因为随着 HDD 中位密度的增加,它们需要越来越多的 FEC,而扩大扇区是一种将数据:奇偶校验比恢复到不会牺牲太多原始容量的合理范围的方法。