Linux 磁盘坏道的识别与处理思路

8次阅读

应先查SMART再运行badblocks:Reallocated_Sector_Ct>0或Current_Pending_Sector>0才需扫描;只读扫描用sudo badblocks -b 4096 -s -v /dev/sdX,写验证(-w)会覆数据;标记坏块后须用e2fsck -l配合ext分区,且坏道会蔓延,需持续监控SMART。

Linux 磁盘坏道的识别与处理思路

先看 SMART,别急着跑 badblocks

坏道不是“扫出来才算有”,而是“SMART 已经在报警了”。很多管理员一发现读写慢或 rsync 反复失败,就直接上 badblocks -w,结果清空数据还漏掉真正隐患。
正确顺序是:先查 smartctl -a /dev/sdX,重点关注两行:

  • Reallocated_Sector_Ct > 0 → 备用扇区已被启用,物理损伤已发生;
  • Current_Pending_Sector > 0 → 当前读取不稳、尚未重映射,正是 badblocks 最该验证的目标。

如果这两项为 0,且系统运行稳定,大概率没有活跃坏道——此时跑 badblocks 属于过度干预。

只读扫描 vs 写验证:选错模式等于自毁

badblocks-w(写验证)模式会往每个块写入特定模式再读回,彻底验证但**覆盖原始数据**。生产环境绝对禁用,除非你确认盘上无任何有效数据。
日常检测请死守这条命令:
sudo badblocks -b 4096 -s -v /dev/sdX > bad-blocks.txt
其中:

  • -b 4096 匹配现代磁盘逻辑块大小(避免误报);
  • -s -v 显示进度和细节,方便中断后定位;
  • 重定向到文件,为后续 e2fsck -l 提供输入。

注意:不能对已挂载的分区执行扫描(/dev/sda1),必须卸载或使用只读 Live 环境。否则可能触发内核 I/O 错误甚至 panic。

标记坏块 ≠ 修复硬盘,只是让文件系统绕开它

linux 不会“修复”物理坏道,只能让 ext2/3/4 文件系统永久避开这些块。核心动作是把 badblocks 输出的块号喂给 e2fsck
sudo e2fsck -l bad-blocks.txt /dev/sdX1
这步操作要求:

  • 目标分区必须是 ext 系列(XFS 或 Btrfs 不支持此流程);
  • 分区需处于未挂载状态(umount /dev/sdX1);
  • e2fsck 会将坏块写入块组描述符的“坏块位图”,此后新建文件绝不会分配到这些位置。

若误用于 LVM 逻辑卷,请确保设备路径指向底层物理分区(如 /dev/sdb)而非 LV(如 /dev/mapper/vg-lv),否则标记无效。

别信“修复完成就安全了”,坏道只会蔓延

一次成功标记,不代表问题终结。坏道是物理退化过程的表征,Current_Pending_Sector 数值可能随时间上升,新坏块会持续出现。
必须建立监控闭环:

  • 每周用 smartctl -a 抽查关键盘;
  • 对高负载盘(如数据库日志盘)每季度做一次只读 badblocks 扫描;
  • 一旦 Reallocated_Sector_Ct 连续增长,立即安排更换,别等 RaiD 掉盘。

最常被忽略的一点:usb 移动硬盘或老旧 SATA 盘,smartctl 可能无法获取完整 SMART 数据——这时 badblocks -s -v 是唯一可信手段,但务必提前备份。

text=ZqhQzanResources