smartctl是唯一能获取物理磁盘真实健康数据的工具;df、iostat、lsblk仅反映可用性,无法揭示nand擦写次数、坏块增长或固件异常,必须用smartctl -i确认smart启用状态,结合-a查看raw_value趋势,并按设备类型(sata/nvme/raid)指定-d参数才能获取准确指标。

smartctl 是唯一能查物理磁盘真实健康数据的工具
df、iostat、lsblk 这些命令只告诉你“磁盘还能不能挂载”,完全不反映 NAND 擦写次数、坏块增长、固件异常——它们不是健康报告,只是可用性快照。真正要看存储池底层每块盘的寿命和隐患,必须用 smartctl 直读 SMART 原始值。
先确认设备类型再加 -d 参数,否则 smartctl 读不到真实数据
很多机器执行 smartctl -i /dev/sda 显示 SMART support is: Disabled,这不是硬盘坏了,是访问路径被 RAID 卡、USB 盒或 NVMe 控制器拦截了。必须先用 lsblk -d -o NAME,MODEL,SERIAL,TRAN 看 tran 列:
- SATA 盘(
tran=sata):加-d ata,如sudo smartctl -a -d ata /dev/sda - NVMe 盘(
tran=nvme):不用-d,但必须用-a(-A会漏掉Percentage Used) - LSI MegaRAID 卡:用
-d megaraid,N(N 从 0 开始,对应物理盘序号),如sudo smartctl -i -d megaraid,0 /dev/sdb - USB 硬盘盒:大概率要
-d sat,如sudo smartctl -a -d sat /dev/sdc
盯住 RAW_VALUE,别信 VALUE 和 PASSED
VALUE 列是厂商归一化后的假分数,PASSED 只是固件当前快照,RAID 卡还能伪造它。真正关键的是 RAW_VALUE 的趋势变化:
- HDD:重点看 ID 5(
Reallocated_Sector_Ct)、ID 197(Current_Pending_Sector)、ID 199(UDMA_CRC_Error_Count) - SATA SSD:盯 ID 173(
Wear_Leveling_Count)、ID 233(Media_Wearout_Indicator),原始值越接近 0 越危险 - NVMe SSD:看
Percentage Used(越大越差)、Available Spare(低于Available Spare Threshold就告警) - 所有盘:只要
Current_Pending_Sector > 0,说明已有扇区读写不稳定,下次 I/O 就可能崩
存储池健康 ≠ 单盘健康,但单盘异常必拖垮池
ZFS、LVM、Ceph 或硬件 RAID 的“池健康”往往只反映逻辑层状态(比如 ZFS 的 zpool status 显示 ONLINE),但一块盘的 Reallocated_Sector_Ct 已涨到 5,或 NVMe 的 Percentage Used 达到 82,池还在跑,数据却已在静默腐烂。必须对池内每块物理盘单独跑 smartctl -a,尤其注意那些 RAW_VALUE 出现跳变或非零 pending 扇区的盘——它们才是池里最安静的定时炸弹。











