NAS的固态硬盘隔三差五消失怎么办?我那块当缓存的小盘掉了一个月才抓到现行,病根多半不在盘上

家里那台飞牛NAS装过一块256G的固态当缓存,就是我在固态缓存值不值那篇里提过的那块。有天我登录后台想看看缓存命中率,硬盘列表里它没了——就剩四块机械盘整整齐齐排着,那块固态像从没存在过一样。我心里一沉,第一反应是盘挂了,256G的盘也不值几个钱,但缓存没了存储池直接变裸奔,得马上处理。
结果还没等我下单新盘,重启了一下机器,它又回来了。健康信息看着正常,温度正常,写入量正常。我当是玄学,没管。接下来一个月,它又掉了两回:一次是半夜,第两天早上我看到存储池报了缓存异常;一次是我在旁边刷手机,听见机箱里没动静,登录一看人没了。掉了重启就好,好了过几天又掉——这种「时有时无」的毛病,比直接坏掉还磨人,因为你永远不知道它哪天彻底不回来。
后来我把系统日志翻了个底朝天,才在一个不起眼的角落抓到现行。这篇就把这套抓掉盘的思路写下来:先讲怎么拿证据,再讲我碰到的病根和按概率排的排查顺序。固态盘从列表里消失,八成不是盘要寿终正寝,别急着扔钱。
先拿证据:掉盘那一刻系统其实喊了一嗓子
固态盘消失不是无声无息的。它从SATA链路上断开的那个瞬间,内核会在日志里记一笔,只是这笔账不在你常看的那些页面里,得自己去翻。
飞牛和群晖都开了SSH的话,直接看内核日志:dmesg | grep -i "sata\|link\|reset"。我那块盘掉线时,日志里是这样的:先是SATA link down(链路断了),紧接着ata3.00: disabled(这个SATA口上的设备被禁用),再往后一串hard resetting link(系统在反复尝试重新拉起链路)。时间戳清清楚楚,跟我后台看到盘消失的时刻一分不差。这就是实锤——链路掉了,系统试了没拉回来,才把它从设备列表里摘掉。
群晖不开SSH也有路子。存储管理器里点那块盘,有的版本能看「硬盘日志」;实在没有,就退一步用时间对照法:掉盘那一刻后台管理页面还记着系统事件,把事件时间和硬盘列表的异常时间对上,虽然不如dmesg精确,至少确认「是那一分钟断的」,而不是盘慢慢坏掉的。我那块盘后来确认,三次掉盘的日志时间全在凌晨两点到四点之间,这个规律后来直接帮我锁定了病根,下面细说。
顺带说一句,日志里要看到的不是「坏」,是「断」。SMART健康项都绿的盘照样掉——掉盘是链路层的事,体检报告是体质层的事,两码事。硬盘SMART数据怎么读我写过一篇看RAW值不吓自己,掉盘这事别拿SMART当判据,会误判。
病根一:盘的省电机制,固态掉盘的头号惯犯
日志规律出来后我想了一晚上:为什么偏偏是凌晨?白天全家使劲用NAS它不掉,半夜没人碰它反而掉。后来对上一个词——省电。
固态盘自己有一套低功耗状态机,SATA盘叫DEVSLP和Partial低功耗态,NVMe盘叫APST。空闲一段时间,盘就降到低功耗状态睡过去,要用再醒。这套机制在台式机上没什么问题,但在NAS上有一个隐蔽的坑:NAS的盘常年闲着(缓存盘尤其闲,没有读写任务它就发呆),进低功耗态的次数是普通电脑的几十倍;而有些主控固件写得糙,或者跟主板的SATA控制器脾气不合,睡得进去醒不过来——链路拉不起来,系统那边看到的就是盘掉了。
验证成本低到不像话:把这块盘所在的存储池或缓存设置里,把「硬盘休眠」相关的选项关掉,或者在SSH里给这块盘关掉省电(hdparm -B 254 /dev/sdX把APM级别钉在不禁省电的位置,具体盘符用lsblk先看清楚),让它保持常醒,跑一两周。不掉,病根就定了。我那块盘关掉省电后,一个月没再掉过一次,凌晨的规律性掉盘直接绝迹。零成本,只是多费一两个电,一年撑死十几块。
这一步跟机械盘那个「休眠失败被唤醒」的毛病是表亲,机械盘那套偷写盘的排查我写在休眠老是失败那篇里,两篇可以对着看:机械盘是睡不进去,固态是醒不过来,都是省电机制跟NAS这种7×24场景犯冲。
病根二:SATA口和线,六块钱的老坑
如果掉盘时间没规律,白天晚上随机掉,那省电这条先放一边,看链路本身。
机械盘接触不良的症状我在开机认不到盘那篇里写过:SATA线没插到位,差半毫米就能让链路时断时续,日志里满屏link down。固态盘这条一个不少地继承,而且有两处更容易中招。一是盘位:多盘位机器的固态多半装在3.5寸托架的转接架上,托架螺丝没拧紧,机器一震,转接板跟背板之间的接触就晃;二是供电线分出来的SATA供电头,几块盘串一根线上,接头氧化或松了,供电抖一下链路就掉。日志里如果看到的是link power management相关的报错混着hard reset,链路层的嫌疑更重。
判别法跟机械盘那篇一样:换线、换口、盘跟别的盘位对调,看故障跟谁走。跟盘走,是盘或转接架的事;跟盘位走,是口或线的事。SATA线六块钱一根,先换线再谈别的,这是硬盘圈的祖训。我同事那台机器的缓存盘掉了一个季度,换线十分钟解决。
病根三:主控固件太糙,杂牌盘的高发病
这个病最气人,因为它没得修,只能认。
固态盘的主控固件要处理一大堆并发任务:垃圾回收、磨损均衡、坏块映射,还要维持链路状态机。大牌盘(三星、致态、铠侠这些)固件打磨得多,杂牌白牌盘为了压成本用公版主控加毛坯固件,链路状态机那一块特别容易出岔子:低功耗切换、异常恢复、纠错重试这些边角场景,处理不好就是掉盘。我表弟那块报剩余寿命3%的杂牌盘,毛病链里就带着这个——固件按最坏情况报磨损是小事,链路动不动断一下才是大事,那篇账我算在TBW到多少该换里了。
怎么判是不是固件的锅:换到电脑上、换条线、换个口,照样掉;关了省电也不管用;SMART又查不出任何坏项——盘体没病,行为有病,锅基本就背在固件头上。碰上这种盘,别折腾了,救数据的路只有一条:数据能迁赶紧迁。固件层的掉盘有个特别坏的走向,就是哪次睡过去再也醒不来,直接变砖,主控说走就走这点我在系统盘坏了数据丢不丢那篇里领教过,机械盘好歹还给个前兆,固态经常不给。
所以给NAS挑固态,我的建议一直没变:缓存盘、系统盘这种「掉了伤筋动骨」的位置,宁可贵三五十块买大牌。这种位置的盘,稳比快重要,比容量更重要。测速那套怎么测才不虚标,在固态测速那篇里写过,选盘的时候别只盯跑分。
病根四:温度和供电的边角账
两条概率不高但值得知道的。
温度:固态盘耐热比机械盘好,但杂牌盘的降频保护写得很糙,贴着CPU散热片装的M2盘、或者塞在机械盘堆里没有风道的SATA盘,温度一过70度,有些固件直接断链路自保,日志里看着就是掉盘。硬盘温度多少算正常我写过一篇52度和58度是两回事,固态的刻度宽松些,但掉盘又查无别因的时候,摸一下盘壳,烫手就先给它挪个有风的位置。
供电:固态盘功耗小,一般不背供电的锅,但有一种情况除外——跟好几块机械盘串在同一路SATA供电上,冷开机时机械盘集体起转那一下电流冲得很猛(一块3.5寸盘起转要吃20多瓦,这笔账在认不到盘那篇里算过),同一路上的固态被电压塌陷闪一下,轻则掉链路重则直接失联。家里盘多、又常掉盘的,看看供电线的串法,把固态单独喂一路。
收个尾:照这个顺序查,先动手再动钱包
把整套思路收成一张表,掉盘的时候照着走:
| 顺序 | 查什么 | 命中特征 | 动作 |
| 1 | dmesg或系统事件翻时间戳 | link down+reset记录 | 先拿实锤,看掉的时刻 |
| 2 | 掉盘时间有没有规律 | 集中在凌晨空闲时段 | 关盘省电,零成本先试 |
| 3 | 换SATA线、换口、盘位对调 | 故障跟着盘位走 | 六块钱的线先换上 |
| 4 | 换台电脑接上跑几天 | 到哪都掉、SMART全绿 | 固件的锅,迁数据换盘 |
| 5 | 摸盘壳温度、看供电串法 | 烫手或跟机械盘共线 | 挪风道、单独喂电 |
收尾再提醒一句:缓存盘掉盘有个连带伤害别忽视——它在存储池架构里是有角色的,掉的时候池子会报异常,跟机械盘掉盘的报法很像,但处理完全两码事(机械盘掉盘的存储池侧处理在降级那篇,固态缓存盘遇到直接把缓存拆了重建就行,别按RAID那套惊弓之鸟地拔盘)。我那块256G的,关掉省电之后稳到现在,缓存命中率还在涨。掉盘这毛病,证据都在日志里躺着,先翻日志,再动钱包。

发表评论