这篇文章给大家介绍一个可以检测磁盘坏道的命令:badblocks。它能精准识别无法稳定读写的磁盘扇区,避免数据损坏或系统异常。有兴趣的小伙伴可以往下看看~badblocks 是 Linux 系统自带的工具,用于检测 磁盘或分区中的坏块(Bad Block)。
🎯基础认知:什么是坏块?为什么要用 badblocks?磁盘的物理扇区因磁性衰减、物理损伤、出厂缺陷等原因,无法稳定读写数据,即为坏块。分为两类:- 逻辑坏块:数据写入异常、文件系统错误导致,可通过重写 / 格式化修复。
- 独立检测:不依赖文件系统,直接扫描磁盘裸设备,适配所有文件系统(ext4/xfs/ntfs 等);
- 多模式检测:兼顾数据安全与检测精度,适配不同场景;
- 可对接文件系统:输出坏块列表,供 e2fsck/mkfs 标记,避免系统再次使用坏块;
- 精准定位:输出坏块的逻辑块地址(LBA),明确故障位置。
- 必须卸载设备:检测前务必卸载磁盘分区(umount /dev/sdX),禁止对挂载中的分区执行写测试,否则会破坏数据、导致系统崩溃;
- 耗时提示:大容量磁盘(如 4T+)检测可能耗时数小时,建议空闲时执行。
badblocks [选项] 设备路径 [结束块号] [起始块号]
- 设备路径:目标磁盘 / 分区(如 /dev/sda、/dev/sdb1);
- 结束块号 / 起始块号:可选,指定检测范围(默认全磁盘)。
- -v,verbose:显示详细检测过程(块号、错误类型)
- -b,block-size:指定磁盘块大小(字节),默认 1024
- -c,blocks-at-once:一次检测的块数量,默认 64
- -p,passes:重复扫描次数,默认 0(1 次)
- -t,test-pattern:自定义测试数据模式(如 0xaa、0x55)
sudo badblocks -v /dev/sdb1
- 原理:仅读取每个块,不写入、不修改数据,检测是否可读;
- 缺点:检测精度低,无法发现“能读但不能写” 的隐性坏块。
sudo badblocks -nsv /dev/sdb1
a.读取块原始数据并暂存内存;b.写入测试模式(0xaa/0x55 等)并验证;c.恢复原始数据,全程不破坏原有数据;
sudo badblocks -wsv /dev/sdb1
- 原理:直接写入测试模式、覆盖所有数据,验证读写一致性;
- 适用场景:空白新磁盘、报废前检测、数据可丢弃的设备;
目标:检测/dev/sdb1 分区,保留数据,导出坏块到badblocks.log# 1. 卸载分区(关键!)sudo umount /dev/sdb1# 2. 非破坏性检测,显示进度+详细信息+导出结果sudo badblocks -nsv -b 4096 -o badblocks.log /dev/sdb1
- -b 4096:匹配 ext4 默认块大小(避免块号错位);
- 执行后,badblocks.log 会记录所有坏块的块号。
目标:全新/dev/sdc 磁盘,全范围高精度检测sudo badblocks -wsv -b 4096 -c 4096 -p 2 /dev/sdc
- -c 4096:一次检测 4096 块,大幅提速;
目标:只检测/dev/sdb 从 1000000 号块到末尾(块大小 4K)sudo badblocks -v -b 4096 /dev/sdb 0 1000000
- 语法:badblocks [选项] 设备 结束块 起始块(注意顺序)。
badblocks 仅检测坏块,需用e2fsck 将坏块加入文件系统黑名单,永久屏蔽:# 方法1:直接用 e2fsck 调用 badblocks(推荐,自动匹配块大小)sudo e2fsck -c -v /dev/sdb1 # -c:只读检测;-cc:非破坏性检测# 方法2:用 badblocks 导出的列表标记sudo e2fsck -l badblocks.log -v /dev/sdb1
•执行后,ext4 文件系统会拒绝分配坏块,彻底规避数据风险。sudo dumpe2fs -b /dev/sdb1
1. 报错:“Device or resource busy”- 执行sudo umount /dev/sdX 卸载;
- 若卸载失败,用lsof /dev/sdX 或fuser -m /dev/sdX 查找占用进程,关闭后重试。
问题:badblocks -b 1024 检测,e2fsck 用 4096 块,标记位置错位;tune2fs -l /dev/sdb1 | grep "Block size" # ext4xfs_info /dev/sdb1 | grep "blocksize" # xfs
- 调大-c 参数(如-c 4096),减少 I/O 次数;
- 用-t 减少测试模式(如-t 0xaa -t 0x55,仅 2 种模式);
- 机械盘避开高峰 I/O 时段,SSD 可适当提速。
- 物理坏块:badblocks 重复检测均报错,无法修复,尽快备份数据、更换磁盘;
- 逻辑坏块:badblocks -w 覆盖后消失,可通过格式化修复。
最后,badblocks 是 Linux 磁盘维护的好帮手,掌握它的用法,能提前规避大部分磁盘坏块导致的系统崩溃、数据损坏问题。