为什么多路径将 SAN LUN 子路径标记为 active/faulty,而该路径对系统可见?
环境
- Red Hat Enterprise Linux(RHEL) 5
- 设备映射多路径 (DM Multipath)
问题
- SAN 中断后,其中一个 lun 标记为 active/faulty,而它实际上对系统可见:
sda: checker msg is "tur checker reports path is down"
mpath0 (36001438005deca3f0000400076e90000) dm-0 HP,HSV400
[size=50G][features=1 queue_if_no_path][hwhandler=0][rw]
\_ round-robin 0 [prio=100][active]
\_ 0:0:2:1 sdc 8:32 [active][ready]
\_ 1:0:2:1 sdf 8:80 [active][ready]
\_ round-robin 0 [prio=30][enabled]
\_ 0:0:1:1 sdb 8:16 [active][ready]
\_ 1:0:0:1 sdd 8:48 [active][ready]
\_ 1:0:1:1 sde 8:64 [active][ready]
\_ round-robin 0 [prio=0][enabled]
\_ 0:0:0:1 sda 8:0 [active][faulty] <---
sda被标记为 active/faulty:
# multipath
sda: checker msg is "tur checker reports path is down"
/sbin/scsi_id exitted with 1
cannot get the the wwid for sda <---
sda: checker msg is "tur checker reports path is down"
- 以下命令未显示设备的 wwid:
scsi_id -g -u -s /block/sda
fdisk -l的/dev/sda设备显示分区表。
解决方法
-
观察到存储问题,通过禁用 SAN Fibre 交换机端口并重新启用该端口解决。
-
参考针对子路径记录的错误消息:
sda()0:0:0:1: sd 0:0:0:1: SCSI error: return code = 0x00070000,请尝试验证在 SAN/存储侧是否存在关于子路径 "sda" (0:0:0:1) 配置的问题?建议联系存储供应商支持以验证是否因存储侧存在问题导致驱动程序接收到包含无效冲突信息的 fibre channel 响应帧。
根本原因
- 发现
SCSI error: return code = 0x00070000中记录的/var/log/messages错误消息。日志中的 SCSI 错误返回代码 "0x00070000" 可解码如下:
0x00 07 00 00
-------------
00 status byte : {likely} not valid, see other fields;
00 msg byte : {likely} not valid, see other fields;
07 host byte : DID_ERROR - internal error
00 driver byte : {likely} not valid, see other fields;
- 如果硬件存在某些问题,或者存储子系统内存在基于 san 的问题,导致接收到的 fibre channel 响应帧包含驱动程序无法使用或协调的无效或冲突信息,则可观察到 SCSI 错误返回代码 "0x00070000" (DID_ERROR)。请检查系统硬件、FC 交换机错误计数器等,以查看是否有任何迹象表明问题可能出在哪里。
诊断步骤
- 下方标记的路径显示为失败:
mpath0 (36001438005deca3f0000400076e90000) dm-0 HP,HSV400
[size=50G][features=1 queue_if_no_path][hwhandler=0][rw]
\_ round-robin 0 [prio=100][active]
\_ 0:0:2:1 sdc 8:32 [active][ready]
\_ 1:0:2:1 sdf 8:80 [active][ready]
\_ round-robin 0 [prio=30][enabled]
\_ 0:0:1:1 sdb 8:16 [active][ready]
\_ 1:0:0:1 sdd 8:48 [active][ready]
\_ 1:0:1:1 sde 8:64 [active][ready]
\_ round-robin 0 [prio=0][enabled]
\_ 0:0:0:1 sda 8:0 [active][faulty] <---
- 查看服务器上同一 Lun 的状态,它似乎处于 active/running 状态且对系统可见:
Host: scsi0 Channel: 00 Id: 00 Lun: 01
Vendor: HP Model: HSV400 Rev: 1100
Type: Direct-Access ANSI SCSI revision: 05
- 尝试使用以下命令重新加载 multipath 配置未能将路径上线:
# service multipathd reload
# multipath -F
# multipath -v2
- Reinstate 应恢复路径
sda从失败状态,但这也失败了:
# multipathd -k'reinstate sda'
- 从 "/var/log/messages" 文件中,观察到上述子路径 "sda" (0:0:0:1)(标记为 active/faulty)的大量 SCSI 错误消息:
Jun 11 09:30:53 localhost kernel: sd 0:0:0:1: Unhandled error code
Jun 11 09:30:53 localhost kernel: sd 0:0:0:1: SCSI error: return code = 0x00070000
Jun 11 09:30:53 localhost kernel: Result: hostbyte=DID_ERROR driverbyte=DRIVER_OK,SUGGEST_OK
Jun 11 09:30:53 localhost kernel: sd 0:0:0:1: Unhandled error code
Jun 11 09:30:53 localhost kernel: sd 0:0:0:1: SCSI error: return code = 0x00070000
Jun 11 09:30:53 localhost kernel: Result: hostbyte=DID_ERROR driverbyte=DRIVER_OK,SUGGEST_OK
Jun 11 09:30:53 localhost kernel: sd 0:0:0:1: Unhandled error code
Jun 11 09:30:53 localhost kernel: sd 0:0:0:1: SCSI error: return code = 0x00070000
Jun 11 09:30:53 localhost kernel: Result: hostbyte=DID_ERROR driverbyte=DRIVER_OK,SUGGEST_OK
[...]
- 分配 DID_ERROR 状态是因为驱动程序从 hba 接收到的 fibre channel 响应帧包含无效或冲突的信息。这意味着要么是 hba 问题,要么是 san 问题,导致产生不良响应帧或状态。请查阅 如何在 RHEL 中解释 scsi 状态消息,例如 "sd 2:0:0:243: SCSI error: return code = 0x08000002"? 获取有关此问题的详细信息。