Pra*_*era 7 hardware storage multipath centos6
我正在尝试使用 EMC VMAX3 在后端的同一数据中心的两台服务器之间复制(使用 rsync 的约 7TB 数据)
复制 ~30-40GB 的数据后,多路径开始失败
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
Run Code Online (Sandbox Code Playgroud)
我们使用默认的 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
Run Code Online (Sandbox Code Playgroud)
已经验证了这个解决方案并与 EMC 核对一切看起来都很好https://access.redhat.com/solutions/438403
更多信息
- 网络侧没有丢包/错误包。
已禁用 THP
echo never > /sys/kernel/mm/redhat_transparent_hugepage/enabled
发布期间收集的 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)
Run Code Online (Sandbox Code Playgroud)
在 qlogic sid 上启用调试模式后
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.
Run Code Online (Sandbox Code Playgroud)
终于问题解决了
\n\n错误:技术预览版:可能不完全支持 DIF/DIX 支持。
\n\n在发布期间我经常在 dmesg 中看到此消息,并继续忽略此消息
\n\n在进一步调试时,我发现内核处于受污染状态
\n\n cat /proc/sys/kernel/tainted **So it\'s a combination of TAINT_TECH_PREVIEW and TAINT_WARN**\n 536871424\n\n lsmod |egrep -i "dif|dix"\xc2\xa0\n crc_t10dif\xc2\xa0 \xc2\xa0 \xc2\xa0 \xc2\xa0 \xc2\xa0 \xc2\xa0 \xc2\xa0 1209\xc2\xa0 1 sd_mod\n\n modinfo crc_t10dif\n filename: \xc2\xa0 \xc2\xa0 \xc2\xa0 /lib/modules/2.6.32-642.6.2.el6.x86_64/kernel/lib/crc-t10dif.ko\n softdep:\xc2\xa0 \xc2\xa0 \xc2\xa0 \xc2\xa0 pre: crct10dif\n license:\xc2\xa0 \xc2\xa0 \xc2\xa0 \xc2\xa0 GPL\n description:\xc2\xa0 \xc2\xa0 T10 DIF CRC calculation\n srcversion: \xc2\xa0 \xc2\xa0 52BC47DEA6DD58B87A2D9C1\n depends: \xc2\xa0 \xc2\xa0 \xc2\xa0 \xc2\xa0\n vermagic: \xc2\xa0 \xc2\xa0 \xc2\xa0 2.6.32-642.6.2.el6.x86_64 SMP mod_unload modversions\n
Run Code Online (Sandbox Code Playgroud)\n\n根据红帽
\n\n\n\n\nDIF 是最近添加到 SCSI 标准中的一项新功能。它将常用的 512 字节磁盘块的大小从 512 字节增加到 520 字节。额外的字节包含数据完整性字段(DIF)。基本思想是 HBA 将在写入时计算数据块的校验和值,并将其存储在 DIF 中。存储设备将在接收时确认校验和,并存储数据和校验和。读取时,存储设备和接收 HBA 将检查校验和。
\n\n数据完整性扩展 (DIX) 允许此检查在堆栈中向上移动:应用程序计算校验和并将其传递到 HBA,以附加到 512 字节数据块。这提供了完整的端到端数据完整性检查
\n\n一些供应商采用名称保护信息 (PI) 来指代 DIF/DIX 功能。Linux 上的 DIF/DIX 存在一个困难 - 内存管理系统可能会在数据缓冲区排队等待写入时更改数据缓冲区。如果这样做,则内存管理系统必须记住在 I/O 成功后将该页标记为脏页。如果内存管理系统在计算校验和之后、写入完成之前更改了缓冲区中的数据,则校验和测试将失败,写入将失败,并且文件系统将变为只读,或者会发生一些类似的故障。
\n\n因此,Red Hat Enterprise Linux 6 用户应注意以下事项: DIF/DIX 硬件校验和功能只能与专门发出 O_DIRECT I/O 的应用程序一起使用。这些应用程序可以在 O_DIRECT 模式下使用原始块设备或 XFS 文件系统。(XFS 是唯一在执行某些分配操作时不会回退到缓冲 IO 的文件系统)。只有设计用于 O_DIRECT I/O 和 DIF/DIX 硬件的应用程序才应启用此功能。
\n\nDIF/DIX 是 RHEL 6.0 中的技术预览版。目前只有两个驱动程序/hba 组合支持此功能:Emulex lpfc 和\n LSI mpt2sas。只有少数存储供应商支持它:\n Netapp Engenio FC RAID 阵列和某些 Hitachi SAS 磁盘。我们预计未来会有更多存储供应商支持此功能。
\n
当我们使用 EMC 时,我们决定禁用此功能,结果成功了
\n\n cat /etc/modprobe.d/qla2xxx.conf\n options qla2xxx ql2xenabledif=0 ql2xenablehba_err_chk=0\n Back up existing initramfs: \xc2\xa0cp /boot/initramfs-$(uname -r).img /boot/initramfs-$(uname -r).img.bak\n Rebuild initramfs: \xc2\xa0dracut -f -v\n Verify that /etc/modprobe.d/qla2xxx.conf is the same as the one in initramfs (time and size should be the same): \xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0lsinitrd | grep qla2xxx.conf; ls -al /etc/modprobe.d/qla2xxx.conf\n
Run Code Online (Sandbox Code Playgroud)\n
归档时间: |
|
查看次数: |
7638 次 |
最近记录: |