固态硬盘掉速(掉速盘)

in 默认分类 with 0 comment

2024-10-12T02:28:04.png

有一台主机,双硬盘,一个机械,一个nvme固态(系统盘)。
症状:开机很慢,关机很慢,系统运行很卡,软件打开也卡,干啥都卡。
初步怀疑机械盘有坏道导致的开机慢,把机械盘拔掉后问题依然存在。

以下操作都是将nvme固态插在硬盘盒通过USB连接测试的。(速度受限于USB接口)。

查看一下固态smart,但是在smart表中并无异常,0E和0F结果都是0。

S.M.A.R.T,全称叫Self-Monitoring, Analysis, and Reporting Technology
"自我监测,分析和报告技术"。可以用来预测分析硬盘的潜在问题。

2024-10-12T02:52:58.png

固态硬盘的SMART表定义则目前还没有统一标准,不同厂家甚至不同主控都有可能出现相同ID不同定义,所以用一般的SMART软件查看是没任何意义的,虽然你可以看到值,但是这个值对应的ID解释可能完全不是那么回事。

接着用HD Tune软件对固态硬盘进行全盘读取测试,下图的曲线图看出来速率最低到1.2mb/s,平均139mb/s,这一块nvme固态硬盘显然是有问题的。
2024-10-12T02:23:44.png

也可以用DiskGenius检测一下固态的坏道,虽然固态没有磁道,但是有扇区。只要能辅助你验证这块硬盘是否有异常即可。
2024-10-12T02:23:58.png

我们用DiskGenius对这块固态进行trim

TRIM指令使操作系统通知固态硬盘哪些数据是无效的(已删除),可以被内部擦除。在没有TRIM的情况下,固态硬盘无法事先知道哪些数据已经被删除,只能等系统要求在相同地方写入数据的时候才知道哪些数据是可以被擦除的,因此,这种情况下固态硬盘无法在适当的时机做出最好的优化,影响数据写入性能。对于固态硬盘及支持TRIM指令的机械硬盘(叠瓦式硬盘)启用TRIM指令,可以提高写入性能、减少耗损、延长寿命。

2024-10-12T03:05:15.png

2024-10-12T02:24:30.png

重新在读取测试,好像有点用,但不大。
2024-10-12T02:24:44.png

把所有分区删掉,只分一个区,执行格式化(不选快速格式化),再TRIM一次
2024-10-12T02:24:56.png

复测一下DG和HDtune,结果如下
2024-10-12T02:25:07.png

2024-10-12T02:25:13.png

最后插回主板上m.2接口,装上系统后测试如下,软件运行以及开机,关机,速度都恢复到正常。
2024-10-12T02:25:28.png

以下来自贴吧汇总
1.为什么smart表里没有显示出明显的故障信息呢?
首先,smart表能记录的故障信息,有2个前提:
1、硬盘出现了硬性故障,比如出现实质性的坏块;
2、主控的工作机制正常,能够发现这些坏块并且记录到表中,比如0E这一项体现出来的数据。
但是当上述两个前提条件不存在的时候,smart表就不会更新故障信息。
图例所展示的掉速盘,就属于第一种情况,这不是硬性故障,没有出现任何实质性的坏块,所以主控自然不会记录。
那么主控会有工作不正常的情况吗?当然会有,比如吧友们经常提到的,有些硬盘刚开始smart表里是正常,一扫坏道扫出来好几个,再回头看smart表的时候,发现0e项更新数据了,这就是主控懒政不干活,它没能及时发现故障也就不更新数据,那你自然什么都看不出来。

2.这种非硬性故障的掉速盘,是怎么形成的?
一般是由于主控的trim机制不够积极,盘内剩余空间没有被及时trim,导致了脏盘能力下降,进而掉速。所以解决方案就是手动给盘子trim。

3.为什么和trim有关?
首先,windows系统在对文件做删除的动作时,执行的只是逻辑层面的删除,而存在于硬盘上的数据,并没有做物理层面的彻底删除,这一点,机械硬盘和固态硬盘都是一样的。
但是不同点在于:机械硬盘采取直接覆盖写入的方式,所以就不需要做真正的物理层面的删除。也就是说,机械硬盘在写入数据的时候,不会管你盘子上是不是真的存在物理数据,只要操作系统在逻辑层面认为这里没数据,那我就硬写,会把之前的数据直接覆盖掉。
而固态硬盘由于闪存颗粒无法直接覆盖写入,所以必须先做删除的动作,才能继续写(其实我也不懂为什么闪存颗粒不能直接覆盖写入),但是固态的主控又不是实时做这种删除的动作,它总是要延迟一段时间,才去删除的,这个删除的动作,就叫trim。

4.为什么固态的主控不能实时trim呢?
因为主控的策略,要兼顾性能和寿命,就没法去做实时trim,这是最重要的一个原因。
当然,还有其他原因,比如当时主控整忙着做其他事情,比如主控正在写入或读取,主控的温度过高等等,那么很显然当前时间段就不允许立即trim,主控总得要等到空闲的时候,才有精力去做trim吧?
但实际上,很多情况下,主控也并不是一空闲就立即trim,它们在摸鱼不干活。因为,trim的机制总是要更多顾及到寿命的。trim积极,意味着刚刚擦出掉数据的那部分颗粒,又可以写入数据了,那怎么保证磨损均衡呢?说好的要坏一起坏,这样才能达到寿命最大化,现在主控老是trim,一直trim,那就会导致有一部分颗粒是要先被磨损掉的,从而整体硬盘的寿命没法保证了。
所以,厂家肯定会优先保寿命,而不是优先保性能。
所以,主控觉得,我最好是等你全盘数据都写满之后,我再执行trim,这样所有颗粒同时完成一次完整的P/E,这样对寿命是最友好的。
但是问题就来了,主控懒得trim,用户数据过了半盘之后,它脏盘能力就会变得很差,用户就会觉得卡啊!比如我1T的硬盘,表面上看,是只使用了500G,还剩500G的空间,然鹅由于主控没有及时trim,实际上我的真正可用空间或许都不到50G,那能不卡吗?

那么到这里,问题相对就清晰了,掉速的主要原因,就是因为主控没有及时trim,导致固态的脏盘能力变差,从而感知到卡顿。
只不过有的性能好一点的盘子,掉速不明显,用户感知不到,差劲一点的盘子,掉速明显。
这两种情况,用DG扫描坏道延迟,会有明显不同的结果,掉速掉的越严重,DG扫描出来的结果就是大延迟的块越多,掉速不明显的,大延迟的块少,这个很容易理解吧?
可以再配合HDtune的全盘读取曲线图,来互相印证。

Responses