坏道必须分两层查——先用smartctl读smart健康日志判断风险,再用badblocks逐扇区实测;仅依赖任一工具均易漏判或误判。

直接说结论:坏道必须分两层查——先看 SMART 健康状态,再用 badblocks 扫物理扇区;只跑一个,大概率漏判或误判。
怎么用 smartctl 快速判断硬盘是否“快不行了”
smartctl 不扫扇区,它读的是硬盘自己上报的健康日志(S.M.A.R.T.),对机械盘和 SSD 都有效,但前提是硬盘支持且功能已启用。
- 先确认工具已安装:
yum install -y smartmontools(CentOS 7/8)或dnf install -y smartmontools(CentOS Stream / 9+) - 检查设备是否支持 SMART:
smartctl -i /dev/sda,看到SMART support is: Enabled才能继续 - 看整体健康结论:
smartctl -H /dev/sda,输出里只有PASSED才算过关;FAILED或WARNING就该准备换盘 - 查具体风险项:
smartctl -a /dev/sda | grep -E "(Reallocated|Pending|Uncorrect|UDMA_CRC)"-
Reallocated_Sector_Ct> 0 表示已有扇区被映射替换,是坏道前兆 -
Current_Pending_Sector> 0 表示有扇区读写失败、尚未重映射,正在“悬停”状态,极可能下一秒就变坏块 -
UDMA_CRC_Error_Count高,说明数据线/接口接触不良,不是盘本身问题,但也会触发假坏道报警
-
注意:smartctl 对 NVMe 盘要用 smartctl -a -d nvme /dev/nvme0n1,不加 -d nvme 会报错或返回空。
为什么不能跳过 badblocks 直接信 SMART
SMART 是预测性指标,不是实时扫描;有些盘(尤其老旧或山寨 SATA 盘)根本不更新 S.M.A.R.T. 计数,或者固件屏蔽了关键属性。这时候坏道已经存在,但 smartctl -H 仍显示 PASSED。
badblocks 是实打实逐扇区读(默认只读模式),能发现 SMART 漏掉的真实不可读区域。
CentOS Linux 7.9.2009是传统CentOS Linux 7的最后主要版本,也是很多企业历史服务器中仍可能遇到的系统版本。它以稳定、兼容RHEL 7生态、文档丰富和软件支持广泛著称,曾长期用于Web服务、数据库、虚拟化节点和企业内部业务系统。不过CentOS Linux 7已于2024年6月30日停止维护,现在继续使用会面临安全补丁缺失风险。该版本更适合旧业务迁移、历史环境恢复或离
- 必须先卸载目标分区:
umount /dev/sda1,否则会干扰文件系统或报错 - 最小可用命令:
badblocks -s -v /dev/sda1 > /root/badblocks.log-
-s显示进度,避免干等无反馈 -
-v输出每个坏块编号,方便后续处理
-
- 如果要测得更严(比如怀疑有不稳定扇区),加
-w做写测试:badblocks -w -s -v /dev/sda1,但注意:这会清空该分区所有数据,仅限未挂载且无重要数据时使用 - 扫描范围可限定:
badblocks -b 4096 -c 64 -s -v /dev/sda1 1000000 500000表示从第 500000 个块开始,扫 100 万个块,块大小 4K,每次批量检查 64 块(加快速度)
警告:badblocks 扫的是裸设备扇区,不是文件系统逻辑块。所以它报告的数字,要和 e2fsck -l 或 mke2fs -l 配合才能真正屏蔽——别只存日志不处理。
发现坏块后,怎么让系统“绕着走”
Linux 不会自动避开坏扇区,必须手动把坏块列表喂给文件系统工具。- 前提:文件系统是 ext2/ext3/ext4(
e2fsck支持),且分区已卸载 - 把
badblocks输出的坏块写入文件后,执行:e2fsck -l /root/badblocks.log /dev/sda1-
-l参数会把文件里每一行数字当作扇区号,加入 ext 文件系统的坏块表
-
- 如果是其他文件系统(如 XFS),
fsck不支持-l,只能重建文件系统并跳过坏区:mkfs.xfs -d agcount=1 -l size=128m /dev/sda1(不推荐,数据全丢) - 更稳妥的做法:用
dd把坏块位置填零(dd if=/dev/zero of=/dev/sda1 seek=XXXX count=1 bs=4096),再运行e2fsck -c让内核标记为坏块(但部分老内核不支持)
关键点:坏块一旦出现,说明磁盘物理层已劣化。标记只是临时止血,别指望修好——记录日志、备份数据、安排更换才是正解。










