Generating HMC and LPAR Info

Edit: Some links no longer work.

Originally posted June 4, 2013 on AIXchange

Dean Roswell sent over another handy script that you should add to your virtual bag of tricks. Dean’s latest script (version 1.4 as of this writing) provides a quick list of information about the HMC and the LPARs running on it.First, set up your ssh client so you can connect without a password between your HMC and the LPAR you’ll run the script on.

If you aren’t sure how to set this up, you should be able to find help through a web search. I created my id_rsa.pub file after viewing this document. It lists these steps:

            To enable scripts to run unattended between an SSH client and an HMC, do the following:

            Open the Remote Command Execution task from the HMC Management work pane.
            From the Remote Command Execution window, select Enable remote command execution using the ssh facility.
            Create an HMC user with one of the following roles:

                        Super administrator (hmcsuperadmin)
                        Service representative (hmcservicerep)
            On the client’s operating system, run the SSH protocol key generator.
            To run the SSH protocol key generator, do the following:
            To store the keys, create a directory named $HOME/.ssh (either RSA or DSA keys can be used).
            To generate public and private keys, run the following command: ssh-keygen -t rsa
            The following files are created in the $HOME/.ssh directory:
                        private key: id_rsa
                        public key: id_rsa.pub
            The write bits for both group and other are turned off. Ensure that the private key has a permission of 600.

Once this was complete, I copied over my file using:

            mykey=’cat $HOME/.ssh/id_rsa.pub’
            ssh hmc.domain.com -l hmcuser mkauthkeys -a \”$mykey\”

Then I copied over Dean’s script, making sure it was executable. I changed the HMC_LIST variable to match an HMC in my environment:

#!/bin/ksh

# Created by Dean Rowswell, IBM, March 20, 2013

# Modified by Dean Rowswell, IBM, April 24, 2013

#    Calculate the USED Processor and Memory values

# Modified by Dean Rowswell, IBM, May 7, 2013 – Version 1.0

#    Display Memory and Processor config for each LPAR

#    Accept parameters for the HMC(s) and HMC user to use

#    Correctly determine HMC information for Version 7.3.5

#    Ignore mem_mode for POWER5 servers

# Modified by Dean Rowswell, IBM, May 9, 2013 – Version 1.1

#    Calculate the LPAR totals for Memory, Processor Entitlement and Virtual Processors

# Modified by Dean Rowswell, IBM, May 9, 2013 – Version 1.2

#    Skip any HMC which does not have password-less ssh setup

# Modified by Dean Rowswell, IBM, May 10, 2013 – Version 1.3

#    Remove the G in the LPAR memory column and add GB label to header

#    Calculate the Entitlement to Virtual Processor ratio for each LPAR and overall system

# Modified by Dean Rowswell, IBM, May 10, 2013 – Version 1.4

#    Fixed bug with divide by zero error if LPAR is in the Not_Activated state and the Virtual Processor value is 0

# List HMC, POWER server, and LPAR info using the HMC

#

# Assumption:

#    Password-less ssh must be setup from this system to the HMC(s) in the HMC_LIST variable

HMC_LIST=”hmc1 hmc2″

HMC_USER=”hscroot”

VER=”1.4″

# Parameter checks

if [ ${#*} -ne 0 ]

then

        while getopts :vVh:u: PARMS

        do

                case $PARMS in

                        v|V)    echo “This is get_lpar_info version: $VER” ; exit ;;

                     h)     HMC_LIST=`echo $OPTARG | tr ‘,’ ‘ ‘` ;;

                     u)     HMC_USER=${OPTARG} ;;

                        ?)      echo “\nUSAGE:\t$0 [ -v, -V, -h, -u ]”

                                echo “\t-v or -V will print out the version and exit”

                                echo “\t-h HMC hostname(s) or IP address(es) COMMA SEPARATED to use”

                                echo “\t-u HMC userid to use (only required if hscroot not used)\n”

                           echo “EXAMPLE: get_lpar_info -h hmc1,hmc2\n”

                                exit ;;

                esac

        done

fi

for HMC in ${HMC_LIST}

do

       ssh ${HMC_USER}@${HMC} date >/dev/null 2>/dev/null

       if [ $? -ne 0 ]

       then

              echo “\nPassword-less SSH access to HMC ${HMC} with user ${HMC_USER} is not setup\n”

              continue

       fi

       echo “\n=================================”

       echo “HARDWARE MANAGEMENT CONSOLE”

       echo “Hostname: ${HMC} / \c”

       ssh ${HMC_USER}@${HMC} “lshmc -v | grep -E ‘TM|SE|RM'” | sed ‘s/eserver xSeries 336 -\[//g’ | sed ‘s/]-//g’ | tr -s ‘\n’ ‘ ‘ | awk ‘

       {MODEL = $2 ; SERIAL = $4 ; VERSION = $6};

       END { print “Model: ” MODEL “\nSerial: ” SERIAL ” / Ver: ” VERSION}’

       echo “`date`”

       echo “=================================”

       MANAGEDSYS=`ssh ${HMC_USER}@${HMC} “lssyscfg -r sys -F type_model*serial_num|sort”`

       for SYSTEM in ${MANAGEDSYS}

       do

              echo “\nIBM POWER SYSTEM: ${SYSTEM} / SysFW Ver: \c”

              ssh ${HMC_USER}@${HMC} “lslic -m ${SYSTEM} -F ecnumber:activated_level|sed ‘s/:/_/g’|cut -c 3-“|tr -s ‘\n’ ‘ ‘

              ssh ${HMC_USER}@${HMC} “lshwres -m ${SYSTEM} -r proc –level sys -F installed_sys_proc_units:configurable_sys_proc_units:curr_avail_sys_proc_units”|awk -F: ‘

              {INSTALL = $1 ; CONFIG = $2 ; AVAIL = $3};

              END { print “\n   PROC INFO:\t” INSTALL ” Installed / ” CONFIG ” Configurable / ” CONFIG-AVAIL ” Used / ” AVAIL ” Available “}’

              ssh ${HMC_USER}@${HMC} “lshwres -m ${SYSTEM} -r mem –level sys -F installed_sys_mem:configurable_sys_mem:curr_avail_sys_mem:sys_firmware_mem:mem_region_size” |awk -F: ‘

              {INSTALL = $1 ; CONFIG = $2 ; AVAIL = $3 ; SYSFW = $4 ; LMB = $5};

              END { print ”   MEM INFO:\t” INSTALL/1024 ” GB Install / ” CONFIG/1024 ” GB Config / ” (CONFIG-AVAIL)/1024 ” GB Used / ” AVAIL/1024 ” GB Avail / ” SYSFW/1024 ” GB SysFW / ” LMB ” MB LMB”}’

              echo ”   LPAR INFO:   NOTE: THE MEMORY AND PROCESSOR VALUES ARE FROM THE ACTIVE/RUNNING LPAR VALUES (NOT FROM LPAR PROFILE)\n   ID  NAME                 TYPE      OS_VER                   STATE        MEM(GB) MODE    PROC    MODE             POOL  ENT  VP  WT ENT/VP”

              Get_LPAR_Info() {

                     LPARS=`ssh ${HMC_USER}@${HMC} “lssyscfg -r lpar -m ${SYSTEM} -F lpar_id:name:lpar_env:os_version:state|sed ‘s/ /_/g’|sort -n”`

                     for LPAR in ${LPARS}

                     do

                           printf ”      %-24s\n” ${LPAR}

                     done

              PROC=`ssh ${HMC_USER}@${HMC} “lshwres -m ${SYSTEM} -r proc –level lpar -F lpar_id:curr_proc_mode:curr_sharing_mode:curr_shared_proc_pool_id:run_proc_units:run_procs:run_uncap_weight|sort -n”`

              for LPAR in ${PROC}

              do

                     printf ”      %-24s\n” ${LPAR}

              done

              ssh ${HMC_USER}@${HMC} “lshwres -m ${SYSTEM} -r mem –level lpar -F lpar_id:mem_mode:run_mem” >/dev/null 2>/dev/null

              if [ $? -eq 0 ]

              then

                     MEM=`ssh ${HMC_USER}@${HMC} “lshwres -m ${SYSTEM} -r mem –level lpar -F lpar_id:mem_mode:run_mem|sort -n”`

                     for LPAR in ${MEM}

                     do

                           printf ”      %-24s\n” ${LPAR}

                     done

              else

                     MEM=`ssh ${HMC_USER}@${HMC} “lshwres -m ${SYSTEM} -r mem –level lpar -F lpar_id:run_mem|sort -n”`

                     for LPAR in ${MEM}

                     do

                           printf ”      %-24s\n” ${LPAR}

                     done

              fi

              }

              Get_LPAR_Info | sort -n | awk -F: ‘{

              if (NF == 5) { LPAR_ID=$1; LPAR_NAME=$2; OS_TYPE=$3; OS_VER=$4; STATE=$5 }

              if (NF == 3) { MEM_MODE=$2; MEM=$3 }

              if (NF == 2) { MEM_MODE=”NA”; MEM=$2 }

              if (NF == 7) { PROC_MODE=$2; SHARE_MODE=$3; SHARED_POOL=$4; PROC_UNITS=$5; VIRT_PROC=$6; WEIGHT=$7 }

              if ((length(LPAR_ID) != 0 && length(MEM_MODE) !=0 && length(PROC_MODE) != 0)) {

              if (VIRT_PROC == 0) { RATIO = “NA”  } else { RATIO = PROC_UNITS/VIRT_PROC}

              printf ”   %3d %-20s %-9s %-24s %-13s %5.1f %-8s %-7s %-17s %-3d %-4.2f %3d %3d %5.2f\n”, LPAR_ID, LPAR_NAME, OS_TYPE, OS_VER, STATE, MEM/1024, MEM_MODE, PROC_MODE, SHARE_MODE, SHARED_POOL, PROC_UNITS, VIRT_PROC, WEIGHT, RATIO; TOTAL_MEM += MEM; TOTAL_PROC_UNITS += PROC_UNITS; TOTAL_VIRT_PROC += VIRT_PROC ; LPAR_ID=””; MEM_MODE=””; MEM=””; PROC_MODE=”” }

              } END {print ”    —————————————————————————————————————————————–” ; printf ”       LPAR TOTALS %63.1f %43.2f %3d %9.2f\n”, TOTAL_MEM/1024, TOTAL_PROC_UNITS, TOTAL_VIRT_PROC, TOTAL_PROC_UNITS/TOTAL_VIRT_PROC}’

       done

done


In my environment I got the following output, some of which is masked to protect the identity of the customer that allowed me to run this. Of course the output looks best in a format wide enough to support all of the columns. Here, most of the lines are wrapped. A few spaces are added so you can see the different entries.

=================================

HARDWARE MANAGEMENT CONSOLE

Hostname: HMC1 / Model: 7042-CR4

Serial: 123456B / Ver: V7R7.7.0.2

Sun Jun  2 15:23:37 CDT 2013

=================================

IBM POWER SYSTEM: 8202-E4B*12345CP / SysFW Ver: AL720_108

PROC INFO:   4.0 Installed / 4.0 Configurable / 2.9 Used / 1.1 Available

MEM INFO:    64 GB Install / 64 GB Config / 32.75 GB Used / 31.25 GB Avail / 2.25 GB SysFW / 256 MB LMB

LPAR INFO:   NOTE: THE MEMORY AND PROCESSOR VALUES ARE FROM THE ACTIVE/RUNNING LPAR VALUES (NOT FROM LPAR PROFILE)

ID  NAME                 TYPE      OS_VER                   STATE        MEM(GB) MODE    PROC    MODE             POOL  ENT  VP  WT ENT/VP

1 vios1              vioserver VIOS_2.2.0.10-FP-24_SP-01 Running         3.2 ded      shared  uncap             0   0.50   4 128  0.12

2 lpar1               aixlinux  AIX_5.3_5300-12-05-1140  Running         4.2 ded      shared  uncap             0   0.40   4 128  0.10

3 vios2              vioserver VIOS_2.2.0.10-FP-24_SP-01 Running         4.2 ded      shared  uncap             0   0.40   4 128  0.10

4 vios3              vioserver VIOS_2.2.0.10-FP-24_SP-01 Running         4.2 ded      shared  uncap             0   0.40   4 128  0.10

5 nim                 aixlinux  Unknown                  Running         4.2 ded      shared  uncap             0   0.40   4 128  0.10

6 db2                 aixlinux  Unknown                  Running         4.2 ded      shared  uncap             0   0.40   4 128  0.10

7 lpar2               aixlinux  Unknown                  Running         4.0 ded      shared  uncap             0   0.20   2 128  0.10

8 vios3               aixlinux  Unknown                  Running         2.0 ded      shared  uncap             0   0.20   2 128  0.10

—————————————————————————————————————————————–

LPAR TOTALS                                                            30.5                                        2.90  28      0.10

IBM POWER SYSTEM: 9111-520*12346A / SysFW Ver: SF240_415

   PROC INFO:   2.0 Installed / 2.0 Configurable / 2 Used / 0.0 Available

   MEM INFO:    4 GB Install / 4 GB Config / 4 GB Used / 0 GB Avail / 0.34375 GB SysFW / 16 MB LMB

   LPAR INFO:   NOTE: THE MEMORY AND PROCESSOR VALUES ARE FROM THE ACTIVE/RUNNING LPAR VALUES (NOT FROM LPAR PROFILE)

   ID  NAME                 TYPE      OS_VER                   STATE        MEM(GB) MODE    PROC    MODE             POOL  ENT  VP  WT ENT/VP

 1 lpar1           aixlinux  Unknown                  Not_Activated   0.0 ded      ded     share_idle_procs  0   0.00   0   0  0.00

 2 demo            aixlinux  Unknown                  Not_Activated   0.0 ded      ded     share_idle_procs  0   0.00   0   0  0.00

 3 test            aixlinux  Unknown                  Not_Activated   0.0 ded      ded     share_idle_procs  0   0.00   0   0  0.00

 4 lpar2           aixlinux  Unknown                  Running         3.7 ded      ded     share_idle_procs  0   0.00   2   0  0.00

 5 lpar3           aixlinux  Unknown                  Not_Activated   0.0 ded      shared  uncap             0   0.00   0   0  0.00

 6 lpar4           aixlinux  Unknown                  Not_Activated   0.0 ded      shared  uncap             0   0.00   0   0  0.00

—————————————————————————————————————————————–

LPAR TOTALS                                                             3.7                                        0.00   2      0.00

If you want to see how both scripts look with the proper spacing, check out the attached PDFs below.

Let me know how the script works for you. And many thanks to Dean for giving permission to post it here.