温馨提示×

dmesg日志中的磁盘错误怎么办

小樊
31
2025-12-19 21:01:58
栏目: 编程语言

Linux dmesg 磁盘错误的定位与处置流程

一、快速判断错误类型

  • 读取/校验类错误:出现如“end_request: I/O error, dev sda, sector NNN”“Buffer I/O error”“sense key: Medium Error / UnrecovData”,通常意味着介质(扇区)或数据路径异常,需优先关注。
  • 总线/线缆/控制器类错误:出现“exception Emask 0x10”“SError: { UnrecovData 10B8B BadCRC }”“failed command: READ FPDMA QUEUED”“hard resetting link”,多与SATA 线缆、供电、主板控制器/驱动、兼容性相关,也可能是盘体早期故障的信号。
  • 文件系统类错误:如“EXT4-fs error”“attempt to access beyond end of device”“deleted inode referenced”,多为底层 I/O 异常后的文件系统不一致,需要先保数据再修复。

二、立即止损与数据保护

  • 先别重启:在错误活跃期重启,可能触发更多读取失败,甚至导致系统无法启动。
  • 立刻备份:优先把关键数据拷到其他磁盘/远程主机;若系统盘已变为只读,更要避免继续写入。
  • 只读挂载:若分区仍可访问,先以只读方式挂载,减少二次损伤:mount -o ro,remount /mountpoint。
  • 定位分区与占用:用 df -h 确认受影响挂载点;用 fuser -m -v -i -k /mountpoint 结束占用进程后再做卸载/修复。

三、硬件层排查与修复

  • 查看健康信息:smartctl -a /dev/sdX,关注 Reallocated_Sector_Ct、Reallocated_Event_Count、Current_Pending_Sector、UDMA_CRC_Error_Count、Media_Error_Count 等关键属性;异常攀升通常意味着介质或链路问题。
  • 坏道检测:
    • 只读扫描:badblocks -s -v -o /root/bb.log /dev/sdX(或针对分区)。
    • 写入检测/重映射(会破坏数据,务必先备份):badblocks -s -w /dev/sdX END START(END 在前,START 在后)。
  • 结果处置:
    • 少量“可重映射”扇区:写入检测可能触发盘内重映射;若 smart 的 Reallocated 计数上升,说明盘在自我隔离。
    • 大量坏块/反复出现:属于物理坏道倾向,建议更换磁盘;必要时先隔离坏块所在区间(不建议长期使用)。
  • 链路问题排查:若出现 10B8B/BadCRC/NCQ 失败/链路硬复位,优先更换SATA 线缆、检查供电与主板控制器,并确认驱动/固件版本;必要时交叉验证到另一台主机。

四、文件系统修复与恢复

  • 卸载后检查:umount /dev/sdXN;对 ext2/3/4 使用 e2fsck(或 fsck):e2fsck -y /dev/sdXN;也可用 fsck -y /dev/sdXN。
  • 已知坏块列表:e2fsck -l bads.txt /dev/sdXN(将 badblocks 输出写入 bads.txt)。
  • LVM/RAID:先确认卷状态(如 lvs/pvs/vgs、mdadm --detail /dev/md0),必要时先停用相关卷再修复,修复后重新激活。
  • 根分区:无法卸载时,用救援模式/单用户模式或 LiveCD 启动后再修复。

五、何时更换磁盘与后续预防

  • 更换磁盘的明确信号:
    • Reallocated/Pending 扇区计数大于 0 且持续增长;
    • 多次扫描仍有新增坏块
    • 频繁出现 Medium Error/UnrecovDataNCQ/10B8B 链路错误;
    • 服务器有硬盘告警灯或阵列控制器报错。
  • 临时过渡:可短期通过分区隔离坏块,但仅为争取迁移时间,坏道具有扩散性,应尽快更换。
  • 预防建议:
    • 部署 RAID1/RAID5/RAID6 等冗余;
    • 配置 SMART 监控与告警(如 smartd);
    • 使用高质量 SATA 线缆与稳定供电,定期巡检与备份。

0