拓十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Linux badblocks 命令详解:磁盘坏道检测与屏蔽实战指南

Linux badblocks 命令详解:磁盘坏道检测与屏蔽实战指南
  • 文档
  • 教程

【免费下载链接】linux-command

Linux命令大全搜索工具,内容包含Linux命令手册、详解、学习、搜集。https://git.io/linux

项目地址:https://gitcode.com/GitHub_Trending/linux/linux-command
点击查看免费下载

本篇技术指南围绕 Linux 命令速查仓库 command/badblocks.md 展开,系统讲解badblocks命令的语法、选项、参数与实战用法,并深入介绍其与fsck、e2fsck、mkfs等磁盘维护工具的协作方式,帮助你掌握硬盘坏道定位、屏蔽与格式化前预检的完整方案。

badblocks 是什么

硬盘是典型的损耗设备,使用一段时间后可能出现坏道等物理故障。出现坏道后如果不及时处理,坏道会持续扩散,造成频繁死机与数据丢失。最稳妥的做法是更换磁盘,但在临时场景下,应当尽快定位并屏蔽坏道所在扇区,避免读写操作触碰这些区域。

badblocks 命令正是用于查找磁盘中损坏区块(bad block)的工具,它通过扫描磁盘的每一个区块来判断哪些位置已经损坏,并将结果输出到指定文件,为后续的文件系统检查与格式化操作提供坏道清单。在本仓库的 README.md 中,badblocks被归类在「磁盘维护」命令分类下,与fdisk、e2fsck、fsck、mkfs等命令并列,是 Linux 磁盘健康管理的基础工具之一。

语法与参数说明

badblocks的基本语法如下:

badblocks(选项)(参数)

选项

-b<区块大小>:指定磁盘的区块大小,单位为字节; -o<输出文件>:将检查的结果写入指定的输出文件; -s:在检查时显示进度; -v:执行时显示详细的信息; -w:在检查时,执行写入测试。

各选项的作用说明如下:

选项含义使用要点
-b <区块大小>指定扫描时使用的区块大小(字节)应与文件系统实际的块大小(如 4096)保持一致,避免误判
-o <输出文件>把坏道区块号写入指定文件输出文件为纯文本,每行一个区块号,供后续fsck -l、e2fsck -l直接引用
-s检查时显示进度适合长时间扫描时掌握任务状态
-v显示详细信息输出每个被检查区块的状态,便于观察
-w执行写入测试通过写入并回读数据判断坏道,会破坏数据,务必先备份

参数

* 磁盘装置:指定要检查的磁盘装置; * 磁盘区块数:指定磁盘装置的区块总数; * 起始区块:指定要从哪个区块开始检查。

三个位置参数按「设备 → 区块总数 → 起始区块」的顺序排列。其中「磁盘区块数」与「起始区块」均为可选参数,当指定了它们时,badblocks只扫描起始区块到区块总数之间的区间,这在只需要针对可疑区域复查时非常高效。

实战一:全盘扫描并输出坏道清单

以 4096 字节为一个区块,对每个区块检查 16 次,并将结果输出到hda-badblocks-list文件中:

badblocks -b 4096 -c 16 /dev/hda1 -o hda-badblocks-list

说明:-c <次数>指定每个区块的检查次数(即原文档实例中「每一个 block 检查 16 次」的由来),次数越多对坏道的检出越可靠,但耗时也越长。

hda-badblocks-list是一个文本文件,每行记录一个坏道区块号,内容大致如下:

cat hda-badblocks-list 51249 51250 51251 51253 51254 …… 61245 ……

这份清单可以直接保存备用,作为后续屏蔽坏道的依据。

实战二:针对可疑区块的局部复查

全盘扫描结果出来后,往往需要对可疑区域做多次复检,以确认坏道的真实范围。下面的命令以 4096 字节为一个区块、每个区块检查 1 次,从第 51000 个区块开始、到第 63000 个区块结束,结果输出到hda-badblocks-list.1文件:

badblocks -b 4096 -c 1 /dev/hda1 -o hda-badblocks-list.1 63000 51000

指定了检查区间后耗时明显缩短,检查时硬盘在短时间内就会产生明显的读写声响。由于每次检查的条件(如磁盘负载、缓存状态)略有不同,输出的结果也不会完全一致,因此建议对可疑区域重复几次同样的操作,每次结果略有差异属正常现象。经过多轮复查后,可以汇总结出最终的hda-badblock-list.final文件,作为可靠的坏道清单。

将坏道清单交给 fsck:跳过坏块继续检查

badblocks本身只在输出文件中标记坏道信息,不会直接修改文件系统。若希望在文件系统检查(fsck)时跳过这些坏块、避免反复触碰损坏区域,可以使用fsck的-l参数加载坏道清单:

fsck.ext3 -l /tmp/hda-badblock-list.final /dev/hda1

这样fsck在检查文件系统时就会把清单中的区块视为坏块并予以跳过。关于fsck命令的更多用法(如-y自动应答、-t指定文件系统类型等),可参考仓库中的 command/fsck.md。

值得一提的是,e2fsck的-c选项可以直接「一并执行 badblocks,以标示损坏的区块」,而-l <文件>/-L <文件>选项则可以分别「将文件中指定的区块加到损坏区块列表」或「先清除损坏区块列表再加入指定区块」,与badblocks的文本输出天然衔接。详见 command/e2fsck.md。

创建文件系统前预检坏道

在格式化磁盘之前先检测坏道,可以避免把文件系统建立在损坏区域之上。badblocks可以随e2fsck和mke2fs的-c选项一起运行(对 ext3 文件系统同样适用),在创建文件系统前先完成坏道检测:

mkfs.ext3 -c /dev/hda1

mkfs.ext3 -c采用只读(read-only)方式检查硬盘,会在格式化时逐个用读取的方式扫描每个区块,并自动标记出错误的区块。用这种方式格式化硬盘需要相当大的耐心,因为整个坏道检测过程是逐块进行的,耗时明显长于普通格式化。

说明:mke2fs的-c选项即「检查是否有损坏的区块」,-l <文件>选项可「从指定的文件中读取损坏区块的信息」——也就是说,你完全可以把前面badblocks输出的hda-badblock-list.final直接交给mke2fs使用,而不是重复扫描。相关选项细节可参见 command/mke2fs.md。通用格式化工具mkfs同样提供-c选项,用于「在制作文件系统前检查该分区是否有坏轨」,参见 command/mkfs.md。

坏道修复流程小结

结合本仓库 command/hdparm.md 中「硬盘坏道修复方法」一节的整理,一套完整的坏道定位与屏蔽流程如下:

检查:smartctl -l selftest /dev/sda # 查看硬盘自检日志,初步定位异常 卸载:umount /dev/sda* # 卸载分区,避免检测时写入造成干扰 修复:badblocks /dev/sda # 扫描坏道,输出清单并据此屏蔽

实际操作时注意:

  1. 检测前务必备份重要数据,-w写入测试会破坏分区内数据;
  2. 对正在使用中的分区做检测,建议先umount卸载,否则结果可能失真;
  3. 全盘扫描耗时长,可以结合-s进度选项监控状态,或利用「区块数 + 起始区块」参数只针对可疑区间复检;
  4. 将最终坏道清单保存为xxx.final文件,通过fsck -l或e2fsck -l在检查时跳过坏块,或在mkfs -c格式化时一并处理。

这样一套「扫描 → 复检 → 清单落地 → 检查/格式化时引用」的流程,就是 Linux 运维中应对硬盘坏道的标准操作闭环,也是本仓库 command/badblocks.md 文档所承载的核心实战价值。

  • 文档
  • 教程

【免费下载链接】linux-command

Linux命令大全搜索工具,内容包含Linux命令手册、详解、学习、搜集。https://git.io/linux

项目地址:https://gitcode.com/GitHub_Trending/linux/linux-command
点击查看免费下载

相关推荐

上一篇:Chunky 项目常见问题解决方案
下一篇:Citizens2 项目常见问题解决方案

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

返回列表