恢复性能并估计二手 SSD 驱动器的寿命?

恢复性能并估计二手 SSD 驱动器的寿命?

我的旧 128 GB SSD 硬盘已使用约一年半了,现已升级到另一个硬盘。

我想清理我的旧 SSD 以便...

  • 将其性能恢复到接近新的水平

  • 修复它并进行健康检查

我该如何做呢?

答案1

在 Linux 上,只需运行

hdparm --trim-sector-ranges start:count /dev/sda

传递要 TRIM 的块范围而不是 和 ,start以及countSSD 设备代替/dev/sda。它的优点是速度快,并且不会在驱动器上写入零。相反,它只是向 SSD 控制器发送 TRIM 命令,让它知道您不关心这些块中的数据,它可以自由地假设它们在其垃圾收集算法中未使用。

您可能需要以 root 身份运行此命令。由于此命令极其危险,因为它可能立即导致大量数据丢失,因此您还需要传递--please-destroy-my-drive参数hdparm(我没有将其添加到命令行以防止复制和粘贴导致意外数据丢失。)

在上面的命令行中,/dev/sda应将其替换为您要向其发送 TRIM 命令的 SSD 设备。start是要 TRIM 的第一个块(扇区)的地址,是count从该起始地址标记为空闲的块数。您可以将多个范围传递给该命令。

我亲自在装有 128GB Crucial RealSSD C300 的笔记本电脑上使用 Ubuntu 11.04 上的 hdparm v9.32 完成此操作后,必须指出一个问题:我无法将磁盘块总数 (0:250069680) 作为范围传递。我手动(本质上是手动“二进制搜索”)找到了一个足够大的块计数值(40000),并且能够对 40000 个范围的序列发出 TRIM 命令以释放整个磁盘。可以使用如下简单的 shell 脚本执行此操作(在 root 下的 Ubuntu 11.04 上测试):

 # fdisk -lu /dev/sda

 Disk /dev/sda: 128.0 GB, 128035676160 bytes
 255 heads, 63 sectors/track, 15566 cylinders, total 250069680 sectors
 ...  

要擦除整个驱动器,请获取该扇区总数并将下一行中的 250069680 替换为该数字并运行(添加--please-destroy-my-drive):

 # i=0; while [ $i -lt 250069680 ]; do echo $i:40000; i=$(((i+40000))); done \
 | hdparm --trim-sector-ranges-stdin /dev/sda

您已完成!您可以尝试使用 before 和 after 读取磁盘的原始内容hexedit /dev/sda,并验证驱动器是否已丢弃数据。


当然,即使您不想使用 Linux 作为机器的主要操作系统,您也可以通过启动实时 CD 并在驱动器上运行它来利用此技巧。

答案2

首先,让我们先了解一下到底是什么导致了性能下降。如果不知道这一点,许多人会提出不充分的解决方案(我已经看到这种情况了)。整个困境的关键基本上可以归结为以下事实,引自维基百科。记住它,这很重要:

对于 NAND 闪存,读取和编程操作必须一次一页地执行,而解锁和擦除必须以逐块的方式进行。

SSD 由 NAND 闪存组成,而闪存由“块”组成。每个块包含许多“页面”。为了简单起见,假设我们刚购买了一个崭新的 SSD,其中包含一个巨大的内存块,该块由 4 个空页面组成。

为了清楚起见,我用 ∅、1 和 X 来区分空白页、已使用页和已删除页。关键在于从控制器的角度来看,它们之间是有区别的!它并不像 1 和 0 那么简单。因此,首先,我们新驱动器上的页面如下所示:

∅、∅、∅、∅(全为空)

现在,我们将一些数据写入驱动器,最终这些数据会存储在第一页中,因此:

1、∅、∅、∅

接下来,我们写入更多数据,但这次需要两页,因此最终存储在第 2 页和第 3 页中:

1,1,1,∅

空间不够了!我们决定不再需要我们写入的初始数据,因此删除它以腾出空间。:

X,1,1,∅

最后,我们还有另一组需要存储的大量数据,这将占用剩下的两页。这就是在没有修剪的驱动器中性能受到影响的地方!!从上一个状态到这个状态:

1,1,1,1

...需要的工作比大多数人意识到的要多。这也是因为闪存只能以块为单位擦除,而不能以页面为单位擦除,而这正是上述最后转换所要求的。基于 TRIM 和非 TRIM 的 SSD 之间的区别在于什么时候进行以下工作!

由于我们需要利用空白页和已删除页,因此 SSD 需要首先将整个块的内容读入某个外部存储器/内存,擦除原始块,修改内容,然后将这些内容写回到块中。它不再像“写入”那么简单,而是变成了“读取-擦除-写入”。这是一个很大的变化,而且在我们写入大量数据时发生这种情况可能是最不合适的时间。如果提前恢复“已删除”的页面,就可以避免这种情况,这正是 TRIM 的目的。使用 TRIM,SSD 可以在删除后立即恢复我们已删除的页面,或者在 TRIM 算法认为合适的其他适当时间恢复。但重要的是,使用 TRIM 时,这种情况不会发生在我们正在写入的过程中!

如果没有 TRIM,我们最终无法避免上述情况,因为我们的驱动器中充满了数据。幸运的是,一些较新的 SSD 不仅仅具有 TRIM,而且在硬件层面上有效地在后台执行与 TRIM 相同的操作,而无需必要的 ATA 命令(有些人称之为垃圾收集)。但对于我们这些不幸两者都没有的人来说,重要的是要知道将整个驱动器写入零不足以恢复原始性能!!!!!将全零写入驱动器并不向控制器表明闪存中的页面可以写入。在不支持 TRIM 的驱动器上执行此操作的唯一方法是使用以下工具在驱动器上调用 ATA 安全擦除命令:HDDErase(来自 Wayback Machine)

相信有些早期的 SSD 仅在删除分区或执行 Windows 7 的“diskpart clean all”等操作时才支持 TRIM,而在删除单个文件时则不支持。这可能是旧驱动器在执行该命令后似乎恢复性能的原因。不过这对我来说似乎有点模糊……

我对 SSD 和硬件/小工具的了解大多来自anandtech.com。我以为他有一篇很棒的文章来解释这一切,但我无论如何也找不到它!

答案3

显然,标准建议是将整个驱动器全部写入零。我不完全确定为什么这会有所帮助(大量的写入最终不会杀死SSD吗?),但它似乎得到了主要供应商SSD支持论坛的认可。

因此,要在 Windows 中执行此操作:

  • 使用管理员权限启动命令提示符
  • 执行命令diskpart

进入实用程序后,您将看到DISKPART>提示并发出以下命令:

DISKPART> list disk
DISKPART> select disk x

明显地,确保您选择了正确的 SSD 驱动器然后再继续!

DISKPART> clean all
DISKPART> create partition primary
DISKPART> format quick fs=NTFS 

这里的魔力clean all在于将所有零写入驱动器

如果指定全部参数,则可以将每个扇区清零,并删除驱动器上包含的所有数据。

完成此操作后,我可以确认磁盘性能大幅提高。

答案4

我发现通过驱动器写入零并不是最好的方法。虽然它可能在短期内有所帮助,但我发现它绝对没有恢复我的驱动器的全部性能(我有一块相当老的未启用 TRIM 的 Intel-SSD)。经过一年左右的相当频繁的使用后,当 SSD 尝试写入时,我开始遇到 1-2 秒的冻结任何即使在将 SSD 归零之后也是如此。

我发现唯一能完全恢复性能的是一个安全擦除使用hdparm。我养成了每 6-12 个月对 SSD 进行安全擦除的习惯,当 SSD 开始出现一些小问题时。Macrumors 上有人专门为 Mac 做了一个教程关于如何针对 mac* 设备进行操作。

根据我所看到的所有说法,安全擦除会向 SSD 发送一个特殊命令,使其将所有扇区设置为零,并且设置水平要比仅仅使用dd或其他方式低得多。

相关内容