游乐游手机版
首页/系统平台/文章详情

Linux磁盘坏道检测与badblocks修复教程

时间:2026-06-11 07:59
谈到磁盘健康状况时,badblocks 这款检测工具大家应该都很熟悉。不过有个核心概念需要率先厘清:badblocks 本身并不具备“修复”坏道的能力,它的主要职责是扫描与标记。真正让文件系统避开这些物理损伤的,是后续配合使用的 e2fsck 或 mkfs 指令。理解这一分工逻辑,是正确运用该工具的

谈到磁盘健康状况时,badblocks 这款检测工具大家应该都很熟悉。不过有个核心概念需要率先厘清:badblocks 本身并不具备“修复”坏道的能力,它的主要职责是扫描与标记。真正让文件系统避开这些物理损伤的,是后续配合使用的 e2fsckmkfs 指令。理解这一分工逻辑,是正确运用该工具的第一步。

badblocks 检测前务必卸载设备

只要目标设备(例如 /dev/sda1)仍处于挂载状态,badblocks 就会拒绝执行写入类测试。即便是只读测试,也可能因系统缓存干扰而导致漏检。强行运行时最常见的报错信息是:Device or resource busy。这并非权限不足,而是内核层面的保护机制在起作用。

标准的操作流程应为:

  • 先通过 mount | grep sda1 确认分区当前挂载状态。
  • 如果已挂载,务必先执行 sudo umount /dev/sda1 完成卸载。
  • 对于系统盘这类无法直接卸载的分区,需借助 Live CD 或 Live USB 环境来操作。
  • 此外,SSD 用户需注意:-w 写入测试模式会对 NAND 闪存寿命带来额外损耗,非必要情况下,不建议在生产环境的 SSD 上运行此模式。

谨慎使用 -w 参数:写入测试等同于数据清零

badblocks -w 这个参数影响较大,它会向每个扇区写入特定的测试模式(例如 0x00、0xff),然后再读回校验。此过程会彻底覆盖原有数据,且不可恢复。即便只扫描了部分区域,被扫到的块上所有文件都会受损。

因此,一套安全优先的检测顺序非常关键:

  • 首先,执行一次只读检测探路:sudo badblocks -v -s /dev/sda1
  • 如果命令有输出(即发现了坏块编号),再依据情况决定是否使用 -w 参数来强制触发硬盘的重映射机制。
  • 在使用 -w 之前,必须百分百确认:该分区没有重要数据,或已完成完整备份。
  • 需明确,现代硬盘的 G-List(增长缺陷表)重映射通常在写入时自动触发,-w 只是模拟这一动作来暴露问题,并不能“修好”物理损伤。

结果文件如何使用:e2fsck -l 才是关键一步

很多人以为运行完 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。输错会导致命令静默失败,坏块依然会被系统使用。
  • 如果你的文件系统是 XFS 或 Btrfs,那么 e2fsck 就不适用了,需换用对应的工具(例如 xfs_repair 目前不支持直接导入坏块列表)。

4K 扇区硬盘必须加 -b 4096

这是目前比较容易踩坑的地方。现在绝大多数新机械盘和 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” 来捕捉早期线索,往往比定期全盘扫描更为高效和及时。

来源:https://www.php.cn/faq/2382968.html
上一篇Mac全局快捷键自定义设置教程 下一篇Windows网线联网故障修复 解决以太网电缆未插入报错
本站内容用于信息整理与展示,如有侵权或内容问题请及时联系处理。

相关推荐

补充同频道和同主题内容,方便继续浏览更多相关内容。

同类最新

继续查看同栏目最近更新的文章。

更多
麒麟系统字体太小看不清如何调整界面字体大小
系统平台 · 2026-07-01

麒麟系统字体太小看不清如何调整界面字体大小

麒麟系统高分屏字体过小需分层干预:控制中心调整缩放至150%或200%,辅助功能增大文本,命令行设置MateDPI值(2K设200 0,4K设220 0),QT类软件用环境变量QT_DEVICE_PIXEL_RATIO=2,终端取消使用系统等宽字体并改字号,输入法候选字体调至16或18。

Win11记事本默认不换行如何设置为自动换行
系统平台 · 2026-07-01

Win11记事本默认不换行如何设置为自动换行

Windows11记事本默认不自动换行,手动开启仅对当前窗口有效。若要永久启用,可修改注册表,在HKCU Software Microsoft Notepad路径下新建DWORD值fWrap并设为1,或导入含此设置的 reg文件,此后所有新建记事本文件均自动换行显示,无需重复手动操作,一劳永逸。

银河麒麟系统时间快几分钟的调整方法
系统平台 · 2026-07-01

银河麒麟系统时间快几分钟的调整方法

银河麒麟系统时钟快几分钟的解决方法:先用date命令校正系统时间,再执行hwclock--systohc写入硬件时钟;启用systemd-timesyncd并配置阿里云NTP服务器;禁用chronyd避免服务冲突;双系统用户需设置硬件时钟为UTC模式。

Win11多屏下设置软件只在特定屏幕打开的方法
系统平台 · 2026-07-01

Win11多屏下设置软件只在特定屏幕打开的方法

双屏办公时,通过快捷方式添加启动参数、利用Windows窗口位置记忆功能或PowerShell脚本,可让软件自动在副屏打开,免去手动拖拽,提升工作效率。

MacBook如何取消菜单栏蓝牙搜索状态
系统平台 · 2026-07-01

MacBook如何取消菜单栏蓝牙搜索状态

在macOS中,进入系统设置“控制中心”,将蓝牙设为“不显示在菜单栏”即可隐藏图标且功能正常;旧版系统则在蓝牙偏好设置中取消勾选“在菜单栏中显示”。