经过20多个小时的等待,4T多的数据终于备份到移动硬盘上去了,接下来就要找原因了。
分析
硬盘柜里的5个盘在系统中的盘符为 sdc~sdg,其中初步判定sdg盘有问题,将5个盘都移除mdadm 组的raid5。
1. 查看硬盘基本信息与 SMART 健康状态
- 这是最基础的检查,分别检查5个盘的信息
smartctl -A /dev/sdc
smartctl -A /dev/sdd
smartctl -A /dev/sde
smartctl -A /dev/sdf
smartctl -A /dev/sdg

- 虽然数据很多,我们只要关心几个关键数据就可以了
| ID | 属性名称 (Attribute Name) | 含义 | 判断标准 |
|---|---|---|---|
| 1 | Raw_Read_Error_Rate | 读取错误率 | 希捷硬盘此值通常很大是正常的,但其他品牌若 RAW 值很高则需注意。 |
| 5 | Reallocated_Sector_Ct | 重映射扇区计数 | 最重要指标。如果RAW_VALUE(原始值) 不为 0 且在增加,说明发现了坏道,硬盘已用备用扇区替换。数值越大,坏道越多。 |
| 9 | Power_On_Hours | 通电时间 | 硬盘累计通电小时数(反映使用时长),休眠累加、只有完全断电才不累加。 |
| 12 | Power_Cycle_Count | 通电次数 | 判断硬盘启停频率。 |
| 187 | Reported_Uncorrect | 无法校正的错误计数 | 读写时发生的无法修复的错误。非 0 值通常意味着严重的物理损坏 |
| 188 | Command_Timeout | 命令超时 | 硬盘响应命令超时的次数, |
| 192 | Power-Off_Retract_Count | 磁头断电回缩次数 | 数字越高,非正常断电越频繁 |
| 197 | Current_Pending_Sector | 当前待映射扇区 | 表示不稳定的扇区,读取出错但尚未被重映射。如果此值不为 0,说明有疑似坏道,下次写入时可能会变成正式坏道(ID 05 会增加)。 |
| 199 | UDMA_CRC_Error_Count | 接口通信错误 | 通常不是硬盘本身坏了,而是SATA 数据线或接口接触不良。尝试更换数据线。 |
实在不想看,就直接复制所有数据丢给AI,让他分析把结果发回来就行了。
5个硬盘的数据下来,发现了几个问题。
-
- 有二个盘的 188 超时值非常高,都几十亿上百亿了,这说明这二个盘可能接口的线松了。
-
- sdg盘的 187 无法修正的错误值也有几万了,说明这个盘基本报废。
-
- 所有盘的 192磁头紧急回缩次数非常高,正常硬盘柜的自动休眠应该是发休眠指令让硬盘停转(磁头归位、盘片停转)以降低功耗,但硬盘本身仍保持通电状态,而不是像断电一下直接切断硬盘电源,不会增加192次数。硬盘柜外接了UPS,**极有可能硬盘柜用久了出问题了,导致借供电不稳定,让硬盘误判为“断电”。
处理:拆出硬盘,用酒精擦拭接口后换位插入硬盘柜。(盘符变了但UUID没变,后面依然以原判符来陈述)
2. 快速筛选
- 使用
smartctl -t short快速通电测试。
smartctl -t short /dev/sdc
...
smartctl -t short /dev/sdg

- 会显示大致什么时候结束,一般是几分钟,然后使用
smartctl -l selftest查看结果
smartctl -l selftest /dev/sdc
...
smartctl -l selftest /dev/sdg

- 如果看到
Completed without error,说明快速自检基本没问题, - 但
sdg出现了Fatal error,说明这盘已经嘎了,不用后续了。
3. 深度检测与修复
使用Badblocks破坏性写入测试,这会强制重写所有扇区,触发硬盘重映射坏道。只针对sdc~f四个盘。
- 安装工具
apt install badblocks -y
- 开始测试,这个时间很长,要几个小时
-w: 写入模式 (破坏数据,反正已备份)。-s: 显示进度。-v: 详细输出。
# 窗口1
badblocks -w -s -v /dev/sdc > /root/sdc_badblocks.log 2>&1
# 窗口2
badblocks -w -s -v /dev/sdd > /root/sdd_badblocks.log 2>&1
# 窗口3
badblocks -w -s -v /dev/sde > /root/sde_badblocks.log 2>&1
# 窗口4
badblocks -w -s -v /dev/sdf > /root/sdf_badblocks.log 2>&1
- badblocks 全盘写入测试,它会向每个 block 写入特定模式(4 种模式),再读回验证,因此是高负载、低速操作,这个速度比较慢,4个盘检查完用了30多个小时。
日志显示四个盘基本都是正常的
Checking for bad blocks in read-write mode
From block 0 to 3907018583
Testing with pattern 0xaa: done
Reading and comparing: done
Testing with pattern 0x55: done
Reading and comparing: done
Testing with pattern 0xff: done
Reading and comparing: done
Testing with pattern 0x00: done
Reading and comparing: done
Pass completed, 0 bad blocks found. (0/0/0 errors)
为什么187 无法校正的错误有,但badblocks没有报错呢?* badblocks 测试的是逻辑扇区。当它尝试读写一个物理坏道时,如果硬盘固件能用备用扇区成功重映射(Reallocate),那么 badblocks 就会认为这个逻辑扇区是“好”的。也有可能是固件在遇到这 18 个错误时,直接放弃了修复,导致 badblocks 在读取时可能得到了错误的数据,但它自己无法校验数据内容是否正确,所以没报错
结论
最后测试下来,5块盘嘎一个(smartctl -t short测试失败),病危一个(187无法校正的错误计数也有几十个),硬盘柜可能存在电源不稳情况。心累了,毁灭吧。
评论区