SSD 页面重新编程

SSD 页面重新编程

如果新数据包含先前数据的 1 位子集,是否可以重新编程 SSD 中的页面(无需擦除它)?

我知道擦除为全 1 只能在块级别进行(并且会导致磨损)。我的问题是 SSD 是否可以利用这种情况,即唯一需要的修改是将某些 1 变为 0,我认为这可能不需要擦除就可以实现。

我想这不仅仅是一个是或否的问题。它可能在物理上不可能实现,不受当前电路/固件支持,或者已经实现。到底是哪一种呢?

答案1

如果新数据包含先前数据的 1 位子集,是否可以重新编程 SSD 中的页面(无需擦除它)?

理论上是的。NAND
闪存页面可以多次写入而无需擦除操作。
您可以在具有(原始)NAND 闪存芯片和 U-Boot 命令的 SBC 上进行实验。

这可能是物理上不可能的,当前电路/固件不支持,或者已经有人这样做了。到底是哪一种情况?

该想法没有在 SSD 固件中实现,因为它不切实际。

首先,读取原始擦除块并进行比较的时间会成为每次写入操作的额外开销,而且通常会浪费时间,因为获得肯定结果的期望值可能很低。
降低写入速度的代价可能不值得为了设备寿命的微小增加而牺牲。

其次,更重要的是,您忽略了更新扇区 ECC(错误校正代码)的必要性(通常存储在页面的 OOB(带外)区域中)。
如果只“写入”页面的扇区数据区域而不更新 ECC,则对该页面的任何后续读取都将无法通过 ECC 验证测试。
新的 ECC 值也像页面数据(只需要写入 1 到 0 的位,而不需要写入 0 到 1 的位)的可能性太低,不值得考虑。

相关内容