我当然假设带有 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 的目的是在读取时检测错误,并可能纠正这些错误(在一定限度内)后发生数据丢失。