04 - System Administration04c - High Availability e Disaster Recovery04g - Varie sistemistica

Clonazione di sistemi IBM i: Ripristino connessioni multiple verso i dischi

Last Updated on 28 Giugno 2021 by Roberto De Pedrini

Iniziamo con una breve introduzione dei concetti di “clonazione” e “percorsi multipli” (multipath).


La clonazione (cioè la creazione di una copia esatta di un sistema o di una partizione IBM i) è stato un concetto per la piattaforma IBM i sin dall’introduzione del boot da SAN (Storage Area Network) con i5/OS V5R3M5 (quando il load source è stato spostato all’interno di un sottosistema storage collegato alla SAN senza avere più la necessità di usare il mirroring remoto del load source per eseguire il mirroring del load source interno verso il load source collegato alla SAN). La copia/clone può essere collegata ad un altro server, ad una LPAR separata o, se il sistema di produzione è spento, alla partizione o al sistema esistente. Dopo che la copia/clone è stata creata, può essere usata per il backup offline, test di sistema o migrazioni.

Il boot da SAN permette di sfruttare alcune delle funzioni avanzate disponibili con lo storage IBM. Una di queste funzioni è la FlashCopy che permette di eseguire una copia istantanea dei dati contenuti in una LUN o in un gruppo di LUN. Pertanto, quando avete un sistema che ha solo LUN SAN senza unità interne, potete creare una copia/clone del vostro sistema.


IBM i supporta il collegamento a percorsi multipli (multipath è la capacità di presentare volumi logici su un dispositivo di storage al server host attraverso connessioni multiple) attraverso Fibre Channel come parte del supporto di base del sistema operativo per fornire una maggiore resilienza ai guasti della SAN che sarebbero critici per IBM i a causa dell’architettura di storage a livello singolo. I percorsi multipli verso un volume logico, inoltre, possono migliorare le prestazioni di I/O della partizione.

Nota: Con il sistema operativo IBM i 6.1 o successivo, il collegamento multipath è supportato su un’unità disco esterna che funge da load source.

Il sistema IBM i rileva e configura automaticamente i nuovi percorsi e li utilizza immediatamente. Se un disco è inizialmente configurato come percorso singolo e viene aggiunto un secondo percorso, il nome risorsa dell’unità disco viene modificato da DDxxx a DMPxxx. Questa modifica indica che ora c’è più di un percorso verso l’unità disco. Non sono richieste modifiche da parte dell’utente sul sistema IBM i per utilizzare il nuovo percorso. Le connessioni a percorsi multipli possono essere connesse direttamente o attraverso un fabric (switch fiber channel).


Ora uniamo i due concetti.

Quando si avvia un clone, un messaggio CPI096E - Disk unit connection is missing per ogni LUN collegata tramite il percorso mancante appare nel log di sistema (history log) della LPAR IBM i appena creata (e viene ripresentato ogni ora).

Un controllo in DST/SST mostra i percorsi attivi (o passivi, vedi nota sotto per ulteriori informazioni) verso i dischi e quelli sconosciuti o mancanti (missing) come risultato della riconfigurazione del sottosistema storage (i percorsi mancanti sono le connessioni verso le unità disco del sistema clonato):

          Serial                     Resource   Path
ASP Unit  Number          Type Model Name       Status
  1    1  YF4FE4000034    2145  050  DMP005     Active
          YF4FE4000034    2145  050  DMP001     Passive 
          YF4FE4000034    2145  050  DMP002     Active
          YF4FE4000034    2145  050  DMP015     Passive
          YF501C00000F    2145  050  DMP011     Missing
          YF501C00000F    2145  050  DMP012     Missing
          YF501C00000F    2145  050  DMP013     Missing
          YF501C00000F    2145  050  DMP014     Missing
  1    2  YF4FE4000035    2145  050  DMP006     Passive
          YF4FE4000035    2145  050  DMP003     Active
          YF4FE4000035    2145  050  DMP016     Active
          YF4FE4000035    2145  050  DMP004     Passive
          YF501C000010    2145  050  DMP007     Missing
          YF501C000010    2145  050  DMP010     Missing
          YF501C000010    2145  050  DMP009     Missing
          YF501C000010    2145  050  DMP008     Missing

Nota: Ogni LUN in Storwize V7000 utilizza un nodo V7000 come nodo preferito. Il traffico I/O da o verso un particolare LUN passa normalmente attraverso il nodo preferito. Se quel nodo si guasta, l’I/O viene trasferito al nodo rimanente. Con IBM i multipath, tutti i percorsi per un LUN attraverso il nodo preferito sono attivi e il percorso attraverso il nodo non preferito è passivo. Multipath impiega il bilanciamento del carico tra i percorsi verso una LUN che transitano attraverso il nodo preferito per quella LUN.

Per evitare i messaggi di avviso e per pulire i percorsi verso i dischi potete eseguire la macro Multipath Resetter di Advanced Analysis in DST/SST oppure l’API QYASSDMO. L’utilizzo dall’API QYASSDMO consente di evitare l’accesso a DST/SST e di automatizzare l’attività.


Di seguito è riportato un esempio molto semplice di utilizzo dell’API QYASSDMO per eseguire un reset dei percorsi multipli.

Sistema operativo utilizzato: IBM i V7R2 (SF99720 level 20296 and SF99717 level 9), IBM i V7R3 (SF99730 level 19311 – SF99727 level 7, and SF99730 level 21098 – SF99727 level 10).

Nota: sui miei sistemi clone che usano IBM i V7R3 con SF99730 livello 19311, i percorsi mancanti non sono mostrati in SST ma solo segnalati con messaggi CPI096E nel log di sistema. Sono diventati nuovamente visibili in SST dopo aver installato SF99730 livello 21098, livello attuale al momento della stesura di questo post.

 Prerequisito: Un sistema IBM i con sole SAN LUN (senza dischi interni).


 Sorgente CMD:

             CMD        PROMPT('Multipath Resetter')
             PARM       KWD(ASP) TYPE(*UINT4) RSTD(*NO) DFT(1) +
                          RANGE(1 255) CHOICE('1, 2, ...') +
                          PROMPT('Enter ASP No:')

 Sorgente CLLE:

             PGM        PARM(&P_ASP)

/* Parameters */
             DCL        VAR(&P_ASP) TYPE(*UINT) LEN(4)

/* QYASSDMS, QYASSDMO, QYASEDMS */
             DCL        VAR(&HANDLE) TYPE(*CHAR) LEN(8)

/* QYASSDMO */
             DCL        VAR(&OPKEY) TYPE(*CHAR) LEN(4)
             DCL        VAR(&DMOP0700) TYPE(*CHAR) LEN(20)
             DCL        VAR(&ASP_OFFSET) TYPE(*INT) STG(*DEFINED) +
                          LEN(4) DEFVAR(&DMOP0700 1)
             DCL        VAR(&ASP_QTY) TYPE(*INT) STG(*DEFINED) +
                          LEN(4) DEFVAR(&DMOP0700 5)
             DCL        VAR(&ASP_OPER) TYPE(*INT) STG(*DEFINED) +
                          LEN(4) DEFVAR(&DMOP0700 9)
             DCL        VAR(&ASP_RES) TYPE(*INT) STG(*DEFINED) +
                          LEN(4) DEFVAR(&DMOP0700 13)
             DCL        VAR(&ASP_ARRAY) TYPE(*CHAR) STG(*DEFINED) +
                          LEN(4) DEFVAR(&DMOP0700 17)
             DCL        VAR(&DMOP0700L) TYPE(*INT) LEN(4) VALUE(20)
             DCL        VAR(&FORMAT) TYPE(*CHAR) LEN(8)

             DCL        VAR(&APINAME) TYPE(*CHAR) LEN(10)
             DCL        VAR(&MSGDTA) TYPE(*CHAR) LEN(512)

/* API Error */
             DCL        VAR(&APIERROR) TYPE(*CHAR) LEN(528)
             DCL        VAR(&AEBYTPRO) TYPE(*INT) STG(*DEFINED) +
                          LEN(4) DEFVAR(&APIERROR 1)
             DCL        VAR(&AEBYTAVL) TYPE(*INT) STG(*DEFINED) +
                          LEN(4) DEFVAR(&APIERROR 5)
             DCL        VAR(&AEEXCPID) TYPE(*CHAR) STG(*DEFINED) +
                          LEN(7) DEFVAR(&APIERROR 9)
             DCL        VAR(&AEEXCPDTA) TYPE(*CHAR) STG(*DEFINED) +
                          LEN(512) DEFVAR(&APIERROR 17)

             MONMSG     MSGID(CPF0000 MCH0000) EXEC( +
             GOTO       CMDLBL(ERROR))

/* Start DASD Management Session - QYASSDMS API */
             CALL       PGM(QYASSDMS) PARM(&HANDLE &APIERROR)
             IF         COND(&AEBYTAVL *NE 0) THEN(DO)
             CHGVAR     VAR(&APINAME) VALUE('QYASSDMS')
             GOTO       CMDLBL(ERROR)
             ENDDO

/* Start DASD Management Operation - QYASSDMO API */
             CHGVAR     VAR(%BIN(&OPKEY 1 4)) VALUE(16)
             CHGVAR     VAR(&ASP_OFFSET) VALUE(16)
             CHGVAR     VAR(&ASP_QTY) VALUE(1)
             CHGVAR     VAR(&ASP_OPER) VALUE(0)
             CHGVAR     VAR(&ASP_RES) VALUE(0)
             CHGVAR     VAR(%BIN(&ASP_ARRAY 1 4)) VALUE(&P_ASP)
             CHGVAR     VAR(&FORMAT) VALUE('DMOP0700')
             CALL       PGM(QYASSDMO) PARM(&HANDLE &OPKEY &DMOP0700 +
                          &DMOP0700L &FORMAT &APIERROR)
             IF         COND(&AEBYTAVL *NE 0) THEN(DO)
             CHGVAR     VAR(&APINAME) VALUE('QYASSDMO')
             GOTO       CMDLBL(ERROR)
             ENDDO

/* End DASD Management Session - QYASEDMS API */
             CALL       PGM(QYASEDMS) PARM(&HANDLE &APIERROR)
             IF         COND(&AEBYTAVL *NE 0) THEN(DO)
             CHGVAR     VAR(&APINAME) VALUE('QYASEDMS')
             GOTO       CMDLBL(ERROR)
             ENDDO

             CHGVAR     VAR(&MSGDTA) VALUE('Multipath reset for ASP' +
                          *BCAT %CHAR(&P_ASP) *BCAT 'completed')

             SNDPGMMSG  MSGID(CPF9898) MSGF(QSYS/QCPFMSG) +
                          MSGDTA(&MSGDTA) TOPGMQ(*PRV (*)) +
                          TOMSGQ(*TOPGMQ) MSGTYPE(*INFO)

 RETURN:
             RETURN

 ERROR:
             IF         COND(&AEBYTAVL *NE 0) THEN( +
             SNDPGMMSG  MSGID(&AEEXCPID) MSGF(QSYS/QCPFMSG) +
                          MSGDTA(&AEEXCPDTA) TOPGMQ(*PRV (*)) +
                          TOMSGQ(*TOPGMQ) MSGTYPE(*DIAG))
             CALL       PGM(QYASEDMS) PARM(&HANDLE &APIERROR)
             MONMSG     MSGID(CPF0000)
             CHGVAR     VAR(&MSGDTA) VALUE('Command ended with error')
             SNDPGMMSG  MSGID(CPF9898) MSGF(QSYS/QCPFMSG) +
                          MSGDTA(&MSGDTA) TOPGMQ(*PRV (*)) +
                          TOMSGQ(*TOPGMQ) MSGTYPE(*ESCAPE)

 ENDPGM:
             ENDPGM

Dopo l’esecuzione del comando MPATHRESET ASP('1'), i percorsi del disco mancanti sono scomparsi da SST ed i messaggi CPI096E non vengono più inviati sul log si sistema:

          Serial                     Resource   Path
ASP Unit  Number          Type Model Name       Status
  1    1  YF4FE4000034    2145  050  DMP005     Active
          YF4FE4000034    2145  050  DMP001     Passive
          YF4FE4000034    2145  050  DMP002     Active
          YF4FE4000034    2145  050  DMP015     Passive
  1    2  YF4FE4000035    2145  050  DMP006     Passive
          YF4FE4000035    2145  050  DMP003     Passive
          YF4FE4000035    2145  050  DMP016     Active
          YF4FE4000035    2145  050  DMP004     Active

 Riferimenti

 IBM Redbook SG24-7994-00 “PowerHA SystemMirror for IBM i Cookbook

 IBM Redbook SG24-8197-00 “IBM i and IBM Storwize Family A Practical Guide to Usage Scenarios

Related Posts
DB2 for i SQL – Stringhe – POSSTR-LOCATE-LOCATE_IN_STRING (IT)

Introduzione Spesso, nelle nostre applicazioni, abbiamo la necessità di lavorare con le stringhe di testo e l'SQL del DB2 può Read more

DB2 for i & SQL – FAQ & Howto (Part. 1) (IT)

Database DB2 e SQL ... forse lo strumento più potente e completo che abbiamo sulla piattaforma IBM i: ecco una Read more

Annuncio IBM i 7.4

Arriva direttamente con l'uovo di Pasqua questo annuncio IBM per le novità della versione IBM i 7.4, versione iNext secondo Read more

Generated Always Columns – Approfondimenti (IT)

Introduzione "Generated Always Column": sono colonne, campi, di una tabella il cui contenuto è controllato direttamente dal sistema ... e Read more

About author

Amministratore sistemi IBM i

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *