badblocks 命令详解:Linux 磁盘坏块检测完整使用教程

badblocks是 Linux 系统自带的磁盘坏块检测工具,可识别磁盘或分区中无法稳定读写的坏块,避免坏块导致文件损坏、系统崩溃。本文详细讲解坏块定义、badblocks 核心价值与使用前提,拆解其语法、参数、三种检测模式,搭配实用案例与避坑技巧,帮助用户快速掌握该工具,做好磁盘维护。
什么是 badblocks?
badblocks 是 Linux 系统自带的工具,用于检测 磁盘或分区中的坏块(Bad Block)。
- 坏块指磁盘上的物理损坏区域或不可读写的扇区。
- 坏块如果不处理,可能导致文件损坏或系统崩溃。
- badblocks 可以:
- 只读检测:不会破坏数据;
- 读写检测:写入测试数据,可能会破坏原数据。
什么是坏块?为什么要用 badblocks?
1. 坏块(Bad Blocks)定义
磁盘的物理扇区因磁性衰减、物理损伤、出厂缺陷等原因,无法稳定读写数据,即为坏块。分为两类:
- 物理坏块:磁盘硬件永久损坏,无法修复,只能屏蔽;
- 逻辑坏块:数据写入异常、文件系统错误导致,可通过重写 / 格式化修复。
2. badblocks 的核心价值
- 独立检测:不依赖文件系统,直接扫描磁盘裸设备,适配所有文件系统(ext4/xfs/ntfs 等);
- 多模式检测:兼顾数据安全与检测精度,适配不同场景;
- 可对接文件系统:输出坏块列表,供 e2fsck/mkfs 标记,避免系统再次使用坏块;
- 精准定位:输出坏块的逻辑块地址(LBA),明确故障位置。
3. 重要前提
- 必须卸载设备:检测前务必卸载磁盘分区(umount /dev/sdX),禁止对挂载中的分区执行写测试,否则会破坏数据、导致系统崩溃;
- 权限要求:需 root 权限(sudo)执行;
- 耗时提示:大容量磁盘(如 4T+)检测可能耗时数小时,建议空闲时执行。
基本语法与核心参数
1. 标准语法
badblocks [选项] 设备路径 [结束块号] [起始块号]
- 设备路径:目标磁盘 / 分区(如 /dev/sda、/dev/sdb1);
- 结束块号 / 起始块号:可选,指定检测范围(默认全磁盘)。
2. 常用参数详解
- -v,verbose:显示详细检测过程(块号、错误类型)
- -s,progress:显示扫描进度条(百分比)
- -b,block-size:指定磁盘块大小(字节),默认 1024
- -c,blocks-at-once:一次检测的块数量,默认 64
- -o,output:将坏块列表写入指定文件
- -i,input:读取已知坏块列表,跳过检测
- -p,passes:重复扫描次数,默认 0(1 次)
- -t,test-pattern:自定义测试数据模式(如 0xaa、0x55)
- -f,force:强制检测挂载设备
3. 三大核心检测模式(关键区分)
(1) 只读模式(默认,非破坏性)
命令:
sudo badblocks -v /dev/sdb1
- 原理:仅读取每个块,不写入、不修改数据,检测是否可读;
- 适用场景:已存重要数据、快速初筛坏块;
- 缺点:检测精度低,无法发现“能读但不能写” 的隐性坏块。
(2) 非破坏性读写模式(-n,推荐安全模式)
命令:
sudo badblocks -nsv /dev/sdb1
- 原理:
a.读取块原始数据并暂存内存; b.写入测试模式(0xaa/0x55 等)并验证; c.恢复原始数据,全程不破坏原有数据;
- 适用场景:需深度检测、但必须保留数据的生产环境;
- 优点:安全 + 高精度,日常检测首选。
(3) 破坏性读写模式(-w,高危模式)
命令:
sudo badblocks -wsv /dev/sdb1
- 原理:直接写入测试模式、覆盖所有数据,验证读写一致性;
- 适用场景:空白新磁盘、报废前检测、数据可丢弃的设备;
- 警告:永久清除所有数据,执行前务必备份!
常见案例
1、安全检测(非破坏性)+ 导出坏块列表
目标:检测/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 会记录所有坏块的块号。
2、新磁盘破坏性深度检测
目标:全新/dev/sdc 磁盘,全范围高精度检测
sudo badblocks -wsv -b 4096 -c 4096 -p 2 /dev/sdc
-c 4096:一次检测 4096 块,大幅提速;-p 2:重复扫描 2 次,避免漏检。
3、局部范围检测(跳过磁盘前 100G)
目标:只检测/dev/sdb 从 1000000 号块到末尾(块大小 4K)
sudo badblocks -v -b 4096 /dev/sdb 0 1000000
- 语法:badblocks [选项] 设备 结束块 起始块(注意顺序)。
4、结合 e2fsck 标记坏块
badblocks 仅检测坏块,需用 e2fsck 将坏块加入文件系统黑名单,永久屏蔽:
# 方法 1:直接用 e2fsck 调用 badblocks(推荐,自动匹配块大小) sudo e2fsck -c -v /dev/sdb1 # -c:只读检测;-cc:非破坏性检测 # 方法 2:用 badblocks 导出的列表标记 sudo e2fsck -l badblocks.log -v /dev/sdb1
执行后,ext4 文件系统会拒绝分配坏块,彻底规避数据风险。
5、查看已标记的坏块(ext4)
sudo dumpe2fs -b /dev/sdb1
- 输出文件系统中已记录的所有坏块号。
常见问题与避坑指南
1. 报错:“Device or resource busy”
原因:设备已挂载或被进程占用;
解决:
- 执行
sudo umount /dev/sdX卸载; - 若卸载失败,用
lsof /dev/sdX或fuser -m /dev/sdX查找占用进程,关闭后重试。
2. 块大小不匹配(导致坏块号错误)
问题:badblocks -b 1024检测,e2fsck 用 4096 块,标记位置错位;
解决:检测前先查文件系统块大小:
tune2fs -l /dev/sdb1 | grep "Block size" # ext4 xfs_info /dev/sdb1 | grep "blocksize" # xfs
检测时必须用-b 指定一致的块大小。
3. 检测速度极慢
优化方案:
- 调大
-c参数(如-c 4096),减少 I/O 次数; - 用
-t减少测试模式(如-t 0xaa -t 0x55,仅 2 种模式); - 机械盘避开高峰 I/O 时段,SSD 可适当提速。
4. 物理坏块 vs 逻辑坏块
- 物理坏块:badblocks 重复检测均报错,无法修复,尽快备份数据、更换磁盘;
- 逻辑坏块:
badblocks -w覆盖后消失,可通过格式化修复。
结语
badblocks 是 Linux 磁盘维护的核心工具,兼具独立检测、多模式适配、精准定位的优势,能有效排查坏块风险。掌握其用法,结合 e2fsck 等工具标记坏块,可规避数据损坏、系统崩溃问题,无论是日常检测还是故障排查,都是必备的磁盘维护帮手。
以上关于badblocks 命令详解:Linux 磁盘坏块检测完整使用教程的文章就介绍到这了,更多相关内容请搜索码云笔记以前的文章或继续浏览下面的相关文章,希望大家以后多多支持码云笔记。
如若内容造成侵权/违法违规/事实不符,请将相关资料发送至 admin@mybj123.com 进行投诉反馈,一经查实,立即处理!
重要:如软件存在付费、会员、充值等,均属软件开发者或所属公司行为,与本站无关,网友需自行判断
码云笔记 » badblocks 命令详解:Linux 磁盘坏块检测完整使用教程
微信
支付宝