服务器坏道诊断与修复
一、先判断:逻辑坏道还是物理坏道?
1. 看系统日志(最快初判)
dmesg | grep -iE "bad sector|i/o error|error"
- 出现
bad sector/I/O error/blkdev error→ 极大概率 物理坏道 - 只有
filesystem error/inode/superblock→ 多半 逻辑坏道(文件系统损坏)
2. 用 smartctl 检查硬件健康
# 安装
# CentOS/RHEL: yum install -y smartmontools
# Ubuntu/Debian: apt install -y smartmontools
# 查看磁盘列表
lsblk
# 或 fdisk -l
# 检查磁盘健康
smartctl -a /dev/sda
关键指标(看这 3 行):
| SMART 指标 | >0 的含义 |
|---|---|
| Reallocated_Sector_Ct(重分配扇区) | 物理坏道(已替换) |
| Current_Pending_Sector(待映射) | 正在变坏,物理坏道 |
| Offline_Uncorrectable | 物理坏道,不可修复 |
只要这三个有一个 > 0,就是物理坏道,不要幻想修复。
3. 用 badblocks 扫描定位坏块
# 先卸载分区(必须)
umount /dev/sdb1
# 只读扫描(安全,不破坏数据)
badblocks -v -s /dev/sdb1 > bad.log
- 有输出具体块号 → 物理坏道
- 无输出、但
fsck报错 → 逻辑坏道
二、逻辑坏道:修复方法(能修好)
特征:smartctl 正常、dmesg 只有 filesystem 错误、badblocks 无坏块。
ext4 修复(最常见)
umount /dev/sdb1
fsck.ext4 -y /dev/sdb1 # 自动修复
# 或更稳:e2fsck -fy /dev/sdb1
mount /dev/sdb1 /mnt
XFS 修复(主流新服务器)
umount /dev/sdb1
xfs_repair /dev/sdb1
mount /dev/sdb1 /mnt
修复后判断:
- 错误消失 → 逻辑坏道,已解决
- 反复出现 → 底层物理即将坏,尽快备份换盘
三、物理坏道:只能隔离,不能修复
特征:smartctl 重分配/待映射 > 0、dmesg 报 bad sector、badblocks 扫出坏块。
步骤 1:立刻备份(最重要)
物理坏道会扩散,先备份所有数据!
步骤 2:扫描并导出坏块列表
umount /dev/sdb1
badblocks -v -s /dev/sdb1 > bad.log
步骤 3:让文件系统屏蔽这些坏块(ext4)
e2fsck -l bad.log /dev/sdb1
作用:文件系统以后绝不往这些块写数据,防止扩散。
步骤 4:XFS/Btrfs 无法拉黑,只能分区隔离
把坏块所在范围单独分一个区,不挂载/不格式化/隐藏,系统即绕开。
步骤 5:最终建议
| 情况 | 处理 |
|---|---|
| 少量坏块 + 不增长 | 可临时隔离使用 |
| 坏块持续增加 / 有异响 / SMART 指标恶化 | 直接换盘 |
四、一句话总结
dmesg+smartctl全绿、只有文件系统报错 → 逻辑坏道:fsck/xfs_repair修复SMART 重分配/待映射 > 0、dmesg 有 bad sector → 物理坏道:备份 + 隔离 + 尽快换盘
关联文档
- ../system/Linux — Linux 运维基础
- 逻辑坏道 vs 物理坏道 — 概念对比
最后更新:2026-06-01
关联文档
- 逻辑坏道 vs 物理坏道 — 坏道类型对比
- Linux — Linux 系统管理主页