光纤多path失败:结果:hostbyte = DID_ERROR driverbyte = DRIVER_OK

我试图在后端的同一个数据中心中的两台服务器之间复制(〜7TB的使用rsync的数据),使用EMC VMAX3

复制〜30-40GB的数据后,多path启动失败

Dec 15 01:57:53 test.example.com multipathd: 360000970000196801239533037303434: Recovered to normal mode Dec 15 01:57:53 test.example.com multipathd: 360000970000196801239533037303434: remaining active paths: 1 Dec 15 01:57:53 test.example.com kernel: sd 1:0:2:20: [sdeu] Result: hostbyte=DID_ERROR driverbyte=DRIVER_OK [root@test log]# multipath -ll |grep -i fail |- 1:0:0:15 sdq 65:0 failed ready running - 3:0:0:15 sdai 66:32 failed ready running 

我们正在使用默认的multipath.conf

 HBA driver version 8.07.00.26.06.8-k HBA model QLogic Corp. ISP8324-based 16Gb Fibre Channel to PCI Express Adapter OS: CentOS 64-bit/2.6.32-642.6.2.el6.x86_64 Hardware:Intel/HP ProLiant DL380 Gen9 

已经validation了这个解决scheme,并检查EMC一切看起来不错https://access.redhat.com/solutions/438403

一些更多的信息

– networking侧没有丢包/错误报文。

  • 文件系统使用noatime,nodiratime进行挂载
  • 文件系统ext4(已经尝试过xfs,但同样的错误)
  • LVM处于条带模式(以线性选项开始,然后转换为条带)
  • 已经禁用THP

  • echo永远不会> / sys / kernel / mm / redhat_transparent_hugepage / enabled

  • 每当多path启动失败进程转到D状态时
  • 系统固件升级
  • 试用最新版本的qlogic驱动程序
  • 试用不同的调度程序(noop,deadline,cfq)
  • 尝试不同的调整configuration文件(企业存储

Vmcore在发行期间收集

我可以在发行期间收集vmcore

  KERNEL: /usr/lib/debug/lib/modules/2.6.32-642.6.2.el6.x86_64/vmlinux DUMPFILE: vmcore [PARTIAL DUMP] CPUS: 36 DATE: Fri Dec 16 00:11:26 2016 UPTIME: 01:48:57 LOAD AVERAGE: 0.41, 0.49, 0.60 TASKS: 1238 NODENAME: test.example.com RELEASE: 2.6.32-642.6.2.el6.x86_64 VERSION: #1 SMP Wed Oct 26 06:52:09 UTC 2016 MACHINE: x86_64 (2297 Mhz) MEMORY: 511.9 GB PANIC: "BUG: unable to handle kernel NULL pointer dereference at 0000000000000018" PID: 15840 COMMAND: "kjournald" TASK: ffff884023446ab0 [THREAD_INFO: ffff88103def4000] CPU: 2 STATE: TASK_RUNNING (PANIC) 

在qlogic sid上的Enbaling Debug模式之后

 qla2xxx [0000:0b:00.0]-3822:5: FCP command status: 0x2-0x0 (0x70000) nexus=5:1:0 portid=1f0160 oxid=0x800 cdb=2a200996238000038000 len=0x70000 rsp_info=0x0 resid=0x0 fw_resid=0x0 sp=ffff882189d42580 cp=ffff88276d249480. qla2xxx [0000:84:00.0]-3822:7: FCP command status: 0x2-0x0 (0x70000) nexus=7:0:3 portid=450000 oxid=0x4de cdb=2a20098a5b0000010000 len=0x20000 rsp_info=0x0 resid=0x0 fw_resid=0x0 sp=ffff882189d421c0 cp=ffff8880237e0880. 

这是HP ProLiant DL380 Gen9服务器。 相当标准的企业级服务器。

你能给我关于服务器固件版本的信息吗?
EMC PowerPath是否实际安装? 如果是这样, 请点击此处 。

您是否安装了HPpipe理代理? 如果是这样,你是否有能力发布hplog -v的输出。

你有没有在ILO4日志中看到任何东西? 国际劳工组织是否可以进入

您能描述安装在系统插槽中的所有PCIe卡吗?

对于特定于RHEL6的调整,我强烈推荐使用XFS,运行tuned-adm profile enterprise-storage并确保您的文件系统安装成nobarrier调整的configuration文件应该可以处理该文件 )。

对于卷,请确保您正在使用dm (多path)设备而不是/dev/sdX 。 请参阅: https : //access.redhat.com/solutions/1212233


看看你到目前为止已经介绍了什么,以及Redhat支持网站列出的检查(以及这里的说明 ),我不能排除HBA故障或PCIe提升卡问题的可能性。 此外,VMAX方面存在一个小问题。

你可以交换PCIe插槽,然后再试一次吗? 你可以交换卡片,然后再试一次吗?

HBA上的固件是最新的吗? 这是2016年12月以来的最新套餐。

固件6.07.02 BIOS 3.21

DID_ERROR通常表示驱动程序软件通过HBA返回的数据中的exception检测到某种types的硬件错误。

存储子系统内存在硬件或基于SAN的问题,因此接收到的光纤通道响应帧包含驱动程序无法使用或协调的无效或冲突信息。

请检查系统硬件,切换错误计数器等,看看是否有迹象表明问题可能在哪里。 最有可能的候选人是HBA本身。

这看起来像我的一个SFPs软失败…当你正在做一个大的副本,看你的存储开关在端口上的错误。

我最近有一个类似的问题,一切看起来不错。 服务器供应商签署了他们的东西,存储供应商说他们的东西看起来不错,发誓SFP都很好… SFP仍然performance出来,function,直到大量的数据通过MPIO接口发送和大量的错误存储交换机端口将开始获取logging。

我不得不用新的光纤更换所有的光纤,然后用备用的备用开关SFP来向供应商certificateSFP是坏的,尽pipe它看起来不错。

我知道如果你将在/ etc / sysconfig / mkinitrd / multipath MULTIPATH = NO上更改MULTIPATH = YES文件/etc/multipath.conf – 下一条评论:

黑名单{devnode“*”}

打开自动加载:

chkconfig multipathd上

打开模块下载:

modprobe dm-multipath

modprobe dm-round-robin

在autocfg上:

多path-v2

重新加载服务器,所有的窍门:

lsmod | grep dm_

看多path:

multipath -ll

最后问题解决了

错误:TECH PREVIEW:DIF / DIX支持可能不完全支持。

在发行期间,我不断在dmesg中看到这条消息,并继续忽略此消息

在进一步的debugging中,我发现内核处于感染状态

  cat /proc/sys/kernel/tainted **So it's a combination of TAINT_TECH_PREVIEW and TAINT_WARN** 536871424 lsmod |egrep -i "dif|dix" crc_t10dif       1209 1 sd_mod modinfo crc_t10dif filename:    /lib/modules/2.6.32-642.6.2.el6.x86_64/kernel/lib/crc-t10dif.ko softdep:    pre: crct10dif license:    GPL description:  T10 DIF CRC calculation srcversion:   52BC47DEA6DD58B87A2D9C1 depends:    vermagic:    2.6.32-642.6.2.el6.x86_64 SMP mod_unload modversions 

根据RedHat

DIF是最近添加到SCSI标准的新function。 它将常用的512字节磁盘块的大小从512增加到520字节。 额外的字节包括数据完整性字段(DIF)。 基本思想是HBA将在写入时计算数据块的校验和值,并将其存储在DIF中。 存储设备将在接收时确认校验和,并存储数据和校验和。 在读取时,校验和将由存储设备和接收HBA进行检查。

数据完整性扩展(DIX)允许此检查向上移动堆栈:应用程序计算校验和并将其传递给HBA,以附加到512字节数据块。 这提供了完整的端到端数据完整性检查

一些供应商已经采用名称保护信息(PI)来指代DIF / DIXfunction。 Linux上的DIF / DIX有一个困难 – 内存pipe理系统在排队等待写入时可能会更改数据缓冲区。 如果是这样,那么内存pipe理系统必须记得在I / O成功之后将该页面标记为脏。 如果内存pipe理系统在计算校验和之后,但在写入完成之前更改缓冲区中的数据,则校验和testing将失败,写入将失败,并且文件系统将变为只读,或者类似的故障将会发生。

因此,红帽企业Linux 6的用户应注意以下几点:DIF / DIX硬件校验和function只能用于专门发布O_DIRECT I / O的应用程序。 这些应用程序可能会在O_DIRECT模式下使用原始块设备或XFS文件系统。 (XFS是唯一一个在执行某些分配操作时不会回退到缓冲IO的文件系统)。 只有devise用于O_DIRECT I / O和DIF / DIX硬件的应用程序才能启用此function。

DIF / DIX是RHEL 6.0中的技术预览版。 目前只有两个驱动程序/ hba组合有这种支持:Emulex lpfc和LSI mpt2sas。 只有less数存储厂商支持它:Netapp Engenio FC RAIDarrays和某些Hitachi SAS磁盘。 我们预计未来会有更多的存储供应商支持这一function。

在我们使用EMC的时候,我们决定禁用这个function,而且这个function还是有效的

  cat /etc/modprobe.d/qla2xxx.conf options qla2xxx ql2xenabledif=0 ql2xenablehba_err_chk=0 Back up existing initramfs:  cp /boot/initramfs-$(uname -r).img /boot/initramfs-$(uname -r).img.bak Rebuild initramfs:  dracut -f -v Verify that /etc/modprobe.d/qla2xxx.conf is the same as the one in initramfs (time and size should be the same):     lsinitrd | grep qla2xxx.conf; ls -al /etc/modprobe.d/qla2xxx.conf