我的旧 128 GB SSD 驱动器现在大约有一年半的时间了,我已经升级到另一个驱动器。
我想清理我的旧 SSD 以...
将其性能恢复到接近新的水平
修复它并通常对其进行健康检查
我该怎么做?
mmx*_*mmx 56
在 Linux 上,只需运行
hdparm --trim-sector-ranges start:count /dev/sda
Run Code Online (Sandbox Code Playgroud)
传递要修剪的块范围而不是start和count和 SSD 设备代替/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 脚本(在 Ubuntu 11.04 下在 root 下测试)来做到这一点:
# fdisk -lu /dev/sda
Disk /dev/sda: 128.0 GB, 128035676160 bytes
255 heads, 63 sectors/track, 15566 cylinders, total 250069680 sectors
...
Run Code Online (Sandbox Code Playgroud)
要擦除整个驱动器,请获取该扇区总数并将以下行中的 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
Run Code Online (Sandbox Code Playgroud)
你完成了!您可以尝试使用hexedit /dev/sdabefore 和 after读取磁盘的原始内容,并验证驱动器是否丢弃了数据。
当然,即使您不想使用 Linux 作为机器的主要操作系统,您也可以通过启动 Live CD 并在驱动器上运行来利用此技巧。
Jam*_*mes 24
首先,让我们首先了解导致性能下降的原因。在不知道这一点的情况下,许多人会提出不适当的解决方案(正如我已经看到的那样)。整个困境的症结基本上归结为以下事实,引用自维基百科。记住它,这很重要:
对于 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 的驱动器上执行此操作的唯一方法是使用诸如HDDErase(通过 Wayback Machine)之类的工具在驱动器上调用 ATA 安全擦除命令。
我相信有一些早期的 SSD 只在删除分区或 Windows 7 的“diskpart clean all”之类的东西时支持 TRIM,而不是在删除单个文件时支持。这可能是旧驱动器在执行该命令时似乎恢复性能的原因。不过这对我来说似乎有点朦胧......
我对 SSD 和硬件/小工具的大部分知识一般来自anandtech.com。我以为他写了一篇很好的文章来解释所有这些,但对于我的生活,我找不到它!
Jef*_*ood 17
显然,标准建议是对全零进行全驱动写入。我不完全确定为什么这有帮助(很多写入最终不会杀死 SSD 吗?),但它似乎得到了主要供应商 SSD 支持论坛的认可。
因此,要在 Windows 中执行此操作:
diskpart进入该实用程序后,您将看到一个DISKPART>提示并发出以下命令:
DISKPART> list disk
DISKPART> select disk x
Run Code Online (Sandbox Code Playgroud)
显然,在继续之前,请确保您选择了正确的 SSD 驱动器!
DISKPART> clean all
DISKPART> create partition primary
DISKPART> format quick fs=NTFS
Run Code Online (Sandbox Code Playgroud)
这里神奇的是clean all它会将所有零到驱动器:
如果指定 all 参数,则每个扇区都可以清零,并且可以删除驱动器上包含的所有数据。
这样做之后,我可以确认磁盘性能大幅提升。
Jef*_*ood 16
我还找到了一个工具,SSD Life Pro。对我来说有一些坏消息。

至于它如何计算,它使用 SMART SSD 指标。显然它试图根据 SMART 数据进行预测:
这很棘手,因为它还需要知道数据何时被写入以进行估计,但这里是基础数据:
01 读取错误率 7 09 开机小时数 7085 0C 电源循环计数 318 B8 初始坏块计数 15 C3 程序失败块计数 0 C4 擦除失败块计数 0 C5 读取失败块计数 0 C6 读取扇区 5468243171 C7 写扇区 41640920876 C8 读命令 100482453 C9 写命令 417315851 来自闪存的 CA 错误位 345270 具有可纠正位错误的 CB 读取扇区 340001 CC 坏块满标志 0 CD 最大 P/E 计数规格 5000 CE 最小擦除次数 3774 CF 最大擦除次数 65348 D0 平均擦除次数 4837 D1 驱动器剩余寿命 4
可怕的数字是剩余驱动寿命,即 4.. %!
以及由此产生的计算:
型号:CRUCIAL_CT128M225 大小:128 GB 序列号:xxxxxxxxxxxxxxxxxx456 固件:2030 通电次数:318 驱动器/操作系统中的 TRIM 支持:启用/启用 工作时间:9个月16天5小时 读取的数据总量:2607.46 GB 写入:19855.94 GB
作为记录,该驱动器最初是在 2009 年 10 月购买的,所以它已经使用了一年半多一点。
小智 6
我发现通过驱动器写入零并不是最好的方法。虽然它可能在短期内有所帮助,但我发现它绝对没有将我的驱动器恢复到其全部性能(我有一个相当旧的非 TRIM 支持的 Intel-SSD)。经过一年左右的大量使用后,当 SSD 尝试写入任何文件时,我开始遇到 1-2 秒的冻结,即使在将 SSD 归零之后也是如此。
我发现的唯一的事情完全恢复的表现是一个安全擦除使用hdparm。我已经养成了每 6 到 12 个月安全擦除一次我的 SSD 的习惯,当它开始出现一些小问题时。Macrumors 上的某人制作了一个关于如何为 mac* 设备执行特定于mac 的教程。
根据我所看到的所有声明,安全擦除会向 SSD 发送一个特殊命令,使其将所有扇区设置为零的级别要低得多,然后只是使用dd或其他东西。
| 归档时间: |
|
| 查看次数: |
31142 次 |
| 最近记录: |