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 19DAEMON=clvmd 20 21exec_prefix= 22sbindir=${exec_prefix}/sbin 23 24LVDISPLAY=${sbindir}/lvdisplay 25VGCHANGE=${sbindir}/vgchange 26VGSCAN=${sbindir}/vgscan 27VGDISPLAY=${sbindir}/vgdisplay 28VGS=${sbindir}/vgs 29 30CLVMDOPTS="-T20" 31 32[ -f /etc/sysconfig/cluster ] && . /etc/sysconfig/cluster 33 34[ -n "$CLVMD_CLUSTER_IFACE" ] && CLVMDOPTS="$CLVMDOPTS -I $CLVMD_CLUSTER_IFACE" 35 36LOCK_FILE="/var/lock/subsys/$DAEMON" 37 38start() 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 70stop() 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 99wait_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 117reload() { 118 $DAEMON -R 119} 120 121rh_status() { 122 status $DAEMON 123} 124 125rh_status_q() { 126 rh_status >/dev/null 2>&1 127} 128 129 130rtrn=1 131 132# See how we were called. 133case "$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 ;; 170esac 171 172exit $rtrn 173