User Tools

Site Tools


aix:scripts_lv_read_copy

AIX script check which mirror copy is used, for performance

When you use mirror on AIX with 2 or 3 copies of logical volumes (LV), you can choose which copy is faster for read IOs (local copie is faster)

# cat check_fast_copy.sh

#!/usr/bin/ksh93
#set -x
##################################################
#@(#) Check if disks are reading on right site
# Only for 2 copies in a mirror, not test for 3
##################################################
# version: 1.0 08-2019 Manu
##################################################

dir=`dirname $0`
. $dir/.env

# use: lspv -u to get storage ID 
serial_storageA="33213600507111111111111"
serial_storageB="33213600507222222222222"

location=$($path_script/location.sh | awk '{print $1}')
case "$location" in
    "First_loc") site="siteA" ;;
    "Second_loc")  site="siteB" ;;
          *)  echo "Site Unkown"
              exit 1       ;;
esac


# list mirrored VG
for vg in $(lsvg -o)
do
  copies=$(lsvg -l $vg | awk '{print $2,$3,$4}' | egrep "jfs|boot|paging" | while read i j k
  do
    echo "scale=0;$k/$j" | bc
  done | sort -u | awk '{print $1}')
  if [ "$(echo $copies | tr ' ' '\n' | wc -l | awk '{print $1}')" != "1" ]
  then
    echo "# Mirror error in $vg"
  fi
  if [ "$copies" == "2" ]
  then
    countvg=0
    lspv -u | tr -s ' ' | sed 's/\ /;/g' | sed -e 's/;active;/;/' -e 's/;concurrent;/;/' | awk -F';' '{print $1";"$3";"$4}' | sed -e "s/${serial_storageA}/siteA;/"  -e "s/${serial_storageB}/siteB;/" | awk -F';' '{print $1";"$2";"$3}' | grep ";$vg;" > $logpath/relocate_map.out
    for lv in $(lsvg -l $vg | awk '{print $1,$2}' | egrep "jfs|boot|paging" | awk '{print $1}')
    do
      countlv=0
      # check the read copy on the LV, if 0 then the first copy is used
      read_copy=$(lslv $lv | tr -s ' ' | sed 's/\ /;/g' | grep ";PREFERRED;READ:" | rev | awk -F';' '{print $1}' | rev | sed 's/0/1/')
      if [ "${read_copy}" == "1" ]
      then
        pvs=$(lslv -m $lv | awk '{print $3}' | sed '/^$/d' | sed 's/$/;/' | grep -v '^PV1;' | sort -u | awk -F';' '{print $1}')
        secondcopy="2"
      else
        if [ "${read_copy}" == "2" ]
        then
          pvs=$(lslv -m $lv | awk '{print $5}' | sed '/^$/d' | sed 's/$/;/' | grep -v '^PV2;' | sort -u | awk -F';' '{print $1}')
          secondcopy="1"
        else
          echo "# Error bad preferred copy on $logical volume $lv in the vg $vg NOK"
        fi
      fi
      for pv in $pvs
      do
        if [ $(grep "^$pv;" $logpath/relocate_map.out | awk -F';' '{print $3}') != "$site" ]
        then
          ((countvg = countvg +1))
          ((countlv = countlv +1))
        fi
      done
      if [ "$countlv" == "0" ]
      then
        echo "# $vg : LV $lv is on the right location OK"
      else
        echo "# $vg : Please relocate the LV $lv on second copy"
        echo "chlv -R $secondcopy $lv"
      fi
    done
    if [ "$countvg" == "0" ]
    then
      echo "##### $vg : compliant with sites OK"
    else
      echo "##### $vg : not compliant with sites"
    fi
  fi
done
aix/scripts_lv_read_copy.txt · Last modified: 2021/01/01 21:24 (external edit)