用smartctl检测机械硬盘健康度和坏道的核心是读取s.m.a.r.t.数据并执行自检,关键在于理解重要指标(如id 5、197、199等)、正确触发短/长/运输自检,并结合-passed状态、原始值与阈值解读结果。

用 smartctl 检测机械硬盘健康度和坏道,核心是读取 S.M.A.R.T. 数据并执行自检,关键在于理解哪些指标重要、如何正确触发检测、以及怎样解读结果。
确认硬盘设备名并查看基础 S.M.A.R.T. 信息
先用 lsblk 或 sudo fdisk -l 确认目标硬盘(如 /dev/sda),再运行:
sudo smartctl -i /dev/sda
检查是否启用 S.M.A.R.T.(输出中需有 SMART support is: Enabled)。若为 Disabled,尝试开启:
sudo smartctl -s on /dev/sda
接着查看详细健康状态:
sudo smartctl -H /dev/sda
返回 PASSED 表示基础健康通过;FAILED 或 DISK FAILURE IS IMMINENT 需立即备份。
重点检查关键 S.M.A.R.T. 属性值
运行以下命令查看原始属性数据:
sudo smartctl -A /dev/sda
重点关注这几项(不同厂商编号略有差异,但含义通用):
- Reallocated_Sector_Ct (ID 5):已重映射扇区数。非零值说明已有坏道被替换,>0 就该警惕,持续增长则风险高
- Current_Pending_Sector (ID 197):等待重映射的扇区。>0 表示存在不稳定扇区,读写时可能触发重映射,是坏道前兆
- UDMA_CRC_Error_Count (ID 199):接口校验错误。过高可能反映数据线、供电或主板 SATA 接口问题,非硬盘本体故障但影响稳定性
- Seek_Error_Rate (ID 7) 和 Raw_Read_Error_Rate (ID 1):需结合“阈值(THRESH)”与“当前值(VALUE)”看——VALUE 低于 THRESH 即预警(注意:部分厂商 VALUE 越小越差,有些相反,优先信“WORST”和“RAW_VALUE”)
执行离线与自检测试定位坏道
S.M.A.R.T. 自检分三级,按强度和耗时递增:
-
短自检(Short):约 2 分钟,快速扫描关键区域
sudo smartctl -t short /dev/sda -
长自检(Long):几十分钟到数小时,全盘扫描,能发现隐藏坏道
sudo smartctl -t long /dev/sda -
厂商级自检(Conveyance):仅限部分硬盘(如笔记本 HDD),检测运输损伤
sudo smartctl -t conveyance /dev/sda
启动后可用 sudo smartctl -c /dev/sda 查看进度与剩余时间。测试完成后,用 sudo smartctl -l selftest /dev/sda 查看日志——重点关注“Status”列是否为 Completed without error,若有 Failed 或 Aborted,对应 LBA 地址即坏道位置。
补充建议与注意事项
不要在生产环境或未备份的系统盘上直接运行长自检,避免 I/O 阻塞影响服务。检测期间尽量减少磁盘写入。若发现大量重映射或待处理扇区,即使自检通过也建议更换硬盘。SSD 同样支持 smartctl,但坏道逻辑不同(无物理坏道概念,关注 Media_Wearout_Indicator、Reallocated_NAND_Blk_Ct 等)。定期(如每月)做短自检 + 查看 -H 和 -A 是低成本预防手段。











