很多新手会打开Zabbix面板看图表,或者到处搜命令一条一条敲。
但老手通常只做一件事——直接看系统日志。
Linux内核会把所有硬件异常事件原封不动地写进日志。你只需要一条命令,用关键词过滤一下,30秒就能定位问题出在硬盘、网卡还是内存。
① 硬盘硬件故障:I/O错误、SMART预警、控制器故障、坏道
② 网卡硬件故障:链路断开、发送超时、PHY异常
③ 内存硬件故障:ECC纠错、内存读写异常、不可纠正错误
服务器硬件出问题,最直接的线索就在系统日志里。
下面这三条命令,是我在生产环境用了多年的,覆盖90%的硬件故障场景。每条命令后面附带一个我自己遇到过的真实案例。
硬盘快挂了之前,系统日志里通常会出现I/O错误、SMART预警等关键字。一条命令全部抓出来:
# 查看硬盘硬件故障日志
cat /var/log/messages | egrep "I/O error|FAILURE PREDICTION|Predictive Failure|Drive Fault|target reset FAILED|Controller encountered a fatal error and was reset|Check failed|Diagnostics failed|Offline uncorrectable|Currently unreadable" | grep -v euid | tail -n 50
关键词解读:
• I/O error:磁盘读写失败,最常见的硬盘故障信号
• FAILURE PREDICTION / Predictive Failure:SMART预警,硬盘预测自己快挂了
• Drive Fault:磁盘故障
• target reset FAILED:SCSI目标重置失败,存储链路异常
• Controller encountered a fatal error and was reset:存储控制器致命错误
• Check failed / Diagnostics failed:磁盘自检失败
• Offline uncorrectable / Currently unreadable:不可纠正的扇区,数据可能已丢失
背景:一台Ceph存储集群节点ceph028,采用单盘RAID 0架构(每块物理盘独立配置为RAID 0虚拟磁盘,让操作系统看到独立块设备)。
事件:2025年5月15日 14:36:06,内核日志突然刷出一串I/O error——9条写请求在同一秒内全部失败,设备sdb从系统中彻底消失。
日志关键信息:
blk_update_request: I/O error, dev sdb, sector 870341128
sd 0:2:1:0: [sdb] tag#1 FAILED Result: hostbyte=DID_BAD_TARGET driverbyte=DRIVER_OK
分析:所有错误都指向同一个SCSI返回码 DID_BAD_TARGET ——不是某个扇区坏了,而是整块盘对操作系统来说消失了。单盘RAID 0意味着物理盘掉盘等于虚拟磁盘直接离线,没有任何冗余兜底。9条错误全部是Write(16),集中在同一秒内,没有任何渐进式退化——典型的瞬时掉盘。
结果:sdb对应的Ceph OSD直接失效,但Ceph集群凭借多副本机制自动启动recovery,从其他节点副本重建数据,集群整体保持可用,客户端I/O不中断。
💡 教训:如果用上面那条命令提前看到 I/O error,就能在集群recovery期间从容应对,而不是凌晨3点被报警叫醒。单盘RAID 0场景下,硬盘掉盘就是"零容错"——分布式存储的多副本机制才是最后的保险。
什么时候该跑这条命令?
• 数据库突然变慢,iostat -x 1 发现某块盘 %util 长期100%
• 业务服务器频繁卡顿,怀疑底层存储有问题
• 收到监控报警,磁盘延迟突然飙升
• 看到 I/O error 或 Currently unreadable → 说明硬盘已经出现坏道,立即备份数据并更换硬盘
• 看到 FAILURE PREDICTION → SMART预警,硬盘还没坏但预测即将故障,联系厂商准备备件
• 看到 Controller fatal error → 存储控制器出问题,影响范围可能是整组硬盘,立即检查RAID状态
服务器时不时断网、丢包、延迟飙升,怀疑网卡有问题?一条命令查链路状态变化和发送超时:
# 查看网卡硬件故障日志
cat /var/log/messages | egrep 'NIC Link is Down|NIC Link is Up|tx_timeout|Link is up but PHY type' | grep -v euid | tail -n 50
关键词解读:
• NIC Link is Down:网线被拔了,或者交换机端口DOWN了
• NIC Link is Up:网卡重新协商成功,链路恢复
• tx_timeout:网卡发送超时,通常是驱动或硬件故障
• Link is up but PHY type:链路起来了但物理层类型异常
背景:一台云平台宿主机上跑着9台虚拟机。宿主机本身没有宕机,CPU还在运转,内存数据完好——但所有虚机全部网络中断。
事件:2025年6月23日晚上7点多,云平台突然告警,这台宿主机"失联"。事后登录查看日志,里面躺着一条关键记录:
NETDEV WATCHDOG: ens9f0 (i40e): transmit queue 1 timed out
i40e 0000:08:00.0 ens9f0: tx_timeout recovery level 1, hung_queue 1
分析:网卡(Intel X710,i40e驱动)的一个发送队列卡住不动了。网卡发送数据像一个环形传送带——软件往格子里放数据包,通知网卡来取,网卡取走发出去。正常情况下这个流水线飞快运转。但这次,驱动检测到发送队列超时后尝试自动修复(Level 1恢复),由于驱动版本存在缺陷,恢复过程没能真正把队列拉起来。网卡成了一个"黑洞",数据包只进不出。
结果:云平台判断宿主机失联,将9台虚拟机在其他宿主机重新启动。故障根因不是硬件老化,不是操作失误,而是一个藏在底层网卡驱动里的软件缺陷。
💡 教训:如果日常用上面那条命令检查日志,发现 tx_timeout 记录,哪怕当时没造成明显影响,也说明隐患已经存在——赶紧查驱动版本、打补丁,而不是等到网卡彻底"装死"、9台虚机全断才来排查。X710网卡驱动版本低于2.7.0的,建议立即关注。
关键判断技巧:如果看到 NIC Link is Down 和 NIC Link is Up 频繁交替出现,说明网卡链路在反复断开重连——这就是"闪断"。
• 闪断:先排查物理层 → 网线是否松动 → 交换机端口是否正常 → 光模块是否老化
• tx_timeout 反复出现 → 大概率是网卡驱动bug,尝试更新驱动或升级内核
• Link is up but PHY type 异常 → 可能是网线规格不匹配(比如千兆网卡插了百兆线)
服务器经常莫名重启、内核崩溃(Kernel Panic)、进程被OOM?先别急着查软件——可能是物理内存条有问题。
服务器内存通常有ECC纠错功能,每次纠错都会被记录到系统日志。一条命令抓出来:
# 查看内存硬件故障日志
cat /var/log/messages | egrep 'CE memory read error|Correctable ECC|CE memory scrubbing error|MEMORY ERROR|Uncorrectable ECC|Uncorrected patrol scrub error|OVERFLOW err_code' | grep -v euid | tail -n 50
关键词解读:
• CE memory read error / Correctable ECC:可纠正错误,内存条还能用但已经有坏位
• Uncorrectable ECC:不可纠正错误,内存条已经坏了
• CE memory scrubbing error:内存巡检发现错误
• Uncorrected patrol scrub error:巡检发现不可纠正错误
• MEMORY ERROR:通用内存错误
• OVERFLOW err_code:错误溢出,说明错误频率非常高
CE(Correctable Error,可纠正错误):ECC能自动修复,系统不会崩溃,但出现频率在增加说明内存条在老化。
→ 处理建议:联系厂商准备备件,趁下次计划维护时更换。
UE(Uncorrectable Error,不可纠正错误):数据已经出错,无法修复。这个级别的错误出现一次就必须立即更换内存条。
→ 处理建议:不要犹豫,立即申请停机换条,否则随时可能内核崩溃或数据损坏。
背景:一台虚拟化平台节点rg15-ostack070,运行着15台虚拟机。
23天倒计时:
🟢 7月24日 11:45 — 带外日志(BMC/iDRAC)首次记录 Uncorrectable ECC
🟡 7月24日 - 8月15日 — 间歇性出现,未引起重视
🔴 8月16日 19:47 — 内核访问故障内存 → panic → 宕机
mce: Uncorrected hardware memory error in user-access at ae76562c0
MCE 0xae7656: Killing qemu-kvm:34196 due to hardware memory corruption
分析:内存控制器检测到不可纠正的多比特错误 → 内核强制终止访问该内存的qemu-kvm进程 → 虚拟机被杀 → 内核自身也访问到故障内存 → 系统panic,整机宕机。
结果:一根坏内存,15台虚拟机全部重启,业务中断20+分钟。第二天复盘会上领导问:"为什么没有提前发现?"——带外日志没有接入监控,内核日志也没有及时查看。
💡 教训:如果日常用上面那条命令定期查 /var/log/messages,在7月24日就能看到 Uncorrectable ECC 告警,换一根内存条就能避免23天后的宕机事故。内存故障是渐进式恶化的——CE加速增长是"死亡螺旋"的前兆,在CE阶段拦住它,就能避免90%以上的非计划宕机。
✅ 三条命令的核心模式完全一致
cat 日志 | egrep "故障关键词1|关键词2|..." | grep -v 噪音 | tail -n N
你可以根据自己服务器的硬件型号和故障类型,替换 egrep 里的关键词。这个模式适用于任何硬件故障的日志排查。
硬件故障排障的核心就一句话:日志里找关键词,关键词告诉你真相。
服务器内存案例 服务器内存
服务器硬盘案例 服务器存储
服务器网络案例 服务器网卡及性能
💬 你在运维过程中遇到过哪些硬件故障?是怎么定位的?评论区聊聊,互相学习。