Manuel Amador (Rudd-O) 05c020e1f6 Source code committed
2010-08-11 09:13:29 -07:00

100 lines
2.2 KiB
Bash
Executable File

#!/usr/bin/env bash
# $Id: showdisks.sh 9132 2010-06-04 20:17:43Z manuel $ $HeadURL: svn://svn.lab.vmops.com/repos/vmdev/java/scripts/storage/zfs/iscsi/showdisks.sh $
# mapiscsi.sh -- list of active iscsi sessions and the corresponding VM
#
usage() {
printf "Usage: %s <vm name> \n" $(basename $0) >&2
exit 2
}
get_disktype () {
local vmdisk=$1
if [[ $vmdisk =~ ^.*root.*$ ]]
then
echo "root";
return 0
fi
if [[ $vmdisk =~ ^.*swap.*$ ]]
then
echo "swap";
return 0
fi
if [[ $vmdisk =~ ^.*datadisk.*$ ]]
then
echo "datadisk";
return 0
fi
}
mirror_state0() {
local vmname=$1
local disktype=$2
mirr=$(ls -l /dev/md/ | grep $vmname-$disktype | awk '{print $(NF-2)}')
mdadm --query /dev/md/$mirr &> /dev/null
if [ $? -ne 0 -o "$mirr" == "" ]
then
state="Not mirrored"
else
state=$(mdadm --detail /dev/md/$mirr | grep "State : " | awk '{print $3 $4 $5}')
fi
echo $state
}
mirror_state1() {
local vmname=$1
local disktype=$2
local disk=$3
mirr=$(ls -l /dev/md/ | grep $vmname-$disktype | awk '{print $(NF-2)}')
mdadm --query /dev/md/$mirr &> /dev/null
if [ $? -eq 0 -a "$mirr" != "" ]
then
state=$(mdadm --detail /dev/md/$mirr | grep "$disk" | awk '{print $(NF-2), $(NF-1)}')
fi
echo $state
}
if [ "$1" == "" ]
then
usage
fi
vmname=$1
if ! xm list | grep -w $vmname > /dev/null
then
printf "%s: vm $vmname not found\n" $(basename $0)
exit 2
fi
#set -x
disks=$(ls -l /dev/disk/by-vm | grep $vmname | awk '{print $NF}')
for d in $disks
do
vmdisk=$(ls -l /dev/disk/by-vm | grep -w $d | awk '{print $(NF-2)}')
disktype=$(get_disktype $vmdisk)
lasttoken=$(echo $vmdisk | awk -F"-" '{print $NF}')
case "$lasttoken" in
"root");;
"swap");;
"[0-9]") ;;
*) vmdisk=${vmdisk%-*} #strip the ip address of storage host;;
esac
if [[ $vmdisk =~ ^.*datadisk.*$ ]]; then vmdisk=${vm%-*}; fi
disk=$d
d=${d##*/}
iqn=$(ls -l /dev/disk/by-path | grep -w $d | awk '{print $(NF-2)}')
ip=$(echo $iqn | awk -F: '{print $1}')
ip=${ip#ip-}
mirrstate="[$(mirror_state0 $vmname $disktype)]"
diskstate="[$(mirror_state1 $vmname $disktype $disk)]"
echo $vmname $disktype $disk $ip $mirrstate $diskstate
done
exit 0