mirror of
				https://github.com/apache/cloudstack.git
				synced 2025-10-26 08:42:29 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			236 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			236 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
| #!/usr/bin/env bash
 | |
| # $Id: mountrootdisk.sh 9132 2010-06-04 20:17:43Z manuel $ $HeadURL: svn://svn.lab.vmops.com/repos/vmdev/java/scripts/vm/storage/iscsi/mountrootdisk.sh $
 | |
| # mountrootdisk.sh -- mount  image directory from NFS and ISCSI server
 | |
| #
 | |
| #
 | |
| 
 | |
| dir=$(dirname $0)
 | |
| . $dir/iscsi_common.sh
 | |
| . $dir/mirror_common.sh
 | |
| 
 | |
| usage() {
 | |
|   printf "Usage: %s: [-u | -m ] -h <iscsi-target-host> -r <remote-dir> -t <root disk target-name> -w <swap disk target name>  -l <local dir> -n <vm-name> -b <bootloader> [-M -H <mirror-host> -T <mirror-disk-root-target> -W <mirror-swap-disk-target>]\n" $(basename $0) >&2
 | |
|   exit 2
 | |
| }
 | |
| 
 | |
| login() {
 | |
|   local vmname=$1
 | |
|   local iqn=$2
 | |
|   local host=$3
 | |
|   local localdir=$4
 | |
|   do_iscsi_login $iqn $host
 | |
|   if [ $? -gt 0 ]
 | |
|   then
 | |
|     printf "***Failed to login to $iqn at $host\n" >&2
 | |
|     unmount_all $localdir $vmname
 | |
|     exit  5
 | |
|   fi
 | |
| }
 | |
| 
 | |
| make_links() {
 | |
|   local vmname=$1
 | |
|   local host=$2
 | |
|   local iqn=$3
 | |
|   local disktype=$4
 | |
|   local localdir=$5
 | |
|   blkdev=$(get_device_links $host $iqn $disktype)
 | |
|   if [ "$blkdev" == "" ]
 | |
|   then
 | |
|       printf "***Failed to get device links for  $iqn $vmname $disktype\n" >&2
 | |
|       unmount_all $localdir $vmname
 | |
|       exit 8
 | |
|   fi
 | |
|   echo "/dev/$blkdev"
 | |
|   ln -s /dev/$blkdev $DISKDIR/$vmname-$disktype-$host
 | |
|   return $?
 | |
| }
 | |
| 
 | |
| #set -x
 | |
| 
 | |
| hflag=
 | |
| rflag=
 | |
| lflag=
 | |
| uflag=
 | |
| mflag=
 | |
| nflag=
 | |
| tflag=
 | |
| bflag=
 | |
| Mflag=
 | |
| Tflag=
 | |
| Wflag=
 | |
| rootname=
 | |
| swpname=
 | |
| rootmirror=
 | |
| swpmirror=
 | |
| tgthost=
 | |
| tgtmirror=
 | |
| bootloader="PyGrub"
 | |
| 
 | |
| while getopts 'umxw:t:n:h:H:r:l:T:W:Mb:' OPTION
 | |
| do
 | |
|   case $OPTION in
 | |
|   h)	hflag=1
 | |
| 		tgthost="$OPTARG"
 | |
| 		;;
 | |
|   H)	Hflag=1
 | |
| 		tgtmirror="$OPTARG"
 | |
| 		;;
 | |
|   r)	rflag=1
 | |
| 		remotedir="$OPTARG"
 | |
| 		;;
 | |
|   t)	tflag=1
 | |
| 		rootname="$OPTARG"
 | |
| 		;;
 | |
|   T)	Tflag=1
 | |
| 		rootmirror="$OPTARG"
 | |
| 		;;
 | |
|   b)	bflag=1
 | |
| 		bootloader="$OPTARG"
 | |
| 		;;
 | |
|   w)	wflag=1
 | |
| 		swpname="$OPTARG"
 | |
| 		;;
 | |
|   W)	Wflag=1
 | |
| 		swpmirror="$OPTARG"
 | |
| 		;;
 | |
|   l)	lflag=1
 | |
| 		localdir="$OPTARG"
 | |
| 		;;
 | |
|   n)	nflag=1
 | |
| 		vmname="$OPTARG"
 | |
| 		;;
 | |
|   u)    uflag=1
 | |
| 		;;
 | |
|   m)    mflag=1
 | |
| 		;;
 | |
|   M)    Mflag=1
 | |
| 		;;
 | |
|   x)    set -x	
 | |
| 		;;
 | |
|   ?)	usage
 | |
| 		exit 2
 | |
| 		;;
 | |
|   esac
 | |
| done
 | |
| 
 | |
| if [ "$hflag$rflag$lflag$nflag$tflag" != "11111" ] && [ "$uflag$lflag$nflag" != "111" ]
 | |
| then
 | |
|  usage
 | |
| fi
 | |
| 
 | |
| if [ "$uflag$mflag" != "1" ] 
 | |
| then
 | |
|   printf "***Specify one of -u (unmount) or -m (mount)\n" >&2
 | |
|   usage
 | |
| fi
 | |
| 
 | |
| 
 | |
| if [ "$uflag" == "1" ]
 | |
| then
 | |
|   if [ "$Mflag$uflag" == "1" ] 
 | |
|   then
 | |
|     unmount_all $localdir $vmname
 | |
|     rc=$?
 | |
|     exit $rc
 | |
|   elif [ "$Mflag$uflag" == "11" ]
 | |
|   then
 | |
|     stop_mirror $vmname root 
 | |
|     rc=$?
 | |
|     stop_mirror $vmname swap 
 | |
|     unmount_all $localdir $vmname
 | |
|     rc=$?
 | |
|     exit $rc
 | |
|   fi
 | |
| fi
 | |
| 
 | |
| 
 | |
| #create the local dir if necessary
 | |
| if ! mkdir -p $localdir
 | |
| then
 | |
|   printf "***Unable to create local directory, exiting\n" >&2
 | |
| fi
 | |
| 
 | |
| #create disk directory if needed
 | |
| if [ ! -d $DISKDIR ]; 
 | |
| then   
 | |
|   mkdir $DISKDIR 
 | |
| fi
 | |
| 
 | |
| #check if the iscsi target portal is up and running
 | |
| if ! check_iscsi_server "$tgthost" 4
 | |
| then
 | |
|    printf "***Unable to ping the iscsi target host $tgthost, exiting\n" >&2
 | |
|    exit 3
 | |
| fi
 | |
| 
 | |
| if [ "$Mflag" == 1 ]
 | |
| then
 | |
|   if ! check_iscsi_server "$tgtmirror" 4
 | |
|   then
 | |
|      printf "***Unable to ping the iscsi target host $tgtmirror, exiting\n" >&2
 | |
|      exit 3
 | |
|   fi
 | |
| fi
 | |
| 
 | |
| bootloader=$(echo $bootloader | tr [A-Z] [a-z])
 | |
| if [ "$bootloader" == "external" ]
 | |
| then
 | |
|   #mount the local dir (for kernel, ramdisk, etc)
 | |
|   mount -t nfs $tgthost:$remotedir $localdir -o intr,rsize=32768,wsize=32768,hard
 | |
|   if [ $? -gt 0 ] 
 | |
|   then
 | |
|     printf "***Failed to mount $remotedir at $localdir\n" >&2
 | |
|     exit 5
 | |
|   fi
 | |
| fi
 | |
| 
 | |
| login $vmname $rootname $tgthost $localdir
 | |
| sleep 1
 | |
| 
 | |
| if [ -n "$swpname" ]
 | |
| then
 | |
|   login $vmname $swpname $tgthost $localdir
 | |
|   sleep 1
 | |
| fi
 | |
| 
 | |
| if [ -n "$rootmirror" ]
 | |
| then
 | |
|   login $vmname $rootmirror $tgtmirror $localdir
 | |
|   sleep 1
 | |
| fi
 | |
| 
 | |
| if [ -n "$swpmirror" ]
 | |
| then
 | |
|   login $vmname $swpmirror $tgtmirror $localdir
 | |
|   sleep 1
 | |
| fi
 | |
| 
 | |
| #figure out the device number and make a softlink 
 | |
| root0dev=$(make_links $vmname $tgthost $rootname root $localdir)
 | |
| 
 | |
| if [ -n "$swpname" ] 
 | |
| then
 | |
|   swap0dev=$(make_links $vmname $tgthost $swpname swap $localdir)
 | |
| fi
 | |
| 
 | |
| if [ -n "$rootmirror" ] 
 | |
| then
 | |
|   root1dev=$(make_links $vmname $tgtmirror $rootmirror root $localdir)
 | |
| fi
 | |
| 
 | |
| if [ -n "$swpmirror" ] 
 | |
| then
 | |
|   swap1dev=$(make_links $vmname $tgtmirror $swpmirror swap $localdir)
 | |
| fi
 | |
| 
 | |
| if [ "$Mflag" == "1" ]
 | |
| then
 | |
|   build_mirror $vmname root $root0dev $root1dev
 | |
|   if [ "$swap0dev" ]
 | |
|   then
 | |
|     build_mirror $vmname swap $swap0dev $swap1dev
 | |
|   fi
 | |
| fi
 | |
| 
 | |
| exit 0
 |