PowerPath AIX: アプリケーションがクラッシュし、sys/errno.h 22 (EINVAL) で定義されているエラーコードでLVM_IO_FAILする
Summary: 2 つの仮想 HBA を持つ NPIV 構成では、1 つの仮想 HBA がダウンし、I/O 用のパスが 1 つ残っているにもかかわらず、LVM_IO_FAIL が errpr に記録され、ERROR CODE AS DEFINED IN sys/errno.h が 22 (EINVAL) に設定されます。これらのLVMエラーにより、ボリュームを使用しているアプリケーションがクラッシュします。この問題は、NPIV以外の環境でも発生する可能性があります。 ...
Symptoms
パスの喪失
環境:
Dell Software: PowerPath for AIX(任意のリリース)
PowerPathによって管理される複数パス構成では、1つのパスがダウンし、他のパスが使用可能であっても、アプリケーションがダウンします。また、"ERROR CODE AS DEFINED IN sys/errno.h" が 22 に設定されたLVM_IO_FAILが記録されます。
「summ」でデコードすると、次のようにエラーが表示されます。
107769 Apr 12 08:57:21 LVDD P LVM_IO_FAIL LV 8000002C00000003 PV 800000250000001A Block 20016620 EINVAL
(すべてのパスでのエラーに起因する実際のLVM_IO_FAILは、通常、エラー番号5(EIO)に関連付けられています...これはここでは当てはまりません)
LABEL: LVM_IO_FAIL IDENTIFIER: E86653C3 Date/Time: Sun Apr 12 10:09:28 2020 Sequence Number: 108111 Machine Id: 0XXXXXXXXXXX Node Id: snode1 Class: H Type: PERM WPAR: Global Resource Name: LVDD Resource Class: NONE Resource Type: NONE Location: Description I/O ERROR DETECTED BY LVM Probable Causes POWER, DRIVE, ADAPTER, OR CABLE FAILURE Recommended Actions RUN DIAGNOSTICS AGAINST THE FAILING DEVICE Detail Data PHYSICAL VOLUME DEVICE MAJOR/MINOR 8000 0025 0000 0029 ERROR CODE AS DEFINED IN sys/errno.h 22 BLOCK NUMBER 392149792 LOGICAL VOLUME DEVICE MAJOR/MINOR 8000 002D 0000 0001 PHYSICAL BUFFER TRANSACTION TIME 0 RESIDUAL COUNT 1048576 NUMBER OF BLOCKS 1048576 I/O TYPE USER DATA SENSE DATA 0000 0000 0002 EBF7 00F6 D020 0000 4C00 0000 013D 10F0 F4AD 00F6 D020 3831 80BE 0000 0000 0000 0000
Cause
このエラーは、アップストリーム(FS/LVM)のI/Oバッファーがディスク ドライバーに転送されていない場合に生成されます。(ここではPowerPath - ただし、この問題はMPIO環境でも発生する可能性があります)hdiskpower)。
IBMの用語では、このLVM I/Oエラー(EINVAL)は、VG LTGサイズ(LVM I/Oバッファー)とディスク max_transfer サイズまたはアダプター max_xfer_size(ここではNPIV)が一致していない可能性があるため、PCM (powerpath)がLVMからのI/O要求を処理できない場合に報告されます。
論理トラック グループ(LTG)がディスク ドライバー max_transfer サイズより大きい場合、I/Oを処理できず、ernoを22(EINVAL)に設定してLVM_IO_FAILが生成されます
このケースでは、次のことがありました(お客様の個人データは変更されています)。
VOLUME GROUP: vgdata1 VG IDENTIFIER: 00f6d02000004c0000000145a924a9d9 VG STATE: active PP SIZE: 256 megabyte(s) VG PERMISSION: read/write TOTAL PPs: 36387 (9315072 megabytes) MAX LVs: 512 FREE PPs: 746 (190976 megabytes) LVs: 3 USED PPs: 35641 (9124096 megabytes) OPEN LVs: 3 QUORUM: 7 (Enabled) TOTAL PVs: 13 VG DESCRIPTORS: 13 STALE PVs: 0 STALE PPs: 0 ACTIVE PVs: 13 AUTO ON: yes MAX PPs per VG: 127000 MAX PPs per PV: 5080 MAX PVs: 25 LTG size (Dynamic): 1024 kilobyte(s) AUTO SYNC: no HOT SPARE: no BB POLICY: relocatable PV RESTRICTION: none INFINITE RETRY: no DISK BLOCK SIZE: 512 CRITICAL VG: no FS SYNC OPTION: no CRITICAL PVs: no
および
# lsattr -El hdisk25 PR_key_value none Persistant Reserve Key Value True clr_q yes Device CLEARS its Queue on error True location Location Label True+ lun_id 0x0 Logical Unit Number ID False lun_reset_spt yes FC Forced Open LUN True max_coalesce 0x100000 Maximum Coalesce Size True max_retries 5 Maximum Number of Retries True max_transfer 0x40000 Maximum TRANSFER Size True node_name 0x5000144041111111 FC Node Name False pvid none Physical volume identifier False q_err no Use QERR bit True q_type simple Queue TYPE True queue_depth 32 Queue DEPTH True+ reassign_to 120 REASSIGN time out value True reserve_policy no_reserve Reserve Policy True reset_delay 0 Reset Delay True rw_timeout 30 READ/WRITE time out value True scsi_id 0x72ff40 SCSI ID False start_timeout 60 START UNIT time out value True ww_name 0xc001448111111111 FC World Wide Name False
ここでは、max_transfer = 0x40000 (256 kB) < LTG (1024 kB) (0x100000) ..が問題の原因となっています。
構成では、一部のhdiskは「max_transfer」が0x100000に設定され、他のhdiskは0x40000に設定されていました(おそらく異なるODMリリースで生成されています)。すべてのパスが使用可能な場合は、max_transferが0x100000に設定されているすべてのhdiskpowerのhdiskが常に1つ存在し、I/Oを完了できます。しかし、このhdiskが使用できなくなると、max_transferが0x40000に設定されたディスクにのみアクセス可能になりました...問題の原因。
Resolution
この問題を解決するには、hdiskの「max_transfer」属性をLTGサイズ以上の値に設定する必要があります。LTG = 1024 kBの場合、問題を修正するために次のコマンドを実行しました。
# for i in `lsdev -Cc disk |grep -i hdiskp |awk '{print $1}'`
do
chdev -l $i -a max_transfer=0x100000 -P
done
# for i in `lsdev -Cc disk |grep -i EMC |awk '{print $1}'`
do
chdev -l $i -a max_transfer=0x100000 -P
done
# reboot
Additional Information
このKBは、errnoが5(EIO)に設定されているLVM_IO_FAILには適用されません。