![当磁盘接近满的时候,SSD 如何实现磨损均衡?](https://linux22.com/image/1447337/%E5%BD%93%E7%A3%81%E7%9B%98%E6%8E%A5%E8%BF%91%E6%BB%A1%E7%9A%84%E6%97%B6%E5%80%99%EF%BC%8CSSD%20%E5%A6%82%E4%BD%95%E5%AE%9E%E7%8E%B0%E7%A3%A8%E6%8D%9F%E5%9D%87%E8%A1%A1%EF%BC%9F.png)
我正在尝试理解这一点。假设我有一个 256GB 的 SSD,其中 180GB 已被永久文件(操作系统、已安装的程序等)占用。剩余的 70GB 左右用于创建和删除新文件。这是否意味着该部分的 NAND 芯片会比文件未修改的区域更早磨损?或者 SSD 也会随着时间的推移移动未更改的文件?
答案1
SSD 会随着时间的推移移动不变的文件。
首先,您拥有向操作系统公开的虚拟扇区(不要与文件系统群集混淆),然后您拥有闪存芯片中的物理单元。当闪存控制器分配/取消分配单元时,它会相应地重新映射虚拟扇区,以便对操作系统透明(相同的虚拟扇区可能在不同时间出现在闪存单元中的不同位置)。
其次,SSD 实际上有备用单元,这些单元不能用作可用空间。它们专门用于损耗均衡、减轻写入放大和重新映射死单元。这样,即使您的 SSD 上没有可用空间,闪存控制器仍然有空间执行损耗均衡。
假设您有一个 500 GB 的 SSD,并且已 100% 满载。现在假设其中 499 GB 的数据是一个永远不会改变的文件,但您有一个 1GB 的文件一直在改变。如果您删除该 1GB 文件,然后复制另一个 1GB 文件,则闪存控制器将在此时执行以下两项操作之一:
- 所有或部分新数据将被分配给备用单元,而旧单元则仍处于修剪状态。
- 499 GB 数据中永远不会改变的 1 GB 单元将被复制到其他可用单元。然后,旧单元将被擦除并用新数据重写。
在这两种情况下,呈现给操作系统的虚拟扇区都不会改变,因此操作系统不知道实际发生了什么。闪存控制器保存着内存单元到虚拟扇区的映射表。
磨损均衡算法的目标是尽量均衡地使用所有单元,即使这需要移动数据才能实现。这个过程确实会减慢驱动器的速度,而且(讽刺的是)它确实会给闪存单元带来额外的磨损。它被称为写入放大这是 SSD 的一个重大问题。SSD 实际采用的磨损均衡算法及其缓解写入放大的方式是 SSD 制造商的专有商业机密,因此这只是该过程的一般描述。