Home | History | Annotate | Line # | Download | only in scripts
      1 #!/bin/bash
      2 #
      3 # chkconfig: - 24 76
      4 # description: Starts and stops clvmd
      5 #
      6 # For Red-Hat-based distributions such as Fedora, RHEL, CentOS.
      7 #	       
      8 ### BEGIN INIT INFO
      9 # Provides: clvmd
     10 # Required-Start: $local_fs
     11 # Required-Stop: $local_fs
     12 # Default-Start:
     13 # Default-Stop: 0 1 6
     14 # Short-Description: Clustered LVM Daemon
     15 ### END INIT INFO
     16 
     17 . /etc/init.d/functions
     18 
     19 DAEMON=clvmd
     20 
     21 exec_prefix=
     22 sbindir=${exec_prefix}/sbin
     23 
     24 LVDISPLAY=${sbindir}/lvdisplay
     25 VGCHANGE=${sbindir}/vgchange
     26 VGSCAN=${sbindir}/vgscan
     27 VGDISPLAY=${sbindir}/vgdisplay
     28 VGS=${sbindir}/vgs
     29 
     30 CLVMDOPTS="-T20"
     31 
     32 [ -f /etc/sysconfig/cluster ] && . /etc/sysconfig/cluster
     33 
     34 [ -n "$CLVMD_CLUSTER_IFACE" ] && CLVMDOPTS="$CLVMDOPTS -I $CLVMD_CLUSTER_IFACE" 
     35 
     36 LOCK_FILE="/var/lock/subsys/$DAEMON"
     37 
     38 start()
     39 {
     40 	for rtrn in 0
     41 	do
     42 		if ! pidof $DAEMON > /dev/null 
     43 		then 
     44 			echo -n "Starting $DAEMON: "
     45 			daemon $DAEMON $CLVMDOPTS
     46 			rtrn=$?
     47 			echo
     48 			if [ $rtrn -ne 0 ]
     49 			then
     50 				break
     51 			fi
     52  		fi	
     53 		# refresh cache
     54 		$VGSCAN  > /dev/null 2>&1
     55 		
     56 		if [ -n "$LVM_VGS" ]
     57 		then
     58 			for vg in $LVM_VGS
     59 			do
     60 				action "Activating VG $vg:" $VGCHANGE -ayl $vg || rtrn=$?
     61 			done
     62 		else
     63 			action "Activating VGs:" $VGCHANGE -ayl || rtrn=$?
     64 		fi
     65 	done
     66 
     67 	return $rtrn
     68 }
     69 
     70 stop()
     71 {
     72 	for rtrn in 0
     73 	do
     74 		if [ -n "$LVM_VGS" ]
     75 		then
     76 			for vg in $LVM_VGS
     77 			do
     78 				action "Deactivating VG $vg:" $VGCHANGE -anl $vg || rtrn=$?
     79 			done
     80 		else
     81 			# Hack to only deactivate clustered volumes
     82 			clustervgs=`$VGDISPLAY 2> /dev/null | awk 'BEGIN {RS="VG Name"} {if (/Clustered/) print $1;}'`
     83 			for vg in $clustervgs; do
     84 				action "Deactivating VG $vg:" $VGCHANGE -anl $vg || rtrn=$?
     85 			done
     86 		fi
     87 
     88 		[ $rtrn -ne 0 ] && break
     89 
     90 		echo -n "Stopping clvm:"
     91 		killproc $DAEMON -TERM
     92 		rtrn=$?
     93 		echo
     94 	done
     95 	
     96 	return $rtrn
     97 }
     98 
     99 wait_for_finish()
    100 {
    101 	count=0
    102 
    103 	while [ "$count" -le 10 -a -n "`pidof $DAEMON`" ]
    104 	do
    105 		sleep 1
    106 		count=$((count + 1))
    107 	done
    108 	
    109 	if [ `pidof $DAEMON` ]
    110 	then
    111 		return 1
    112 	else
    113 		return 0
    114 	fi
    115 }
    116 
    117 reload() {
    118 	$DAEMON -R
    119 }
    120 
    121 rh_status() {
    122 	status $DAEMON
    123 }
    124 
    125 rh_status_q() {
    126 	rh_status >/dev/null 2>&1
    127 }
    128 
    129 
    130 rtrn=1
    131 
    132 # See how we were called.
    133 case "$1" in
    134   start)
    135 	start
    136 	rtrn=$?
    137 	[ $rtrn = 0 ] && touch $LOCK_FILE
    138 	;;
    139 
    140   stop)
    141 	stop
    142 	rtrn=$?
    143 	[ $rtrn = 0 ] && rm -f $LOCK_FILE
    144 	;;
    145 
    146   restart)
    147 	if stop
    148 	then
    149 		wait_for_finish
    150 		start
    151 	fi 
    152 	rtrn=$?
    153 	;;
    154 
    155   reload)
    156 	rh_status_q || exit 7
    157 	reload
    158 	;;
    159 
    160   status)
    161 	rh_status
    162 	rtrn=$?
    163 	vols=$( $LVDISPLAY -C --nohead 2> /dev/null | awk '($3 ~ /....a./) {print $1}' )
    164 	echo active volumes: ${vols:-"(none)"}
    165 	;;
    166 
    167   *)
    168 	echo $"Usage: $0 {start|stop|restart|reload|status}"
    169 	;;
    170 esac
    171 
    172 exit $rtrn
    173