mirror of
				https://github.com/apache/cloudstack.git
				synced 2025-10-26 08:42:29 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			102 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			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
 | |
| }
 | |
| 
 | |
| 
 |