![修复SSD性能下降的软件](https://linux22.com/image/491275/%E4%BF%AE%E5%A4%8DSSD%E6%80%A7%E8%83%BD%E4%B8%8B%E9%99%8D%E7%9A%84%E8%BD%AF%E4%BB%B6.png)
由于需要以块为单位读取和写入数据,当前一代 SSD 的写入速度(对于随机写入)会随着时间的推移而变慢。各种制造商都推出了修复方案来解决这个问题(例如在磁盘空闲时进行“垃圾收集”),但除了擦除整个驱动器并重新开始之外,是否有任何软件解决方案可以修复当前 SSD 文件系统以恢复性能?
要么是在后台运行的程序,要么是可以整夜运行以完成工作的“恢复”工具;我想不出任何这样的工具不能存在的理由,但我还没有找到任何理由。
答案1
不可能存在像针对非 SSD 硬盘的碎片整理软件那样的通用软件。
原因是在非 SSD 硬盘上,数据物理上存储在已知位置。通过了解左心室射血分数数据地址,现在碎片整理工具将数据物理地存储在硬盘上,并可以将其移动到需要的位置。(这几乎是正确的,但并非在所有情况下都是如此)
在 SSD 上,数据也存储在 LBA 地址中(这就是 ATA/SATA 的工作方式)。但是,虽然传统硬盘(在大多数情况下)会将 LBA 地址 1 存储在磁盘的开头,然后是地址 2、3、4、...、N;但 SSD 不会线性存储地址,因为如果您先在地址 1 写入,然后在地址 2 写入,则线性存储会非常慢,因为 SSD 必须重写存储在地址 1 的数据(这意味着读取它,将其存储在缓存中,擦除地址 1 到 N(每次写入数据时,SSD 都需要写入整个 N 地址块),写入地址 1 和 2。这很慢)。这就是为什么 SSD 会将地址 2 存储在距离地址 1“很远”的地方(在内存空间中)。这使得写入速度更快,但当所有块都已使用时,磁盘速度会更慢。
因此,工具无法知道数据是如何存储在 SSD 上的,也无法决定如何执行“碎片整理”之类的操作。唯一的方法是运行硬盘控制器内的程序,使用可以要求 SSD 告知其数据是如何存储的工具,并告知其如何移动(使用内部内存地址而不是 LBA 地址)(没有标准 ATA 命令可以执行此操作,这样做意味着每个 SSD 供应商都需要 1 个工具。我甚至不知道是否可以通过 ATA 协议使用此类专有命令。(WIPER 可能就是这样的工具))或使用著名的 TRIM 命令。
一段时间后,您将获得所有 N 地址的块,但只使用了几个地址(因为您删除了内容等),并且它开始变慢,因为每次写入数据时,都必须读取、擦除、写入一个块。这就是为什么您需要 TRIM 来让大多数块充满数据和新的空块。
PS:需要说明的是,这是一个非常简单的解释。此外,在大多数情况下,您不仅会写入 1 个 LBA 地址的数据,还会写入多个 LBA 地址的数据(因为文件很大),因此您将写入 N 地址的 X 个块,但得到的第 X 个块不是完整的。
答案2
这篇文章很好地解释了为什么 SSD 磁盘在新的时候速度很快,但后来却越来越慢。
答案3
答案4
此外,速度减慢的部分原因是磨损均衡技术故意造成的,以应对每个块的有限写入次数。通过强制进行低级碎片整理,您会大大缩短驱动器的使用寿命。