由于需要读取数据然后写入数据块,因此当前一代SSD的写入速度随着时间的推移而变慢(随机写入)。 各种各样的制造商都有修补程序来解决这个问题(比如在磁盘空闲的时候做“垃圾收集”),但是有没有软件解决scheme来修复当前的SSD文件系统来恢复性能,而不是擦除整个驱动器并重新启动?
要么是在后台运行的东西,要么是一个可以一夜之间运行的“修复”工具; 我想不出任何这样的工具不能存在的原因,但我一直没能find任何。
不能有像非SSD硬盘的碎片整理软件那样的通用软件。
原因是,在非SSD硬盘驱动器上,数据被存储在一个已知的地方。 通过了解数据的LBA地址,现在可以使用碎片整理工具在硬盘上物理存储数据,并将数据移动到所需位置。 (这几乎是正确的,但不是全部)
在SSD上,数据也存储在LBA地址(ATA / SATA如何工作)。 但是,传统的硬盘驱动器(大多数情况下)将LBA地址1存储在磁盘的开头,接着是地址2,3,4,…,N; SSD不会线性地存储地址,因为如果您在地址1处写入,然后在地址2处写入,线性存储将非常缓慢,因为SSD将不得不重写存储在地址1的数据(这意味着读取数据,将其存储在caching中,擦除地址1到N(每次写入数据时需要写一个N地址的整个块)),写入地址1&2.这很慢)。 这就是为什么SSD将从地址1中将地址2'存储在远离存储空间的地方'。这使得写入速度更快,但是当所有块都被使用时,会使磁盘变慢。
所以,一个工具无法知道SSD上的数据是如何存储的,无法决定如何进行“碎片整理”。 要做到这一点的唯一方法是在硬盘驱动器控制器内运行一个程序,使用一个工具,可以要求SSD告诉他数据如何存储,然后告诉他如何移动(使用内部存储器地址而不是LBA地址)(没有标准的ATA命令来做这件事,这是否意味着每个SSD厂商有1个工具,我甚至不知道是否可以使用ATA协议的专有命令(WIPER可能是一个这样的工具))或使用着名的TRIM命令。
一段时间后,只有几个地址被使用(因为你删除了东西,等等),你得到所有的N地址块,并且开始很慢,因为每次你写入数据时,一个块必须被读取,擦除和写入。 这就是为什么你需要TRIM来获得大部分数据块和新的空块。
PS:只是要清楚,这是一个非常简化的说明。 在大多数情况下,您不仅会写入1个LBA地址的数据,而且还会写很多(因为文件很大),所以您将写入X地址的X块,但是得到的第X个块不是满的。
你最好的select是从制造商获得固件升级。
否则,您需要备份硬盘,清除硬盘上的所有数据,然后从备份中恢复。
Anandtech对使用英特尔HDDErase的stream程有了一个了解
理论实践:了解SSD性能下降问题
本文做了一个很好的工作,解释了为什么SSD磁盘是新的时候快,但后来变慢。
根据我的理解,您需要等待供应商进行固件升级。
此外,这种放缓的部分原因是磨损平滑技术的目的是为了应对每块有限的写入次数。 通过强制执行低级别的碎片整理,您将显着缩短驱动器的使用寿命。