固态硬盘吧 关注:952,749贴子:7,131,103

关于固态硬盘S.M.A.R.T表中0F项的初步深入分析

只看楼主收藏回复

前言:
鼠鼠买了一个傲腾D4800X-750GB,平时都当个宝一样,但今天一看smart表,虽然0E项还是0,但是0F项已经到2731了(买回来才半个多月)。

虽然很清楚nvme固态应该看0E,但我就是想知道0F里面究竟是啥。于是折腾之旅开始了。


IP属地:新疆1楼2025-04-06 16:25回复
    下面接着续写


    IP属地:新疆2楼2025-04-06 16:26
    回复
      2025-08-30 03:25:55
      广告
      不感兴趣
      开通SVIP免广告
      长话短说,鼠鼠试了3个工具(intel MAS,Hard Disk Sentinel PRO,smartmontool)。其实本应该有nvmecli,但鼠鼠没装linux系统所以不了了之。(这D4800X上装系统格式化等操作之前,一定要关闭trim,否则给你表演无响应或掉盘)


      IP属地:新疆3楼2025-04-06 16:28
      收起回复
        工具1:intel MAS(intel固态专属,似乎其他固态也能用?),
        工具1的安装及测试:
        去intel官网下载并安装:英特尔® Memory and Storage Tool CLI (网址:https://www.intel.cn/content/www/cn/zh/download/19520/intel-memory-and-storage-tool-cli-command-line-interface.html),windows版和linux版都能用。

        鼠鼠只会用windows版,安装完后,去cmd或powershell以管理员模式运行(重要),然后输入intelmas并回车,之后弹出一堆令人窒息的字母和标点符号就成功了。
        不要去看那弹出来的一坨,记得去找压缩包里的CLI IMAS User Guide Public(后面简称Guide)。

        为了确定固态位置,所以输入Guide里第22页的3.1.1.5 example里面给出的指令:intelmas show -intelssd
        鼠鼠看到D4800X前面是3,所以它的顺序是3(其实这是启动顺序)。
        所以傲腾D4800X的intelmas起手招式为:intelmas show -intelssd 3(根据Guide里第11页的1.6 Target格式要求,这里使用了show命令,意味着show不是固定的)。
        鼠鼠推荐大家先看Guide里第2.2 Features的表格,但只建议先只用show命令,(除非你知道自己在做什么,)
        根据Guide里第18页的2.2 Features表格的NVMe log命令,似乎能找到我想要的(smart的0F项内容)

        根据它给的example,我们不妨把里面的SmartHealthInfo替换为ErrorInfo,即:
        intelmas show -intelssd 3 -nvmelog ErrorInfo就可以得到:0F项甚至是0E项的具体内容
        已知鼠鼠的D4800x没有0E,只有0F(鼠鼠全盘读取了3次)。
        所以这重复的Status Field代码给鼠鼠淦傻了(你这对着一个不为0的LBA地址,连着用一串命令是怎么回事?command ID是啥?Status Field代码是啥?是这个LBA地方损坏了吗,但为什么全盘扫描3次都是正常的?)
        鼠鼠的研究半路崩殂(


        IP属地:新疆4楼2025-04-06 16:58
        回复
          勇敢鼠鼠不怕困难,软弱的鼠鼠已经无了,接下来是更强的鼠鼠。。
          工具2前言:
          鼠鼠在网上查到nvmecli和smartcti两款工具也能查看非常详细的smart。所以到处去找有没有windows版本的.
          一个好消息:smartcti有windows版;一个坏消息nvmecli没找到windows版(鼠鼠太菜,求大佬放过)
          工具2的安装及测试:
          鼠鼠在chocolatey社区找到了smartcli的windows版本(网址:https://community.chocolatey.org/packages/smartmontools)。
          但powershell说不知道choco命令怎么办?没有办法就要创造办法。
          不妨搜一下大佬们的博客,终于找到了大佬的choco入门(网址:https://www.cnblogs.com/mu-zhang/p/10545388.html),(鼠鼠只是知识的搬运工,),我们只需要里面的2个步骤
          在管理员模式的powershell里,我们输入 set-executionpolicy remotesigned后,推荐选Y,(如果实在担心,可以等安装完smartmontool后,再执行一次这个指令,然后选N就行。毕竟是“蚊子腿“”一样的安全性)
          然后输入choco并回车,看看它理你吗
          开始安装并测试smartctl:
          好的,它理我了我们乘胜追击,接着输入 choco install smartmontools
          (由于鼠鼠安装过了,且不能覆盖安装,所以就不演示了)
          (推荐安装过程中关闭杀毒软件)
          (切记!一定要知道自己在做什么!)
          安装结束后,接着在powershell内输入 smartctl并回车(注意是smartctl,而不是smartcil),
          显示这样就安装成功了。(

          我们直接输入 smartctl -a C: ("C:"是盘符),就能得到这样的
          根据error information,我可以断定intel mas和smartctl结果是一样的(比如最关键的Status只是16进制与10进制的区别),那这status究竟是什么?(好问题,鼠鼠只不过从一个坑跳到了另一个坑
          鼠鼠又挂了


          IP属地:新疆5楼2025-04-06 17:47
          收起回复
            我买了个1.5t的。你说的这个估计还是因为拆了之前的原装转接板,固件是适配之前双转接的。


            IP属地:甘肃来自Android客户端6楼2025-04-06 17:54
            收起回复
              “雄关漫道真如铁, 而今迈步从头越”
              工具3前言:
              由于中文网内关于0F项的解释,全是清一色的“只是固态错误日志”然后并没有解释Status Field值是什么含义。
              但鼠鼠搜外国论坛时发现了意外之喜:Hard Disk Sentinel PRO版也可以查看smart影藏内容。(网址:https://superuser.com/questions/1789164/increasing-number-of-error-log-entries-on-a-nvme-ssd
              所以开始了新旅途。
              工具3的准备:
              这个Hard Disk Sentinel PRO版软件到处都能下载,推荐6.20版本的(一定要PRO),你可以不用注册,只是用来查看特殊信息。
              Hard Disk Sentinel PRO告诉我们:Status:0xc008对应的解释为:Generic: Command Aborted/SQ Deletion [Do Not Retry] (机翻过来是:通用:命令中止/SQ 删除 [不重试])
              再结合“D4800X不关trim后,格式化或进行大量写入会导致卡死或掉盘”,
              我认为结果是
              在触发trim后,D4800X会开始大量写入或清除数据,
              但由于某种原因(应该是固件问题?),
              导致trim进行到某个LBA地址后出现异常导致(表现为:I/O在一个地方不断重试操作,从而导致硬盘无响应,甚至触发掉盘)
              完结撒花 ✿✿ヽ(°▽°)ノ✿


              IP属地:新疆7楼2025-04-06 18:13
              收起回复
                外篇之Error information里面的Status Field分析。
                虽然已经清楚Status:0xc008对应着generic这一串解释,但万一有吧友需要其他的解释呢?
                鼠鼠又去外网论坛搜了一下,发现了Status值的详细解释。(网址:https://superuser.com/questions/1801429/looking-for-smartctl-nvme-log-error-explanation-0xa013-0x8004-and-0x90)终于洞悉了一切。

                以鼠鼠的Status:0xc008为例,0xc008 /2 =0x6004,(说人话:必须先给Status值除以2后,才能使用)
                然后就开始了:
                使用掩码0x7ff,提取右边3个字节(鼠鼠不是计算机专业不懂这个,只能猜),得到0x004(0x6004--->0x004),根据这位大佬整理的Status代码含义,
                0x0??:对应NVME_SCT_GENERIC(说人话:范围很广,包括成功、不支持 opcode 和无效字段等。)

                0x?08:对应
                NVME_STATUS_COMMAND_ABORTED_DUE_TO_SQ_DELETION(由于为提交队列收到的“删除 I/O 提交队列”请求,命令已中止。)说人话:系统或某软件开始消除重复I/O操作,避免写入碎片化(比如软件dymaxIO就可以,但我推荐也不抵制,这个软件现在有点鸡肋,第一次使用要调节它的内存最大使用量,教程网上有,注:dymaxIO是diskeeper的升级版,基本教程一致)

                关于NVME_xxxxxxxx:0x0??之类的解释,大家可以去微软的(nvme.h) NVME_STATUS_TYPES 枚举 解释文档(https://learn.microsoft.com/zh-cn/windows/win32/api/nvme/ne-nvme-nvme_status_types

                关于NVME_xxxxxx:0x?00之类的解释,大家可以去微软的NVME_STATUS_GENERIC_COMMAND_CODES枚举 (nvme.h)解释文档(https://learn.microsoft.com/zh-cn/windows/win32/api/nvme/ne-nvme-nvme_status_generic_command_codes
                注意:
                0x0??的意思是:第一位已确定的前提下(可以是0x1??,0x2??之类的,微软有详细解释),查看第一位的解释。
                0x?00的意思是:在已确定(或不确定)第一位的前提下,查看后1-2位的解释。
                注:
                鼠鼠非计算机科班,也不是爱好编程,只是想研究一下这个原理,文章还有一些是借鉴来的。(所以文章有理解性错误在所难免)
                如果文章有错误,请务必指出,鼠鼠一定会改。


                IP属地:新疆9楼2025-04-06 19:45
                收起回复
                  2025-08-30 03:19:55
                  广告
                  不感兴趣
                  开通SVIP免广告
                  0e了才有0f


                  IP属地:广东来自Android客户端11楼2025-04-06 21:08
                  收起回复
                    我放游戏那个盘0f多,装资料和系统的盘就没有0f,应该还是跟大量读写有关


                    IP属地:内蒙古来自Android客户端12楼2025-04-06 22:59
                    回复
                      这里面还挺复杂,我以前有块硬盘也想查查,但是nvmecli没看明白就算了。


                      IP属地:广东13楼2025-04-06 23:57
                      收起回复
                        我e18 e16群联主控都有of ,之前新盘做测试出来就出来了,还有就是这2块都是转接卡的.不知道是否这个i/0有关


                        IP属地:上海来自iPhone客户端17楼2025-04-07 07:38
                        收起回复
                          我用的三星企业pm983,每次开机0f就+1


                          IP属地:广东来自iPhone客户端18楼2025-04-07 13:22
                          收起回复
                            找到原因了xdm,
                            原来是主板的DMA保护的锅,
                            DMA保护阻碍了傲腾信号传输
                            导致傲腾被强行延迟启动,
                            所以每次开机0F就增加18个,而关闭DMA就不会增长了。
                            刚好就对上(0xc008 /2)=0x6004--(取右边3位)-->0x004(即:0x0??+0x?04=generic+transfer error),
                            原来我这里的transfer error是指:傲腾D4800X想进行DMA数据搬运,结果被主板设置禁止了


                            IP属地:新疆来自Android客户端19楼2025-04-07 15:07
                            收起回复
                              2025-08-30 03:13:55
                              广告
                              不感兴趣
                              开通SVIP免广告
                              番外2,关于查看Status值的软件推荐,如下图:
                              top0:nvmecli
                              虽然只能linux使用(目前),
                              但它自动给你处理了Status值并给出相应解释。
                              你还能根据它的Status field直接查询微软文档。无需多余操作。
                              (本来是想顺便用LVFS更新D4800X固件的,没想到根本没有D4800X的OEM固件更新,参考:https://www.chiphell.com/thread-2415075-2-1.html
                              top1;smartctl
                              linux和windows下都能用,但切记需要下载7.4及以后的版本(否则没有代码解释)
                              Status值需要除以2才能取后3位使用。
                              且windows下安装有点繁琐
                              top2: intel MAS 、Samsung DC Toolkit等专用工具
                              并不是特别推荐,因为它们大多数功能都可以被上面2个代替,
                              用他们主要是为了 解析/使用 特殊指令(一般用不到)
                              top3;Hard Disk Sentinel Pro
                              虽然查看Status最方便,但它的解释通常有问题的(为什么没有除2就直接分析)
                              只相当于Status值の查看器,
                              (当然,如果你Status:0的话,那一定是正确的,因为 0/2 =0)

                              其实吧,微软文档里面的指令代码很多都没有详细解释。(感觉是在抄NVME白皮书?)
                              你也可以问问联网的AI大模型,毕竟中文网站里还是有nvme手册等相关的内容,甚至有大佬的博客)
                              感兴趣可以手动查阅nvme白皮书,(https://nvmexpress.org/specifications/),虽然看了也无法彻底解惑(大概率)
                              也就对问题排查有点作用。(大方面,具体要自己试了)

                              此贴真的真的真的完结,后续我只会打补丁,不会继续内容大更新了。


                              IP属地:新疆20楼2025-04-07 21:52
                              回复