#!/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="/sbin/drbdadm" PROC_DRBD="/proc/drbd" MODPROBE="/sbin/modprobe" RMMOD="/sbin/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 RESOURCE=`$DRBDADM sh-resources` || exit 20 RESOURCE=${RESOURCE%%\ *} DEVICE=`$DRBDADM sh-dev $RESOURCE` || exit 20 while [ ! -e $DEVICE ] && [ $UDEV_TIMEOUT -gt 0 ] ; do sleep 1 UDEV_TIMEOUT=$(( $UDEV_TIMEOUT-1 )) 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