#!/bin/bash # # chkconfig: - 24 76 # description: Starts and stops clvmd # # ### BEGIN INIT INFO # Provides: ### END INIT INFO . /etc/init.d/functions LVDISPLAY="/usr/sbin/lvdisplay" VGCHANGE="/usr/sbin/vgchange" VGSCAN="/usr/sbin/vgscan" VGDISPLAY="/usr/sbin/vgdisplay" VGS="/usr/sbin/vgs" CLVMDOPTS="-T20" [ -f /etc/sysconfig/cluster ] && . /etc/sysconfig/cluster LOCK_FILE="/var/lock/subsys/clvmd" start() { for rtrn in 0 do if ! pidof clvmd > /dev/null then echo -n "Starting clvmd: " daemon clvmd $CLVMDOPTS rtrn=$? echo if [ $rtrn -ne 0 ] then break fi fi # refresh cache $VGSCAN > /dev/null 2>&1 if [ -n "$LVM_VGS" ] then for vg in $LVM_VGS do action "Activating VG $vg:" $VGCHANGE -ayl $vg || rtrn=$? done else action "Activating VGs:" $VGCHANGE -ayl || rtrn=$? fi done return $rtrn } stop() { for rtrn in 0 do if [ -n "$LVM_VGS" ] then for vg in $LVM_VGS do action "Deactivating VG $vg:" $VGCHANGE -anl $vg || rtrn=$? done else # Hack to only deactivate clustered volumes clustervgs=`$VGDISPLAY 2> /dev/null | awk 'BEGIN {RS="VG Name"} {if (/Clustered/) print $1;}'` for vg in $clustervgs; do action "Deactivating VG $vg:" $VGCHANGE -anl $vg || rtrn=$? done fi [ $rtrn -ne 0 ] && break echo -n "Stopping clvm:" killproc clvmd -TERM rtrn=$? echo done return $rtrn } wait_for_finish() { count=0 while [ "$count" -le 10 -a -n "`pidof clvmd`" ] do sleep 1 count=$((count + 1)) done if [ `pidof clvmd` ] then return 1 else return 0 fi } rtrn=1 # See how we were called. case "$1" in start) start rtrn=$? [ $rtrn = 0 ] && touch $LOCK_FILE ;; stop) stop rtrn=$? [ $rtrn = 0 ] && rm -f $LOCK_FILE ;; restart) if stop then wait_for_finish start fi rtrn=$? ;; status) status clvmd rtrn=$? vols=$( $LVDISPLAY -C --nohead 2> /dev/null | awk '($3 ~ /....a./) {print $1}' ) echo active volumes: ${vols:-"(none)"} ;; *) echo $"Usage: $0 {start|stop|restart|status}" ;; esac exit $rtrn