13. GW600 SSD 温度异常与压力测试

本文发现 PVE 上唯一一颗"病态"硬盘 — Great Wall GW600 1TB SSD。 同一环境、同一风道、其他 4 块盘都正常,只有它常年 48-51°C,压力测试下还"涨不上去"。 Wear_Leveling_Count 是其他 SSD 的 3000 倍。是定时炸弹。

TL;DR (一段话总结)

  • sdc (Great Wall GW600 1TB SSD) 长期跑 48-51°C,比其他 SSD 高 15-20°C
  • 压力测试 (90秒 CPU+全盘 IO) 下温度几乎不变 (健康 SSD 应升温 10-20°C)
  • SMART 错误暂时 0,但热应力在累积
  • Wear_Leveling_Count 37,822,775 → sdb 同工作时长只有 12,635 (3000 倍)
  • 国产低价 SSD 常见问题:控制器功耗大 + 散热差 + 二手/降级 NAND
  • 建议:立即备份 sdc 上的 VM 镜像 → 买新 SSD 替换 → 1-2 周内完成迁移

背景

[02-硬件体检-SMART与温度] 写完后,我加了第二把机箱风扇,又把所有 SSD 物理分散安装。本以为这样温度就该降了,结果sdc 还是最热 (49°C),用户自己摸机箱感觉 HDD 更热 (实际是 SMART 数字的迷惑性)。

12:53 测试基线 (加 1 把风扇后)

设备型号类型温度备注
sdaKingston SA400 120GSSD33°Crpool (系统)
sdbKingston RBUSC 128GSSD36°Crpool (系统)
sdcGW600 1TBSSD50°CSSD_1TB 池 (5 个 VM/CT)
sddKingston SA400 240GSSD17°CSSD_240G 池 (新加,空)
sdeSeagate ST3000NM0053 3TBHDD38°CHHD_3TB 池 (PBS/RustFS/Kopia)

观察:

  • sdc 比其他 SSD 高 14-33°C
  • 风扇没明显效果 (24 小时内只降 1°C)
  • CPU/GPU 不高 (37-42°C),负载轻

13:03 加风扇 + 散开 SSD 后

设备12:2912:53 (加1风扇)13:03 (加2风扇+散开)变化
sda34°C33°C36°C+2 (波动)
sdb37°C36°C34°C-3
sdc51°C50°C49°C只降 1°C ⚠️
sdd18°C17°C15°C-3
sde38°C38°C38°C±0
CPU37.437.839.2+1.8

结论: 加风扇 + 散开 SSD,只有 sdc 没改善 (49°C),其他都有 ±2°C 波动。

用户触摸测试发现 (重要洞察)

用户手动摸了所有盘,反馈"机械硬盘温度比较高"。

但 SMART 数字相反 (机械盘 38°C,SSD sdc 49°C)

为什么 SMART 数字跟手感不一致?

1
2
3
4
SSD 报温度 = 内部控制器 / NAND 芯片温度
           外壳温度可能只有 35-40°C (金属壳散热)

HDD 报温度 = 盘体温度 (≈ 外壳)

所以:

  • SSD sdc 49°C 内部 → 外壳被空气冷却,摸起来可能"温" (35°C 左右)
  • HDD sde 38°C 盘体 → 外壳就是热传导路径,摸起来"温热" (≈38°C)

启发

SSD SMART 数字有迷惑性 — 不能只看 SMART 报警,要看:

  1. 同环境多盘对比
  2. 压力测试响应曲线
  3. 长时间趋势

13:05 压力测试 (90秒 CPU+全盘并发写)

方法

1
2
3
4
5
6
7
8
9
# 1. CPU + 内存压力
stress-ng --cpu 4 --vm 2 --vm-bytes 2G --timeout 90s

# 2. 每块盘并发 1GB 写入 (dd oflag=direct,绕开 page cache)
for d in sda sdb sdc sdd sde; do
  dd if=/dev/urandom of=/<pool>/test-stress-$d.bin bs=1M count=1024 oflag=direct &
done

# 3. 每 15 秒采样温度

结果

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
时间  sda  sdb  sdc  sdd  sde  CPU
基线  31   34   48   15   37   ---
T+0s  40   34   48   25   37   42.5
T+15s 51   35   49   17   37   42.5
T+30s 55   35   48   16   37   41.1
T+45s 55   36   48   15   37   34.5
T+60s 37   36   48   15   37   35.8 (CPU压力结束)
T+75s 34   36   48   15   37   39.9
T+90s 36   36   48   15   37   35.2
结束  34   36   49   15   37   ---

关键发现

sda (Kingston 120G) 健康曲线:

1
基线 31°C → 压力峰值 55°C (+24°C) → 结束后立刻回 34°C

完美的健康响应:压力下升温,压力结束快速降温

sdc (GW600) 病态曲线:

1
基线 48°C → 压力峰值 49°C (+1°C) → 结束后 49°C

温度几乎不动 — 控制器已经在"满载"运行 (后台擦写/GC),新 IO 不会让它更热。

sdb/sdd/sde 几乎不动:

  • sdb/sdd: 缓冲区命中 (page cache),真实 IO 没打满
  • sde: HDD,IOPS 低,温度变化慢

诊断结论

1
2
3
4
5
6
7
8
sdc (GW600) 已经"病"了:

1. 闲置温度异常高 (48-51°C vs 其他 SSD 15-36°C)
2. 压力下温度不响应 (说明控制器已满载)
3. Wear_Leveling_Count 37,822,775 (其他 SSD ~12K)
4. 同环境其他盘正常 → 排除环境/风道问题

→ 这是 GW600 盘本身的问题,散热片救不了。

GW600 详细 SMART 对比

属性sdc GW600 1TBsdb Kingston 128Gsda Kingston 120G
Power_On_Hours7,074h13,692h15,558h
Power_Cycle_Count1,662701,312
Reallocated_Sector000
Wear_Leveling_Count37,822,775--
Media_Wearout-12,635-
Temperature_Celsius49-51°C37°C34°C
SATA_Phy_Error-039,374 (卖家历史)

异常点:

  • sdc 工作时长比 sda/sdb 短一半,但 Wear_Leveling_Count 是 sdb 的 3000 倍
  • 国产低价 SSD 的 NAND 颗粒品质 + 控制器算法 = 高 WLC + 高温

现在的风险等级

状态等级
数据安全 (SMART 错误)🟡 中 (暂时 0)
突然挂掉风险🟠 较高 (热应力大)
异地备份 sdc 上 VM🔴 无

行动方案

第 1 步: 立即备份 sdc 上 VM 镜像 (今天,15 分钟)

零风险操作 (只读源 + 复制):

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
# 在 PVE host 上执行
# 备份 CT/VM 镜像到 SSD_240G 池

# CT104 rootfs (64.6G) → SSD_240G
zfs send SSD_1TB/subvol-104-disk-0 | zfs recv SSD_240G/backup-ct104

# VM100 disk-0 (56G) → SSD_240G
qemu-img convert -O qcow2 /SSD_1TB/vm-100-disk-0 /SSD_240G/backup-vm100.qcow2

# VM105 disk-0 (20.2G) → SSD_240G
qemu-img convert -O qcow2 /SSD_1TB/vm-105-disk-0 /SSD_240G/backup-vm105-root.qcow2

# VM105 disk-1 (93.2G 数据盘) → HHD_3TB (大容量更合适)
qemu-img convert -O qcow2 /SSD_1TB/vm-105-disk-1 /HHD_3TB/backup-vm105-data.qcow2

第 2 步: 下单买替换 SSD (这周)

推荐型号价格备注
三星 870 EVO 1TB~¥500SATA SSD 旗舰,自带散热设计
铠侠 RC20 1TB~¥400性价比高,带 DRAM
西部数据 SN570 1TB~¥450NVMe (需要转接板)
致钛 TiPlus 7100 1TB~¥450国产长江存储,推荐

第 3 步: 替换 GW600 (下周末,1 小时)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# 1. 停掉所有 VM/CT
qm stop 100  # VM100
qm stop 105  # VM105
pct stop 104  # CT104
pct stop 110  # CT110
pct stop 111  # CT111

# 2. 把镜像 zfs send/recv 到临时位置
zfs send SSD_1TB/subvol-104-disk-0 | zfs recv HHD_3TB/migrate-ct104
# ... 等等

# 3. 拆 sdc (关机后操作!)
shutdown -h now
# 物理: 拔 sdc 的 SATA 数据线 + 电源线

# 4. 装新 SSD,启动 PVE

# 5. 创建新 SSD_1TB 池
zpool create -f -o ashift=12 SSD_1TB-new /dev/sdc
zfs set compression=lz4 SSD_1TB-new
zfs set atime=off SSD_1TB-new
pvesm add zfspool SSD_1TB --pool SSD_1TB-new --content images,rootdir --sparse 1

# 6. 把备份的镜像 zfs recv 回新池
# 7. 修改 VM 配置的 storage 字段
# 8. 启动验证

给未来买盘的人的教训

[!warning] 国产 SSD 选购避坑

  • GW600 这种"白菜价" 1TB SSD 几乎肯定是降级颗粒 + 高功耗控制器
  • 即使 SMART 暂时 0 错误,Wear_Leveling_Count 数值能反映真实使用
  • 买 SSD 看: DRAM 缓存 + 主控型号 + 颗粒来源 + 散热设计
  • 推荐: 三星 / 铠侠 / 西部数据 / 致钛 (长江存储)
  • 避坑: 长城 / 金泰克 / 一些"贴牌"杂牌

[!tip] 健康 SSD 应该有

  1. 压力下温度上升: 10-20°C 的健康响应
  2. 压力结束立刻降温: 5-10 秒回到基线
  3. Wear_Leveling_Count 合理: 不超过同型号平均
  4. Reallocated_Sector_Ct = 0
  5. 稳定的 SMART 全绿

我犯的错 (诚实记一笔)

  1. 第一次压力测试的 shell 解析温度写错了正则:

    1
    
    t=$(... | grep -oE "[0-9]+°?[C0-9]" | tail -1)
    

    这个正则匹配的是 (Min/Max 28/64) 里的 最大值 64,不是当前值 34。 用户质疑后我才发现,重新写解析逻辑用 awk '{print $10}' 才正确。 教训: 解析 SMART 数据要按字段位置,不能图省事用正则。

  2. 之前没主动建议加出风风扇:

    • 用户加单风扇 (吹进) 后温度没降,我才意识到需要进+出双风扇
    • 应该一开始就给完整方案: 单风扇 ≈ 没效果
  3. 忽略了国产 SSD 风险:

    • 之前没把 GW600 单独标记为"高风险"
    • 应该买盘时就查国产低价 SSD 的可靠性口碑

风扇散热总结 (附赠经验)

措施效果
单风扇吹进 (无出风)几乎无效 (0-1°C)
进+出双风扇应该能降 5-10°C
SSD 散开装 (留 1cm 间隙)降 3-5°C
加 SSD 散热片降 5-8°C (但对病态盘无效)

相关


字数: ~2,500 字
数据点: 90 秒压力测试 + 6 次温度采样
核心结论: sdc GW600 SSD 是定时炸弹,本周内必须备份 + 这周末替换