smartctl是首选工具,它能在线读取磁盘S.M.A.R.T.数据,无需卸载或停机,对物理坏道有早期预警能力;badblocks是补充手段,但必须离线运行,且只能发现已失效扇区,不能预测。

smartctl 是首选工具,它能在线读取磁盘 S.M.A.R.T. 数据,无需卸载或停机,对物理坏道有早期预警能力;badblocks 是补充手段,但必须离线运行,且只能发现已失效扇区,不能预测。
用 smartctl -H 快速判断磁盘健康状态
这是最轻量、最安全的第一步。只要磁盘支持 S.M.A.R.T.(绝大多数 SATA/SAS/NVMe 硬盘都支持),就能立刻知道是否已出现硬件级异常:
-
sudo smartctl -i /dev/sda先确认 SMART 是否启用 —— 输出中看到SMART support is: Enabled才能继续 - 若显示
Disabled,执行sudo smartctl -s on /dev/sda尝试开启(部分老硬盘或 RAID 卡后端设备不支持) -
sudo smartctl -H /dev/sda查健康总评:输出PASSED不代表绝对安全,但FAILED几乎一定存在物理坏道或严重老化 - 注意:
-H只是摘要,真正要看的是Reallocated_Sector_Ct、Current_Pending_Sector、UDMA_CRC_Error_Count这几项数值 —— 它们非零或持续增长,就是物理坏道正在发生的明确信号
用 smartctl -t long 做全盘扇区扫描
短检测(-t short)只查关键区域,耗时约 2 分钟;长检测(-t long)才是真正覆盖全部 LBA 地址的物理扫描,可能持续数小时 —— 它会主动触发磁盘重映射逻辑,把读失败的扇区标记为 reallocated:
- 执行前确保系统负载较低,避免 I/O 拥塞影响检测精度
- 运行
sudo smartctl -t long /dev/sda后,用sudo smartctl -l selftest /dev/sda查看进度和结果 - 完成后的日志里若出现
Completed: read failure或Aborted due to unreadable sectors,说明该位置已发生物理读取错误 - NVMe 盘请改用
sudo smartctl -t device-self-test,short或long,参数名不同但语义一致
用 badblocks 离线验证并定位坏扇区
这个命令不依赖 S.M.A.R.T.,而是直接对裸设备逐扇区读写 —— 它的结果更“实”,但代价是必须卸载分区、停止所有访问,且对 SSD 不推荐(可能加速磨损):
CentOS Linux 7.9.2009是传统CentOS Linux 7的最后主要版本,也是很多企业历史服务器中仍可能遇到的系统版本。它以稳定、兼容RHEL 7生态、文档丰富和软件支持广泛著称,曾长期用于Web服务、数据库、虚拟化节点和企业内部业务系统。不过CentOS Linux 7已于2024年6月30日停止维护,现在继续使用会面临安全补丁缺失风险。该版本更适合旧业务迁移、历史环境恢复或离
- 先
sudo umount /dev/sda1,再运行sudo badblocks -v -o badsectors.txt /dev/sda(注意:是对整块盘/dev/sda,不是分区) -
-v显示过程,-o把坏块编号写入文件,格式可直接被e2fsck -l使用 - 如果磁盘正在被 LVM、mdadm 或 multipath 管理,
/dev/sda可能不是真实路径 —— 应该查lsblk -S或sudo smartctl -d sat /dev/sgX找到底层 SCSI 设备 - 检测出的坏块编号是逻辑块地址(LBA),不是字节偏移,后续需配合
fdisk -l换算成具体分区位置
为什么 dmesg | grep -i "ata\|nvme\|error" 不能替代专业检测
内核日志里出现 end_request: I/O error 或 timeout 确实提示底层异常,但它无法区分是线缆松动、电源不稳、控制器故障,还是真·盘片划伤。同一错误可能在不同时间反复出现在不同 LBA,也可能只出现一次就消失 —— 这类瞬态错误会被 smartctl 的 Hardware_ECC_Recovered 计数捕获,但 dmesg 不记录上下文。
真正要确认物理坏道,必须交叉比对:S.M.A.R.T. 属性值 + 自检日志 + badblocks 输出。三者指向同一 LBA 区域,才可断定是不可逆的硬件损伤。

















