mirror of
				https://github.com/apache/cloudstack.git
				synced 2025-11-04 00:02:37 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			100 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			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
 | 
						|
 |