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/UnrecovData 或 NCQ/10B8B 链路错误;
服务器有硬盘告警灯 或阵列控制器报错。
临时过渡:可短期通过分区隔离 坏块,但仅为争取迁移时间,坏道具有扩散性 ,应尽快更换。
预防建议:
部署 RAID1/RAID5/RAID6 等冗余;
配置 SMART 监控与告警 (如 smartd);
使用高质量 SATA 线缆 与稳定供电,定期巡检与备份。