badblocks仅检测坏扇区,屏蔽需配合mkfs.ext4格式化时导入或e2fsck标记;操作须先卸载分区,推荐-n只读扫描,再通过-l参数将坏块写入文件系统实现跳过。

在Linux中,badblocks本身不能屏蔽坏道,它只负责检测磁盘上的坏扇区;真正实现“屏蔽”(即让系统跳过坏块)需要配合mkfs.ext4(或其他文件系统工具)在格式化时将坏块信息写入文件系统,或通过e2fsck将已知坏块标记为不可用。以下是安全、有效的完整操作流程。
一、确认目标设备并卸载分区
操作前必须确保目标分区未被挂载,否则会损坏数据或导致检测失败:
- 用
lsblk或fdisk -l确认硬盘设备名(如/dev/sdb)和待检测分区(如/dev/sdb1) - 若已挂载,先卸载:
sudo umount /dev/sdb1 - 建议在单用户模式或Live CD环境下操作系统盘,避免干扰
二、使用badblocks进行只读扫描(推荐)
优先选择非破坏性模式(-n),防止误写导致数据丢失:
- 命令示例:
sudo badblocks -n -v /dev/sdb1 > /tmp/badblocks.txt -
-n:非破坏性读写测试(仅读取+校验,不写入) -
-v:显示详细过程 - 输出结果保存到文本文件,供后续使用
- 若磁盘有重要数据且无法备份,可先用
-s(显示进度)+-c 64(每次读取64个块)降低I/O压力
三、将坏块信息写入文件系统(实现“屏蔽”)
检测出坏块后,需将其告知文件系统,才能真正避免使用:
- 如果分区尚未格式化:直接在创建文件系统时导入坏块列表
sudo mkfs.ext4 -l /tmp/badblocks.txt /dev/sdb1 - 如果已是ext2/3/4分区且需保留数据:
sudo e2fsck -l /tmp/badblocks.txt /dev/sdb1
此命令会将坏块加入文件系统的坏块inode(通常为inode 5),之后内核自动跳过这些扇区 - 注意:
e2fsck -l要求文件系统处于未挂载状态,且对已有坏块的处理是追加式,不会覆盖原有坏块记录
四、验证与后续建议
完成操作后应验证效果,并建立长期维护习惯:
- 重新挂载并检查:
sudo dumpe2fs -h /dev/sdb1 | grep -i "bad",查看“Bad blocks count”是否大于0 - 运行
sudo smartctl -a /dev/sdb查看SMART健康状态,若Reallocated_Sector_Ct或Current_Pending_Sector值持续增长,说明物理损伤加剧,应尽快更换硬盘 -
badblocks检测不能替代SMART监控,建议定期用smartd守护进程自动告警 - SSD一般不适用
badblocks——其磨损均衡机制由固件管理,应依赖SMART和厂商工具(如smartctl或nvme-cli)
整个过程核心在于:检测只是第一步,关键在把结果交给文件系统处理。跳过格式化直接用e2fsck -l是生产环境中最常用的安全方案。











