badblocks仅检测坏道,不能修复或屏蔽;需卸载分区后配合e2fsck -l或mkfs.ext4 -l将坏块列表写入文件系统实现跳过。

badblocks 是 Linux 下检测磁盘物理坏道的底层工具,对老旧数据盘做深度扫描前需谨慎操作——它会直接读写磁盘扇区,可能加剧已脆弱区域的损坏,且必须在设备未挂载(umount)状态下运行。
确认磁盘状态并卸载目标分区
先用 lsblk 或 fdisk -l 确认待测设备名(如 /dev/sdb),避免误扫系统盘。若该盘已挂载,必须先卸载:
- 执行 sudo umount /dev/sdb1(替换为实际分区)
- 检查是否卸载成功:mount | grep sdb 应无输出
- 若提示“device is busy”,可用 lsof +D /mount/point 查进程,或重启进 rescue 模式再扫
选择合适的扫描模式与参数
badblocks 提供四种测试模式,老旧数据盘推荐使用最严苛的 非破坏性读写测试(-w),但需注意:该模式会向每个块写入特定数据模式再读回校验,会清空原数据,仅适用于已备份或可丢弃的盘。
- -n:非破坏性只读测试(安全,但漏检率略高,适合初筛)
- -w:写模式(四次不同模式写入+读回,检出率最高,慎用!)
- 加 -v 显示详细过程,-s 显示进度条
- 示例命令:sudo badblocks -v -w -o badsectors.txt /dev/sdb 0(0 表示全盘扫描)
结合 e2fsck 或其他文件系统工具联动分析
badblocks 本身不修复,仅输出坏块编号。若目标是 ext4/xfs 等文件系统盘,建议将结果交由上层工具处理:
- 生成坏块列表后,用 e2fsck -l badsectors.txt /dev/sdb1 将其标记为不可用
- 或在 mkfs.ext4 时用 -l badsectors.txt 预先屏蔽
- 注意:xfs 不支持直接导入坏块列表,需用 xfs_repair -L(慎用,会清日志)或考虑更换介质
扫描后判断与后续动作
扫描耗时取决于盘容量与转速(一块 2TB 机械盘全盘 -w 模式可能需 12 小时以上)。关键看输出:
- 无任何输出 → 当前未发现可复现的读写失败扇区
- 输出若干扇区号(如 123456789)→ 存在物理坏道,需立即停止写入,评估是否迁移数据
- 大量连续坏块或反复报错 → 盘片损伤严重,建议退役,不再用于存储
即使扫描通过,老旧盘也建议启用 SMART 监控(sudo smartctl -a /dev/sdb),重点关注 Reallocated_Sector_Ct、Current_Pending_Sector 等属性。











