![如果带有 NAND 的 SSD 具有 ECC,除非两个投票器都失败,否则所有位都会正确吗?](https://linux22.com/image/1513928/%E5%A6%82%E6%9E%9C%E5%B8%A6%E6%9C%89%20NAND%20%E7%9A%84%20SSD%20%E5%85%B7%E6%9C%89%20ECC%EF%BC%8C%E9%99%A4%E9%9D%9E%E4%B8%A4%E4%B8%AA%E6%8A%95%E7%A5%A8%E5%99%A8%E9%83%BD%E5%A4%B1%E8%B4%A5%EF%BC%8C%E5%90%A6%E5%88%99%E6%89%80%E6%9C%89%E4%BD%8D%E9%83%BD%E4%BC%9A%E6%AD%A3%E7%A1%AE%E5%90%97%EF%BC%9F.png)
我当然假设带有 ECC 的 NAND SSD 通过使用投票系统来更正数据,即如果两个位持有者的位匹配。美国宇航局在第一艘飞船上使用了 5 个。那么 SSD 怎么会通过飞写损坏您的重要数据,以及当它具有 ECC 时这项年轻技术面临的所有这些问题!?
答案1
我当然假设带有 ECC 的 NAND SSD 正在使用投票系统来纠正数据
嗯,不是。ECC 通常不通过比较多个副本来工作。相反,它只需要 10 位存储数据即可检测和纠正 1 位错误。
一个简单的方法是显示这里。
那么 SSD 怎么会通过飞写损坏你的重要数据呢?这项拥有 ECC 的年轻技术又面临哪些问题呢?
因为存储在 NAND 芯片上的数据并不是唯一可能被损坏的地方。
答案2
我当然假设带有 ECC 的 NAND SSD 会使用投票系统来纠正数据,即,如果两个位持有者的位匹配。
您错误地假设了 ECC 的工作原理。
NAND 所需的 ECC 功能因芯片而异。NAND
芯片制造商将指定每个块必须可(由主机)纠正的最小位数。位数越少,NAND 越可靠。
(经测试,缺陷位数超过此数量的块将被制造商标记为“坏块”。)
安装在 SBC 上的 NAND 通常需要每 ~512 字节 1、2 或 4 位的校正能力。SSD 中的芯片可能 (?) 需要更多位。ECC
的长度取决于代码实现;例如,对于使用 BCH 代码的 NAND 控制器,它可以是 7 个字节,以实现 4 位的校正能力。
Linux 内核可以在启动期间报告此 NAND 属性:
[ 0.780000] nand: device found, Manufacturer ID: 0x2c, Chip ID: 0xf1
[ 0.780000] nand: Micron MT29F1G08ABAEAWP
[ 0.790000] nand: 128 MiB, SLC, erase size: 128 KiB, page size: 2048, OOB size: 64
[ 0.790000] atmel_nand 80000000.nand: minimum ECC: 4 bits in 512 bytes
[ 0.800000] atmel_nand 80000000.nand: Initialize PMECC params, cap: 4, sector: 512
ECC 数据是在代码(例如 Hamming、BCH 或 Fire)算法(评估多项式)写入数据块之前生成的。
在读取时,逆算法会输入数据和 ECC 字节,以得出正确读取、可纠正读取或不可纠正读取的判定。
这些算法可以用硬件或软件实现。
那么 SSD 怎么会通过飞写损坏你的重要数据呢?这项拥有 ECC 的年轻技术又面临哪些问题呢?
你似乎暗示 ECC 应该防止或者抑制数据“损坏”。ECC
没有这种能力;ECC 的目的是在读取时检测错误,并可能纠正这些错误(在一定限度内)后发生数据丢失。