3. 存储层故障:磁盘坏道导致快照失败、存储控制器切换引发IO超时、LUN映射丢失导致数据不可见

存储层出问题,往往是最让人头疼的。为什么?因为症状千奇百怪,根因却藏得很深。我见过太多运维同事,一看到IO超时就怀疑网络,一看到快照失败就重做快照,结果问题反复出现。

说白了,存储层是灾备系统的地基。地基不稳,上面再好的备份软件、再完善的灾备策略,都是白搭。今天咱们就聊聊三个最常见的存储层故障:磁盘坏道、控制器切换、LUN映射丢失。

核心观点:存储层故障的排查,一定要遵循「从物理到逻辑」的顺序。先看硬件健康,再看链路状态,最后才查配置。跳过任何一步,都可能让你绕大圈子。

存储层故障排查逻辑 物理层 磁盘坏道 · 硬件告警 链路层 控制器切换 · 路径状态 逻辑层 LUN映射 · 访问控制 故障现象:快照失败 · IO超时 · 数据不可见 ① 检查硬件告警 ② 确认控制器状态 ③ 验证LUN映射 定位根因 → 执行修复 → 验证恢复

3.1 磁盘坏道:快照失败的隐形杀手

快照失败,很多人第一反应是快照空间不够。但我要告诉你,磁盘坏道才是更隐蔽的元凶。快照本质上是在某个时间点冻结数据块的状态,如果源卷上有坏道,快照引擎在读取那个块时就会卡住,最终超时失败。

我记得有一次,某客户的核心数据库快照连续三天失败。备份团队查了快照池、查了网络、查了主机,都没问题。最后我让他们去存储管理界面看硬盘状态——果然,一块SAS盘有重定位扇区,已经超过阈值了。

我的排查习惯:遇到快照失败,先做三件事:

  • 登录存储管理界面,查看所有磁盘的健康状态
  • 检查系统日志,搜索"Media Error"或"Uncorrectable"关键字
  • 用smartctl工具扫描疑似故障盘(如果主机能直连)

磁盘坏道的修复,分两种情况:

坏道类型 表现 修复方案
逻辑坏道 读写超时,但磁盘SMART状态正常 用fsck或chkdsk修复文件系统;或使用存储自带的坏道重映射功能
物理坏道 SMART报Reallocated_Sector_Ct增长,有"Click"异响 立即更换磁盘;如果RAID有冗余,热备盘顶上后重建

注意:千万不要在坏道盘上反复做快照重试。我曾经见过一个案例,运维人员连续重试快照7次,结果坏道区域扩大,最终导致整个RAID组降级。正确的做法是:先隔离故障盘,再处理快照。

3.2 存储控制器切换:IO超时的幕后推手

存储控制器切换,本意是高可用设计。但现实是,切换过程往往伴随着IO抖动,甚至超时。你想想看,控制器A突然把缓存里的数据刷给控制器B,路径要重新选路,LUN要重新归属——这个过程如果超过主机的IO超时阈值,应用就报错了。

我遇到过最典型的一个场景:某双活存储,凌晨两点自动触发控制器固件升级。升级过程中控制器切换了三次,每次切换导致约15秒的IO中断。而主机端的multipath配置的超时时间是10秒。结果就是——数据库会话全部断开,灾备复制链路中断。

排查控制器切换问题,我一般看这几个地方:

  1. 存储事件日志:搜索"Controller Switchover"或"Failover"事件,记录切换时间和次数
  2. 主机端multipath状态:用multipath -ll查看路径状态,看是否有路径处于"failed"或"degraded"
  3. IO延迟统计:用iostat -x 1观察await和svctm,切换期间这两个值会飙升

避坑指南:我曾经在配置灾备复制链路时,忽略了主机端的IO超时参数。结果存储控制器一切换,复制链路就断。后来我把/sys/block/sdX/device/timeout从默认的30秒改到60秒,同时调整了multipath的polling_interval,问题才解决。

修复控制器切换导致的IO超时,核心思路是「对齐超时阈值」:

层级 关键参数 建议值
存储端 控制器切换超时 30-60秒(视缓存数据量而定)
主机端SCSI device timeout 60秒(大于存储切换时间)
应用层 数据库IO超时 90秒(大于主机SCSI超时)

说白了,就是让每一层的超时时间都比上一层长,留出足够的缓冲。这个原则,我在多个灾备项目中验证过,非常管用。

3.3 LUN映射丢失:数据突然「消失」了

LUN映射丢失,是存储层最吓人的故障之一。主机上明明之前还能看到磁盘,突然就没了。或者新映射的LUN,主机死活认不到。

为什么会这样?原因通常有三个:

  • WWN或IQN变更:主机HBA卡更换、虚拟机迁移后WWN变了,但存储端的映射还是旧的
  • 存储端配置丢失:控制器重启、配置回滚导致LUN映射表被清空
  • Zoning或SAN交换机配置错误:光纤交换机上的Zone配置被修改,主机和存储端口不在同一个Zone里

我记得有一次,某客户做存储迁移,新存储映射了LUN给主机,但主机就是认不到。他们查了三天,最后发现是新存储的端口WWN写错了——少了一位。嗯,这种低级错误,其实挺常见的。

排查LUN映射丢失,我有一套固定的「三板斧」:

  1. 主机端确认:用lsscsi或fdisk -l看有没有新磁盘;用cat /proc/scsi/scsi看SCSI设备列表
  2. 存储端确认:登录存储管理界面,查看LUN映射表,确认主机WWN/IQN是否在允许列表中
  3. SAN交换机确认:用show zoneshow或cfgshow查看Zone配置,确认主机和存储端口在同一个Zone里

一个小技巧:如果主机端认不到LUN,先别急着重启。试试用echo "- - -" > /sys/class/scsi_host/hostX/scan重新扫描SCSI总线。很多时候,重新扫描就能认到。我习惯在排查脚本里把这个命令放在第一步。

修复LUN映射丢失,步骤其实不复杂:

场景 修复步骤
WWN/IQN不匹配 在存储端更新LUN映射,添加正确的WWN/IQN
存储端配置丢失 重新创建LUN映射,注意保持LUN ID不变(否则文件系统可能挂不上)
Zone配置错误 在SAN交换机上修正Zone配置,保存并激活配置

特别提醒:如果LUN ID变了,即使映射恢复,主机也可能无法挂载文件系统。因为/etc/fstab里用的是/dev/sdX或UUID。我建议生产环境的LUN映射,一定要记录LUN ID和主机设备名的对应关系。别问我为什么强调这个——我曾经因为没记录,恢复映射后折腾了三个小时才把文件系统挂回来。

3.4 三个故障的关联与综合排查

实际运维中,这三个故障往往不是孤立出现的。磁盘坏道可能导致控制器切换(因为坏道引发IO错误,触发控制器自动切换),控制器切换又可能导致LUN映射暂时不可见。你想想看,如果只盯着一个点查,很容易被表象误导。

我个人的综合排查顺序是这样的:

  • 第一步:看存储硬件告警。磁盘、电源、风扇、控制器——任何硬件异常都优先处理
  • 第二步:看存储事件日志。按时间线梳理所有事件,找关联性
  • 第三步:看主机端日志。/var/log/messages里搜"timeout"、"error"、"lost"关键字
  • 第四步:看SAN交换机日志。确认Zoning和端口状态

这套顺序,我在十几个灾备项目中用过,基本能覆盖90%的存储层故障。剩下的10%,往往是硬件固件bug或配置文档错误——那种情况,就只能找原厂支持了。

总结一下:存储层故障排查,核心是「分层定位、逐层排除」。磁盘坏道看SMART,控制器切换看超时配置,LUN映射丢失看WWN和Zone。记住这三句话,遇到问题就不慌了。