最稳妥的硬盘健康检查应分层验证:先用smartctl查smart状态,重点关注reallocated_sector_ct、current_pending_sector和udma_crc_error_count原始值;再执行long自检并分析selftest与error日志;接着用badblocks做物理扇区扫描(-n或-w模式);最后交叉验证结果并结合smartd长期监控。

直接用命令行工具组合检查最稳妥,不依赖图形界面,适合服务器环境。重点不是“一键扫描”,而是分层验证:先看SMART预警信号,再做物理扇区扫描,最后结合日志判断趋势。
第一步:用 smartctl 快速读取 SMART 健康状态
这是最基础也最关键的一步,能发现80%以上的早期隐患:
- 先确认硬盘是否支持并启用了 SMART:
sudo smartctl -i /dev/sdb | grep -E "SMART support"(把 sdb 换成你的盘符)
看到 Enabled 才代表可查;若显示 Disabled,需运行 sudo smartctl --smart=on /dev/sdb 开启 - 执行基础健康评估:
sudo smartctl -H /dev/sdb
输出 PASSED 不代表绝对安全,只是厂商预设阈值未超限 - 重点看三项原始值(Raw Value),不是当前/最差/阈值列:
• Reallocated_Sector_Ct(重映射扇区数):≥10 就该警惕,≥50 建议立即换盘
• Current_Pending_Sector(待映射扇区):>0 表示有扇区读取失败、正等待重映射,持续增长是物理坏道典型征兆
• UDMA_CRC_Error_Count(接口传输错误):突增可能指向线缆、背板或控制器问题,非盘体本身
第二步:触发长自检,获取底层错误日志
SMART 基础检查只反映静态快照,长自检会真实读取全盘扇区,暴露响应延迟和不可校正错误:
- 启动耗时约1–2小时的完整扫描:
sudo smartctl -t long /dev/sdb - 等它完成(可用 sudo smartctl -a /dev/sdb | grep "Self-test execution status" 查进度),再查看结果:
sudo smartctl -l selftest /dev/sdb
重点关注最后一行是否为 Completed without error;若出现 Aborted by host 或 Interrupted,说明过程中有严重读取超时 - 同时检查错误日志:
sudo smartctl -l error /dev/sdb
看是否有重复出现在同一LBA地址的 UNC(Uncorrect)错误——这是物理坏道的铁证
第三步:用 badblocks 做物理扇区级扫描(谨慎操作)
这一步是真正“摸硬盘表面”,但必须区分场景:
- 如果硬盘已挂载为数据盘且有重要数据:
用 非破坏性读取模式,不写入、不改动文件系统:
sudo badblocks -sv -n /dev/sdb
(-n 表示 non-destructive read-write test,实际只读+校验) - 如果是空盘或已备份完准备重装:
可用更彻底的写入模式:
sudo badblocks -sv -w /dev/sdb
(-w 会向每个块写入4种测试图案,耗时长但能暴露不稳定扇区) - 注意:badblocks 扫描的是裸设备(/dev/sdb),不是分区(/dev/sdb1)。扫描前务必 umount 所有相关分区,否则会报错或损坏数据
第四步:交叉验证与决策建议
单一工具结果容易误判,要结合看:
- 如果 smartctl 显示 Reallocated ≥ 20 + badblocks 扫出 ≥ 5 个坏块 + 自检日志里有 UNC 错误 → 这块盘已进入故障加速期,别再当主力盘用
- 如果只有 Current_Pending > 0 但 Reallocated 仍为 0,可能是瞬时干扰(如供电不稳),可重启后重测;若下次检查 Pending 仍在增长,基本确定是物理损伤
- 企业环境强烈建议开启 smartd 后台守护进程:
sudo systemctl enable --now smartd
它会每30分钟自动轮询所有盘,并在指标超标时发邮件或写日志,比人工抽查可靠得多










