PowerPath AIX: Arresto anomalo delle applicazioni e LVM_IO_FAIL con CODICE ERRORE DEFINITO IN sys/errno.h 22 (EINVAL)
Summary: In una configurazione NPIV con due HBA virtuali, quando un HBA virtuale si interrompe e sebbene sia rimasto un percorso per gli I/O, LVM_IO_FAIL vengono registrati errpr con ERROR CODE AS DEFINED IN sys/errno.h impostato su 22 (EINVAL). A causa di questi errori LVM, l'applicazione che utilizza il volume si arresta in modo anomalo. Il problema potrebbe verificarsi anche in un ambiente non NPIV. ...
Symptoms
Perdita di un sentiero
Ambiente:
Software Dell: PowerPath per AIX (qualsiasi versione)
In una configurazione a più percorsi gestita da PowerPath, quando un percorso diventa inattivo e sebbene siano disponibili altri percorsi, l'applicazione si interrompe. Vengono inoltre registrati LVM_IO_FAIL con "ERROR CODE AS DEFINED IN sys/errno.h" impostato su 22.
Decodificati con "summ", gli errori vengono visualizzati come:
107769 Apr 12 08:57:21 LVDD P LVM_IO_FAIL LV 8000002C00000003 PV 800000250000001A Block 20016620 EINVAL
(i LVM_IO_FAIL reali risultanti da errori su tutti i percorsi sono normalmente associati all'errno 5 (EIO) ... il che non si verifica nel caso di specie)
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
Questo errore viene generato quando il buffer di I/O a monte (FS/LVM) non viene trasferito al driver del disco. (qui PowerPath - ma il problema potrebbe essere riscontrato anche in un'ambiente MPIO) hdiskpower).
In termini IBM: questo errore di I/O LVM (EINVAL) viene segnalato quando PCM (powerpath) non è in grado di elaborare la richiesta di I/O dall LVM in quanto potrebbe verificarsi una mancata corrispondenza delle dimensioni VG LTG (buffer di I/O LVM) con le dimensioni del disco max_transfer o max_xfer_size dell'adattatore (NPIV qui).
Quando la dimensione del Logical Track Group (LTG) è maggiore della dimensione del max_transfer del driver del disco, l'I/O non può essere elaborato e viene generato un LVM_IO_FAIL con erno impostato su 22 (EINVAL)
Nel nostro caso, (i dati privati del cliente sono stati modificati):
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
e
# 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
Qui abbiamo max_transfer = 0x40000 (256 kB) < LTG (1024 kB) (0x100000) .. causando il problema.
Nella configurazione, alcuni hdisk erano stati impostati con "max_transfer" impostato su 0x100000 e altri erano stati impostati su 0x40000 (probabilmente generati con versioni ODM diverse). Se tutti i percorsi erano disponibili, c'era sempre uno degli hdisk di ogni hdiskpower con max_transfer impostato su 0x100000 e l'I/O poteva essere completato. Ma quando questo hdisk non era più utilizzabile, solo i dischi con max_transfer impostato su 0x40000 erano accessibili... causare il problema.
Resolution
Per risolvere il problema, l'attributo "max_transfer" dell hdisk deve essere impostato su un valore maggiore o uguale alla dimensione LTG. Nel nostro caso in cui LTG = 1024 kB, è stato eseguito quanto segue per risolvere il problema:
# 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
Questo articolo della KB non si applica ai LVM_IO_FAIL con errno impostato su 5 (EIO)