passed不等于安全,failed须立即备份停用;真实坏道需交叉验证smart原始值(如id5/197/187非零)与badblocks扫描结果,且须按设备类型(raid/usb/nvme)正确指定smartctl访问参数。

直接看 smartctl -H 输出结果,PASSED 不代表安全,FAILED 必须立刻停用并备份;坏道是否真实存在、在哪、能不能继续用,得靠 SMART 属性值 + badblocks 扫描交叉验证,不能只信一个命令。
smartctl -H 只是第一眼判断,关键要看原始值
很多运维误以为 smartctl -H /dev/sda 返回 PASSED 就高枕无忧。其实这个自检结果可能被 RAID 卡缓存、被固件屏蔽,甚至压根没跑完。真正有说服力的是三项原始值:
-
Reallocated_Sector_Ct(ID 5)> 0:已有扇区被重映射,物理损伤已发生 -
Current_Pending_Sector(ID 197)> 0:当前读不出的扇区数,正等着重映射——这是最危险的信号,说明坏块正在“浮出水面” -
Reported_Uncorrect(ID 187)或Offline_Uncorrect> 0:校验失败且无法修复,基本坐实硬件缺陷
执行时别漏掉 -A 参数:sudo smartctl -A /dev/sda | grep -E "(5|197|187|198)"。如果看到 RAW_VALUE 列非零,哪怕只有 1,也该进入下一步排查。
badblocks -sv 是挂载中盘的唯一可行扫描方式
业务系统盘不能卸载?那就只能用只读扫描。但要注意:badblocks -sv 只能发现完全无法读取的扇区,对写入失败、偶发延迟、缓存异常类坏块毫无反应。
Linux系统管理专家,覆盖12大模块:用户权限、SSH、存储、网络、systemd、防火墙、日志监控、备份恢复、TLS证书、Ansible、容器、IaC。提供配置、验证、加固、监控、备份、自动化、故障排查、回滚闭环。关键词:useradd、sudo、sshd_config、chmod、SEL...
- 必须加
-c 128提升吞吐,否则扫一块 4TB 机械盘可能耗时两天以上 - 输出重定向到文件:
sudo badblocks -sv -c 128 /dev/sdb1 > /tmp/badblocks_readonly.log - 若想提高置信度,加
-p 3:同一扇区连续读三次全失败才记入,避免误报 - SSD 上禁用此命令——NAND 坏块由主控管理,
badblocks的扇区级读会干扰磨损均衡,加速老化
e2fsck -l 标记后不生效?顺序和文件系统类型是硬门槛
badblocks 只输出扇区号列表,它本身不改文件系统结构。真正让内核避开这些位置,要靠 e2fsck,但有两个致命限制:
- 命令顺序不能错:
sudo e2fsck -l /tmp/badblocks_readonly.log /dev/sdb1,log 文件必须在设备名之前 - 仅限 ext2/ext3/ext4;XFS 和 Btrfs 完全不认
-l参数,XFS 得用xfs_repair清日志(但不等价于坏块隔离),Btrfs 需依赖btrfs check --repair(慎用,可能丢数据) - 标记前必须
umount,否则报错 “Device or resource busy”,此时用lsof +D /mount/point查进程,别直接kill -9 - 标记完运行
sudo dumpe2fs -h /dev/sdb1 | grep -i "block count",对比总块数是否下降——这是唯一验证标记是否落地的方法
RAID 卡、USB 盒、NVMe 的 SMART 获取方式完全不同
直接对 /dev/sda 跑 smartctl -a 失败,大概率不是硬盘坏了,而是你没选对访问模式:
- LSI MegaRAID 卡下:用
sudo smartctl -a -d megaraid,0 /dev/sda,其中0是槽位编号,查法:/opt/MegaRAID/MegaCli/MegaCli64 -PDList -aAll - USB 硬盘盒:必须加
-d sat,否则报 “Read Device Identity failed”;最好拆出来直连主板 SATA 口再测 - NVMe 盘:
sudo smartctl -a /dev/nvme0n1,不加-d,加了反而报错;注意用-A而非-a才能拿到Percentage Used(ID 233)这类关键寿命指标 - 阵列卡显示 [UU] 并不等于健康——SMART 数据可能被缓存,一定要看原始值,尤其 ID 197
坏块定位最难的不是命令怎么敲,而是搞清“你在跟谁对话”:是裸盘、RAID 虚拟盘、USB 封装层,还是 NVMe 主控?选错访问路径,所有结果都是幻觉。










