#!/bin/bash # # multipathd Starts the multipath daemon # # chkconfig: - 06 87 # description: Manages device-mapper multipath devices ### BEGIN INIT INFO # Provides: multipathd # Required-Start: # Required-Stop: # Default-Start: # Default-Stop: # Short-Description: Control multipathd # Description: This service monitors and manages # device-mapper multipath devices ### END INIT INFO DAEMON=/sbin/multipathd prog=`basename $DAEMON` initdir=/etc/init.d lockdir=/var/lock/subsys sysconfig=/etc/sysconfig syspath=/sys/block RETVAL=0 teardown_slaves() { pushd $1 > /dev/null if [ -d "slaves" ]; then for slave in slaves/*; do if [ "$slave" = "slaves/*" ]; then read dev < $1/dev tablename=`dmsetup table --target multipath | sed -n "s/\(.*\): .* $dev .*/\1/p"` if ! [ -z $tablename ]; then echo "Root is on a multipathed device, multipathd can not be stopped" exit 1 fi else local_slave=`readlink -f $slave`; teardown_slaves $local_slave; fi done else read dev < $1/dev tablename=`dmsetup table --target multipath | sed -n "s/\(.*\): .* $dev .*/\1/p"` if ! [ -z $tablename ]; then echo "Root is on a multipathed device, multipathd can not be stopped" exit 1 fi fi popd > /dev/null } # # See how we were called. # start() { test -x $DAEMON || exit 5 echo -n $"Starting $prog daemon: " start-stop-daemon --start --quiet --exec $DAEMON RETVAL=$? [ $RETVAL -eq 0 ] && touch $lockdir/$prog echo } force_stop() { echo -n $"Stopping $prog daemon: " killall $DAEMON RETVAL=$? [ $RETVAL -eq 0 ] && rm -f $lockdir/$prog echo } stop() { root_dev=$(awk '{ if ($1 !~ /^[ \t]*#/ && $2 == "/") { print $1; }}' /etc/mtab) dm_num=`dmsetup info -c --noheadings -o minor $root_dev 2> /dev/null` if [ $? -eq 0 ]; then root_dm_device="dm-$dm_num" [ -d $syspath/$root_dm_device ] && teardown_slaves $syspath/$root_dm_device fi force_stop } restart() { stop start } force_restart() { force_stop start } reload() { echo -n "Reloading $prog: " trap "" SIGHUP killall $DAEMON -s SIGHUP -v RETVAL=$? echo } case "$1" in start) start ;; stop) stop ;; force-stop) force_stop ;; force-reload|reload) reload ;; restart) restart ;; force-restart) force_restart ;; condrestart|try-restart) if [ -f $lockdir/$prog ]; then restart fi ;; status) if pidof -o %PPID $DAEMON > /dev/null; then echo "Running" RETVAL=0 else echo "Not running" RETVAL=1 fi ;; *) echo $"Usage: $0 {start|stop|force-stop|status|restart|force-restart|condrestart|reload}" RETVAL=2 esac exit $RETVAL