Answers:
在Linux上,只需运行
hdparm --trim-sector-ranges start:count /dev/sda
传递您要修剪的块范围而不是start
和,count
并通过SSD设备代替/dev/sda
。它的优点是速度快,并且不会在驱动器上写入零。相反,它只是将TRIM命令发送到SSD控制器,让它知道您不在乎那些块中的数据,并且可以自由地假定它们在其垃圾回收算法中未使用。
您可能需要以超级用户身份运行此命令。由于此命令非常危险,因为它会立即导致主要数据丢失,因此您还需要将--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
...
要擦除整个驱动器,请使用该扇区总数,并用该数字替换下一行中的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
大功告成!您可以尝试在hexedit /dev/sda
之前和之后读取磁盘的原始内容,并验证驱动器是否已丢弃数据。
当然,即使您不想将Linux用作计算机的主要操作系统,也可以通过启动实时CD并在驱动器上运行它来利用此技巧。
首先,让我们首先了解导致性能下降的原因。在不知道这一点的情况下,许多人会提出不足的解决方案(正如我已经看到的那样)。整个困境的症结基本上归结为以下事实,引自Wikipedia。记住这一点,这很重要:
对于NAND闪存,必须一次一页地执行读取和编程操作,同时解锁和擦除操作必须以块方式进行。
SSD由NAND闪存组成,而闪存则由“块”组成。每个块包含许多“页面”。为了简单起见,让我们想象一下,我们刚刚购买了一个闪亮的新SSD,其中包含一个巨大的内存块,该内存块由4个空页面组成。
为了清楚起见,我用∅,1和X区分空白页,已用页和已删除页。关键是从控制器的角度来看,每一个之间都有差异!它不像1和0那样简单。因此,首先,我们新驱动器上的页面如下所示:
∅,∅,∅,∅(全部为空)
现在,我们将一些数据写入驱动器,并且最终将其存储在该第一页中,因此:
1,∅,∅,∅
接下来,我们再写入一些数据,只是这次足够多,因此需要两页,因此最终将其存储在第二页和第三页中:
1,1,1,∅
我们的空间用完了!我们认为我们实际上并不需要我们编写的初始数据,因此请删除它以腾出空间。
X,1,1,∅
最后,我们需要存储另一组大数据,这些数据将消耗剩余的两个页面。这是没有修剪的驱动器性能命中率所在!从我们的最后一个状态转到此:
1,1,1,1
...需要比大多数人意识到的更多的工作。同样,这是由于Flash只能以逐块方式擦除,而不能逐页擦除,这正是上述最终转换所要求的。当执行以下工作时,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,而不是在删除单个文件时才支持TRIM。这可能是较旧的驱动器似乎在执行该命令后恢复性能的原因。不过这对我来说似乎有点朦胧...
通常,我对SSD和硬件/小工具的大部分了解都来自anandtech.com。我以为他写了一篇很棒的文章来解释所有这些,但是对于我一生来说,我找不到它!
显然,标准建议是对所有零进行全驱动器写入。我不完全确定为什么这样做有帮助(不会大量写入最终杀死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
它会将所有零到驱动器:
如果指定all参数,则可以将每个扇区清零,并且可以删除驱动器中包含的所有数据。
完成此操作后,我可以确认磁盘性能大幅提高。
我还找到了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 闪存345270中的CA错误位 具有可纠正位错误的CB读取扇区340001 CC坏块满标志0 CD最大P / E计数规格5000 CE最小擦除计数3774 CF最大擦除计数65348 D0平均擦除计数4837 D1剩余驱动器寿命4
可怕的数字是剩余驱动器寿命是4 .. %!
以及计算结果:
型号:CRUCIAL_CT128M225 大小:128 GB 序列号:xxxxxxxxxxxxxxxxx456 韧体:2030 开机时间:318 驱动器/操作系统中的TRIM支持:已启用/已启用 工作时间:9个月16天5个小时 读取的总数据:2607.46 GB 书面:19855.94 GB
作为记录,此驱动器最初是在2009年10月购买的,因此已经使用了一年半多的时间。
我发现通过驱动器写入零不是最好的方法。虽然这可能会在短期内有所帮助,但我发现它绝对不能将驱动器恢复到其全部性能(我有一个相当老的未启用TRIM的Intel-SSD)。经过大约一年的大量使用后,即使将SSD置零后,当SSD尝试写入任何文件时,我也开始进入1-2秒冻结。
我发现的唯一的事情是完全恢复表现得安全擦除使用hdparm
。我习惯养成每6到12个月安全擦除我的SSD的习惯,当它开始遇到一些小问题时。Macrumors上的某人制作了Mac专用教程,介绍如何针对mac *设备。
根据我所看到的所有声明,安全擦除会向SSD发送特殊命令,从而使SSD将所有扇区设置为比使用dd
或使用其他方式低得多的级别为零。
在Mac上,检查digilloydTools DiskTester。那里还有一些有趣的数据点,可以看到重新调节对驱动器性能的影响。
cat /dev/zero > /tmp/bigfile
。
ThinkPads具有隐藏的BIOS菜单(可通过http://www-307.ibm.com/pc/support/site.wss/MIGR-68369.html启用)来重置SSD。
要检查(固态驱动器)ssd上剩余的ssd寿命,您将需要安装smartmontools软件包。它包含两个实用程序(smartctl和smartd),它们使用内置在大多数现代ATA和SCSI硬盘中的自我监视,分析和报告技术系统(SMART)来控制和监视存储系统。
对于基于Ubuntu,Mint或Debian的发行版
# apt-get install smartmontools
For Fedora, Centos, or Red Hat based distributions
# yum install smartmontools
您正在寻找Media_Wearout_Indicator。100表示您的ssd有100%的寿命,数字越小表示剩余寿命越短。
# smartctl -a /dev/sda | grep Media_Wearout_Indicator
我的笔记本电脑的输出
233 Media_Wearout_Indicator 0×0032 100 100 000 Old_age Always – 0
如果要查看驱动器的更多详细信息和完整属性,可以运行
# smartctl -data -A /dev/sda
资料来源:namhuy.net/1024/how-to-check-ssd-life-left.html