发布于2026-05-24 阅读(0)
扫一扫,手机访问

说到磁盘健康,badblocks 这个工具大家肯定不陌生。但这里有个关键概念必须先厘清:badblocks 本身并不能“修复”坏道,它的核心工作是检测和标记。真正让文件系统绕开这些物理损伤的,是后续的 e2fsck 或 mkfs 命令。理解这个分工,是正确使用它的第一步。
只要目标设备(比如 /dev/sda1)还处于挂载状态,badblocks 就会拒绝执行写入类测试。即便是只读测试,也可能因为系统缓存干扰而导致漏检。强行运行最常见的报错就是:Device or resource busy。这可不是权限问题,而是内核层面的保护机制在起作用。
正确的操作流程应该是:
mount | grep sda1 确认分区挂载状态。sudo umount /dev/sda1。-w 写入测试模式会对NAND闪存寿命造成额外损耗,除非必要,否则不建议在生产环境的SSD上运行。badblocks -w 这个参数威力不小,它会向每个扇区写入特定的测试模式(比如 0x00、0xff),然后再读回校验。这个过程会彻底覆盖原有数据,且不可逆。哪怕你只扫描了部分区域,被扫到的块上所有文件都会损坏。
因此,一个安全优先的检测顺序至关重要:
sudo badblocks -v -s /dev/sda1。-w 参数来强制触发硬盘的重映射机制。-w 之前,必须百分百确认:该分区没有重要数据,或者已经完成了完整备份。-w 只是模拟这个动作来暴露问题,它并不能“修好”物理损伤。很多人以为运行完 badblocks 就万事大吉,其实不然。badblocks 本身不会让文件系统主动避开坏道,它只是把检测到的坏块编号记录到一个文本文件里(比如 badsectors.txt)。真正让这些信息生效的,是后续的 e2fsck 命令。
假设你已经生成了坏块列表:
sudo badblocks -v -o badsectors.txt /dev/sda1
那么接下来必须执行的关键一步是:
sudo e2fsck -l badsectors.txt /dev/sda1
这里有三个细节需要注意:
e2fsck 同样要求设备处于未挂载状态,否则会报错 The filesystem is mounted。-l 是小写字母L,不是数字1。输错会导致命令静默失败,坏块依然会被系统使用。e2fsck 就不适用了,需要换用对应的工具(例如 xfs_repair 目前不支持直接导入坏块列表)。这是目前最容易踩坑的地方。现在绝大多数新机械盘和 NVMe SSD 的物理扇区大小已经是 4096 字节(即4K),但操作系统为了兼容,默认仍按 512 字节的逻辑扇区来处理。如果不通过 -b 4096 参数明确指定物理扇区大小,badblocks 就会把一个物理扇区错误地当成8个逻辑块来检测,结果就是误报或漏报。
如何验证你的硬盘扇区大小?用这个命令:
sudo fdisk -l /dev/sda | grep “Sector size”
如果输出类似 Sector size (logical/physical): 512 bytes / 4096 bytes,那就说明物理扇区是4K,必须使用 -b 4096 参数。
一个兼顾物理层匹配和后续处理的常用命令组合如下:
sudo badblocks -v -b 4096 -s -o badsectors.txt /dev/sda1
这个命令既确保了检测基准正确,又生成了可供 e2fsck -l 直接使用的坏块列表文件。
最后,需要建立这样一个认知:坏道检测不应是常规的“体检”项目,而更像是一种“确诊”手段。日常运维中,多关注 SMART 属性告警、系统 I/O 错误日志,或者运行 dmesg | grep -i “ata\|nvme\|error” 来捕捉早期线索,往往比定期全盘扫描更为高效和及时。
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
4
5
6
7
8
9