假设我有一些数据,一旦创建,就再也不需要更改。我已将这些数据复制到 SSD,然后将文件系统重新安装为只读,并从现在开始保持这种状态。这样做会延长 SSD 的使用寿命吗?
我想要的不仅仅是简单的“是的,读取无关紧要 - 只有写入 SSD 才会导致磨损”。答案出现在这个问题其中链接到一篇文章,其中回答者提到:
如果某个“页面”或擦除块在很长一段时间内没有被重新编程,那么其中一些位可能会(可能非常小)恢复到未编程状态。
对此有什么要说的吗?你知道有什么研究关注这种行为吗?
答案1
简短回答:
这取决于你正在做什么。仅从 SSD 读取数据仍会导致其内存单元随着时间的推移而退化。以只读方式安装驱动器将阻止你直接写入它,但驱动器的固件仍会产生后台写入。但根据你的使用模式,你可能不必担心任何事情。
长答案:
列出了几种类型的错误Flash错误分析与管理:
- 擦除错误:由重复编程/擦除循环(写入)引起
- 编程干扰错误:在对相邻页面进行编程时,某一页面中的数据被无意更改
- 保留错误:浮栅中编程的电荷逐渐消散
- 读取错误:某个单元中存储的数据会随着相邻单元的重复读取而发生变化
这篇论文读起来很有趣,但深入探讨可能超出了你的问题范围,只能说单从 NAND 存储器读取不会永远保存数据。
根据Jim Cooke 在 Micron 的演讲,对于 MLC,应该每读取 100,000 次擦除并重新编程一次单元;对于 SLC,应该每读取 1,000,000 次擦除并重新编程一次单元。
幻灯片 19:
Cells not being read receive elevated voltage stress
Stressed cells are
• Always in the block being read
• Always on pages not being read
Charge collects on the floating gate causing the cell to appear to be weakly programmed
Does not damage cells; ERASE returns cells to undisturbed levels
Disturbed bits are effectively managed with ECC
幻灯片 20:
Rule of thumb for excessive reads per block between ERASE operations
• SLC – 1,000,000 READ cycles
• MLC – 100,000 READ cycles
If possible, read equally from pages within the block
If exceeding the rule-of-thumb cycle count, then move the
block to another location and erase the original block
Establish ECC threshold to move data
Erase resets the READ DISTURB cycle count
Use ECC to recover from read disturb errors
话虽如此,这些论文似乎是针对 NAND 内存的低级用户(例如 SSD 固件开发人员),并不打算供最终用户使用。所以我怀疑你的驱动器固件已经在后台透明地处理了这个问题。
但回到最初的问题,只进行读取是否仍会导致驱动器磨损?是的。磨损程度如何?这很复杂。如果你假设固件每读取 100,000 次就会将页面单元重写到新位置,并且总是有大量可用块,那么每读取 100,000 次就会有 1 次写入。但除此之外,固件还执行磨损均衡和其他任务,这放大将一次逻辑写入分成多次物理写入。
实际上,除非驱动器几乎已满,并且您不断从整个驱动器读取数据,否则您可能不需要特别担心。但如果您不停地从驱动器读取数据,请密切关注 SMART 表一个月,以了解您的读取模式导致后台写入的速度有多快。当然,始终确保您有多个备份。
答案2
基本上是的,但延伸的答案是“不是永远的”,
SSD 上的数据(组成比特的电子)是隔离的,因此不会泄漏,但如果驱动器上的数据受到辐射(包括电磁波或其他电子),则存储在比特中的电子将要改变状态,从而损坏存储的数据。但这只是极端情况。SSD 上的数据应该可以安全保存数年,甚至数十年。