User Tools

Site Tools


aix:pcmpathq

AIX list disks serial number

I put this function often in .profile from root, you can have a comma format using: pcmpathq -c

# List disks serial number
pcmpathq ()
{
verbose=$1

if [ "$verbose" != "-c" ]
then
  printf "##################################################################################################################################\n"
  printf "%-15s %-25s %-15s %-15s %-37s %-10s %-10s\n" '#'HDISK  PVID  VG  MANUFACTURER STORAGE-DISK_SERIAL TYPE DISK_SZ
  printf "##################################################################################################################################\n"
fi

for line in $(lspv -u | sed 's/\ /;/g')
do
  typeset -Z4 diskid
  hdisk=$(echo $line | sed 's/;/\ /g' | awk '{print $1}')
  disksz=$(bootinfo -r $hdisk)
  pvid=$(echo $line | sed 's/;/\ /g' | awk '{print $2}')
  vg=$(echo $line | sed 's/;/\ /g' | awk '{print $3}')
  diskfull=$(echo $line | cut -c80- | sed 's/;/\ /g' | rev | awk '{print $2,$3,$4,$5}' | rev | sed 's/\ //g')
  endline=$(echo $diskfull | sed 's/[0-9]/\ /g' | rev | awk '{print $1}' | rev)
  if [ $(echo $endline | grep vscsi > /dev/null; echo $?) -eq 0 ]
  then
    type=vscsi
    if [ $(echo $diskfull | grep "NVDISK" > /dev/null; echo $?) -eq 0 ]
    then
      diskfull=$(echo $diskfull | cut -c6-51)
    else
      diskfull=$(echo $diskfull | cut -c9- | sed 's/fcp/\ /' | awk '{print $1}')
    fi
  else
    if [ $(echo $endline) == "IBMsas" ]
    then
      type=sas
    else
      type=fcp
      diskfull=$(echo $diskfull | cut -c5- | sed 's/fcp/\ /' | awk '{print $1}')
    fi
  fi
  manufacturer=$(echo $diskfull | rev | sed 's/[0-9]/\ /g' | awk '{print $1}' | rev)
  if [ "$manufacturer" == "HITACHI" ]
  then
    serial=$(echo $diskfull | cut -c1-8)
    hexadiskid=$(echo $diskfull | cut -c9-12)
    diskid=$(printf "%d\n" 0x$hexadiskid)
  else
    if [ "$manufacturer" == "IBM" ] # for DS8k
    then
      if [ $(echo $diskfull | rev | cut -c6-9 | rev) == "2145" ]
      then
        # SVC disk
        typeset -Z2 diskid
        serial=$(echo $diskfull | cut -c2-33)
        diskid="NA"
      else
        # DS8000 disks
        serial=$(echo $diskfull | cut -c1-7)
        diskid=$(echo $diskfull | cut -c8-11)
      fi
    else
      typeset -Z2 diskid
      if [ "$manufacturer" == "DataCore" ]
      then
        serial=$(lscfg -vpl $hdisk | grep "Device Specific" | grep "(Z0)" | sed 's/\./\ /g' | rev | awk '{print $1}' | rev)
        diskid="NA"
      else
        if [ "$manufacturer" == "NVDISK" ]
        then
          serial=$(echo $diskfull | cut -c1-32 | tr 'A-Z' 'a-z')
          diskid=""
        else
          serial="NA"
          diskid="NA"
        fi
      fi
    fi
  fi
  if [ "$verbose" != "-c" ]
  then
    printf "%-15s %-25s %-15s %-15s %-37s %-10s %-10s\n" $hdisk $pvid $vg $manufacturer "$serial $diskid" $type $disksz
  else
    echo $hdisk";"$pvid";"$vg";"$manufacturer";"${serial}${diskid}";"$type";"$disksz
  fi
done
}
aix/pcmpathq.txt · Last modified: 2021/01/01 21:21 (external edit)