Linux磁盘坏块检测需先用df -h、lsblk -f、fdisk -l确认目标设备;默认用sudo badblocks -sv只读扫描,加-p 3可对疑似坏块复核三次以降误报;最后卸载分区并用e2fsck -l标记坏块,使文件系统避开。

Linux磁盘坏块检测主要靠 badblocks 工具,它能识别物理层不可靠的存储区块。关键不是“能不能扫”,而是“怎么扫得准、不伤数据、结果能用”。下面讲几个真正实用的要点。
确认目标设备再动手
误选设备可能清空系统盘。别凭印象猜 /dev/sda,先用命令明确设备身份:
- df -h 查看已挂载分区和使用情况
- lsblk -f 列出所有块设备及其文件系统类型
- sudo fdisk -l 显示磁盘容量、分区表、起始/结束扇区(尤其适合未挂载盘)
重点核对容量、型号、是否已挂载。例如外接硬盘通常显示为 /dev/sdb 或 /dev/nvme0n1p1,而系统盘多为 /dev/sda1 或 /dev/mapper/ubuntu--vg-root。
安全优先:默认用只读模式(-sv)
绝大多数日常检测只需读取验证,不改写任何数据,既安全又高效:
- 命令示例:sudo badblocks -sv /dev/sdb1 > badsectors.txt
- -s 实时显示进度(如 “37% done”),避免干等
- -v 输出详细信息,包括检测模式(read-only test)、总块数、发现坏块编号
- 输出重定向到文件,方便后续处理
该模式不会影响现有数据,适合在备份后、换盘前或怀疑硬盘异常时快速筛查。
需要更高置信度?加 -p 参数重复验证
单次扫描可能把瞬时干扰(如电源波动、线缆接触不良)误判为坏块。权威建议至少做 3 次重复检测:
- 命令示例:sudo badblocks -sv -p 3 /dev/sdb1 > badsectors.txt
- badblocks 会自动对每个疑似坏块重试 3 次读取
- 只有 3 次全失败的区块才会被最终记录,大幅降低误报率
注意:-p 不代表“跑 3 轮全盘扫描”,而是对初筛出的问题块做复核,耗时增加有限但可靠性显著提升。
标记坏块让文件系统真正避开它
扫描出坏块只是第一步。若不通知文件系统,它仍可能把新数据写入这些位置:
- 确保目标分区已 卸载(sudo umount /dev/sdb1)
- 对 ext2/ext3/ext4 文件系统,用:sudo e2fsck -l badsectors.txt /dev/sdb1
- 对其他文件系统(如 XFS、Btrfs),需结合 mkfs 或厂商工具预处理;不能直接用 fsck -l
- 该操作会将坏块加入文件系统的“坏块列表”,后续格式化或挂载时自动跳过
⚠️ 切勿在已挂载的根分区上运行 e2fsck -l —— 系统可能崩溃。如必须处理系统盘,应从 Live USB 启动后操作。










