PowerPath AIX: sys/errno.h 22(EINVAL)에 정의된 오류 코드와 함께 응용 프로그램 충돌 및 LVM_IO_FAIL
Summary: 2개의 가상 HBA가 있는 NPIV 구성에서 1개의 가상 HBA가 작동 중지되고 I/O에 대한 경로가 하나 남아 있더라도 sys/errno.h가 22(EINVAL)로 설정된 오류 코드가 있는 errpr에 LVM_IO_FAIL 로깅됩니다. 이러한 LVM 오류로 인해 볼륨을 사용하는 애플리케이션이 충돌합니다. 이 문제는 NPIV가 아닌 환경에서도 발생할 수 있습니다. ...
Symptoms
경로 손실
환경:
Dell 소프트웨어: PowerPath for AIX(모든 릴리스)
PowerPath에서 관리하는 다중 경로 구성에서 한 경로가 중단되고 다른 경로를 사용할 수 있어도 애플리케이션이 중단됩니다. 그리고 "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는 일반적으로 errno 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(Logical Track Group)가 디스크 드라이버 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 (256kB) < LTG (1024kB) (0x100000) .. 문제가 발생합니다.
이 구성에서 일부 hdisk는 "max_transfer"가 0x100000로 설정되었고 다른 hdisk는 0x40000로 설정되었습니다(다른 ODM 릴리스에서 생성되었을 수 있음). 모든 경로를 사용할 수 있는 경우 항상 max_transfer가 0x100000로 설정된 모든 hdiskpower의 hdisk 중 하나가 존재하여 I/O를 완료할 수 있습니다. 그러나이 hdisk를 더 이상 사용할 수 없게 되자 max_transfer 0x40000로 설정된 디스크에만 액세스할 수 있었습니다. 문제를 일으킵니다.
Resolution
이 문제를 해결하려면 hdisk의 "max_transfer" 속성을 LTG 크기보다 크거나 같은 값으로 설정해야 합니다. LTG = 1024kB인 경우 문제를 해결하기 위해 다음을 실행했습니다.
# 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에는 적용되지 않습니다.