Sophie

Sophie

distrib > Mandriva > 2006.0 > x86_64 > by-pkgid > 57abaa45c238a16486fdf71d85e7f65a > files > 2

drbd-utils-0.7.19-2.1.20060mdk.x86_64.rpm

#!/bin/bash
#
# chkconfig: 345 70 8
# description: Loads and unloads the drbd module
#
# complete rewrite from scratch by Philipp Reisner in March and April 2001
# rewrite from scratch by Lars Ellenberg in June 2002
# Jan 2003: Moved all the logic into a program written in C.
#
### BEGIN INIT INFO
# Provides: drbd
# Required-Start: $network $syslog sshd
# Required-Stop:
# Default-Start:  3 5
# Default-Stop:   0 1 2 6
# Description:    Control drbd resources.
### END INIT INFO

DEFAULTFILE="/etc/default/drbd"
DRBDADM="/usr/sbin/drbdadm"
PROC_DRBD="/proc/drbd"
MODPROBE="modprobe"
RMMOD="rmmod"
UDEV_TIMEOUT=10
ADD_MOD_PARAM=""

if [ -f $DEFAULTFILE ]; then
  . $DEFAULTFILE
fi

test -f $DRBDADM || exit 5

function assure_module_is_loaded
{
    [ -e "$PROC_DRBD" ] && return

    $MODPROBE -s drbd `$DRBDADM sh-mod-parms` $ADD_MOD_PARAM || { 
	echo "Can not load the drbd module."$'\n'; exit 20 
    }
    # tell klogd to reload module symbol information ...
    [ -e /var/run/klogd.pid ] && [ -x /sbin/klogd ] && /sbin/klogd -i

    # make sure udev has time to create the device files
    for RESOURCE in `$DRBDADM sh-resources`; do
	for DEVICE in `$DRBDADM sh-dev $RESOURCE`; do
	    UDEV_TIMEOUT_LOCAL=$UDEV_TIMEOUT
	    while [ ! -e $DEVICE ] && [ $UDEV_TIMEOUT_LOCAL -gt 0 ] ; do
		sleep 1
		UDEV_TIMEOUT_LOCAL=$(( $UDEV_TIMEOUT_LOCAL-1 ))
	    done
	done
    done
}

function adjust_with_progress
{
    IFS_O=$IFS
    NEWLINE='
'
    IFS=$NEWLINE
    local D=0
    local S=0
    local N=0

    COMMANDS=`$DRBDADM -d adjust all` || exit 20
    echo -n "[ "

    for CMD in $COMMANDS; do 
	if echo $CMD | grep -q disk; then echo -n "d$D "; D=$(( D+1 )); 
	elif echo $CMD | grep -q syncer; then echo -n "s$S "; S=$(( S+1 )); 
	elif echo $CMD | grep -q net; then echo -n "n$N "; N=$(( N+1 ));
	else echo echo -n ".. ";
	fi
	IFS=$IFS_O
	$CMD || { 
	    echo -e "\ncmd $CMD failed!"; exit 20 
	}
	IFS=$NEWLINE
    done
    echo -n "]"

    IFS=$IFS_O
}

case "$1" in
    start)
	echo -n "Starting DRBD resources:    "
	assure_module_is_loaded
	adjust_with_progress
	[ -d /var/lock/subsys ] && touch /var/lock/subsys/drbd  # for RedHat
	echo "."
	$DRBDADM wait_con_int # User interruptible version of wait_connect all
	;;
    stop)
	echo -n "Stopping all DRBD resources"
	if [ -e $PROC_DRBD ] ; then
		$DRBDADM down all
		$RMMOD drbd
	fi
	[ -f /var/lock/subsys/drbd ] && rm /var/lock/subsys/drbd
	echo "."
	;;
    status)
	# NEEDS to be heartbeat friendly...
	# so: put some "OK" in the output.
	if [ -e $PROC_DRBD ]; then
	    echo "drbd driver loaded OK; device status:"
	    cat $PROC_DRBD
	    exit 0
	else
	    echo >&2 "drbd not loaded"
	    exit 3
	fi
	;;
    reload)
	echo -n "Reloading DRBD configuration"
	$DRBDADM adjust all
	echo "."
	;;
    restart|force-reload)
	echo -n "Restarting all DRBD resources"
	$DRBDADM down all
	$RMMOD drbd
	assure_module_is_loaded
	$DRBDADM up all
	echo "."
	;;
    *)
	echo "Usage: /etc/init.d/drbd {start|stop|status|reload|restart|force-reload}"
	exit 1
	;;
esac

exit 0