cloudstack/scripts/vm/storage/iscsi/mirror_common.sh
Manuel Amador (Rudd-O) 05c020e1f6 Source code committed
2010-08-11 09:13:29 -07:00

102 lines
2.3 KiB
Bash
Executable File

#!/usr/bin/env bash
# $Id: mirror_common.sh 9132 2010-06-04 20:17:43Z manuel $ $HeadURL: svn://svn.lab.vmops.com/repos/vmdev/java/scripts/vm/storage/iscsi/mirror_common.sh $
# mirror_common.sh -- md operations
#
#
export MDADM_NO_UDEV=1
# build a mirror of 2 disks
# $1 = vm name
# $2 = disk type (root/swap/data)
# $3 = block device #1 (/dev/sdX)
# $4 = block device #2 (/dev/sdX)
build_mirror() {
local vmname=$1
local disktype=$2
local bd1=$3
local bd2=$4
mkdir -p /var/md
mkdir -p /dev/md
mdadm --build /dev/md/$vmname-$disktype --level=mirror --raid-devices=2 $bd1 $bd2 --assume-clean -b /var/md/$vmname-$disktype
return $?
}
# stop a mirror of 2 disks
# $1 = vm name
# $2 = disk type (root/swap/data)
stop_mirror () {
local vmname=$1
local disktype=$2
mdadm --stop /dev/md/$vmname-$disktype
rm -f /var/md/$vmname-$disktype
rm -f /dev/md/$vmname-$disktype
return $?
}
# remove one disk of a mirrored pair
# $1 = vm name
# $2 = disk type (root/swap/data)
# $3 = block device to remove
remove_disk_from_mirror() {
local vmname=$1
local disktype=$2
local bd=$3
mdadm /dev/md/$vmname-$disktype --fail $bd
local rc=$?
local i=0
while [ $rc -gt 0 -a $i -lt 5 ] #sometimes get device busy
do
sleep 2;
mdadm /dev/md/$vmname-$disktype --fail $bd
rc=$?
let i=i+1
done
i=0
mdadm /dev/md/$vmname-$disktype --remove $bd
rc=$?
while [ $rc -gt 0 -a $i -lt 5 ] #sometimes get device busy
do
sleep 2;
mdadm /dev/md/$vmname-$disktype --remove $bd
rc=$?
let i=i+1
done
return $?
}
# add one disk to a mirrored set
# $1 = vm name
# $2 = disk type (root/swap/data)
# $3 = block device to add
add_disk_to_mirror() {
local vmname=$1
local disktype=$2
local bd=$3
mdadm /dev/md/$vmname-$disktype --add $bd
return $?
}
# is iscsi disk part of the mirror already?
# $1 = vm name
# $2 = disk type (root/swap/data)
# $3 = iqn of the iscsi disk
part_of_mirror() {
local vmname=$1
local disktype=$2
local iqn=$3
local mdisks=$(mdadm --detail /dev/md/$vmname-$disktype | grep "/dev/sd" | awk '{print $NF}')
local idisk=$(ls -al /dev/disk/by-path/ | grep -v part | grep $iqn | awk '{print $NF}' )
idisk=${idisk##*/} #strip everything till last slash
for md in $mdisks
do
md=${md##*/}
if [ "$md" == "$idisk" ]
then
return 0
fi
done
return 1
}