home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / boot / i386 / rescue / etc / init.d / boot.multipath < prev    next >
Text File  |  2006-11-29  |  3KB  |  105 lines

  1. #! /bin/sh
  2. # Copyright (c) 2005 SuSE GmbH Nuernberg, Germany.
  3. #
  4. # Author: Hannes Reinecke <feedback@suse.de>
  5. #
  6. # init.d/boot.multipath
  7. #
  8. ### BEGIN INIT INFO
  9. # Provides:          boot.multipath
  10. # Required-Start:    boot.device-mapper boot.udev
  11. # Required-Stop:
  12. # Default-Start:     B
  13. # Default-Stop:
  14. # Description:       Create multipath device targets
  15. ### END INIT INFO
  16.  
  17. PATH=/bin:/usr/bin:/sbin:/usr/sbin
  18. PROGRAM=/sbin/multipath
  19.  
  20. # Set the maximum number of open files
  21. MAX_OPEN_FDS=4096
  22.  
  23. test -x $PROGRAM || exit 5
  24.  
  25. # Shell functions sourced from /etc/rc.status:
  26. #      rc_check         check and set local and overall rc status
  27. #      rc_status        check and set local and overall rc status
  28. #      rc_status -v     ditto but be verbose in local rc status
  29. #      rc_status -v -r  ditto and clear the local rc status
  30. #      rc_failed        set local and overall rc status to failed
  31. #      rc_reset         clear local rc status (overall remains)
  32. #      rc_exit          exit appropriate to overall rc status
  33. . /etc/rc.status
  34.  
  35. # First reset status of this service
  36. rc_reset
  37.  
  38. # Return values acc. to LSB for all commands but status:
  39. # 0 - success
  40. # 1 - misc error
  41. # 2 - invalid or excess args
  42. # 3 - unimplemented feature (e.g. reload)
  43. # 4 - insufficient privilege
  44. # 5 - program not installed
  45. # 6 - program not configured
  46. # 7 - program is not running
  47. # Note that starting an already running service, stopping
  48. # or restarting a not-running service as well as the restart
  49. # with force-reload (in case signalling is not supported) are
  50. # considered a success.
  51.  
  52. case "$1" in
  53.     start)
  54.     echo -n "Creating multipath targets"
  55.     # Check whether multipath daemon is already running
  56.     if /sbin/multipathd -k"list paths" > /dev/null 2>&1 ; then
  57.         echo -n " (multipathd running)"
  58.         rc_status -v
  59.         rc_exit
  60.     fi
  61.  
  62.     # Load prerequisite module
  63.     modprobe dm-multipath
  64.     
  65.     # Be a chicken and flush all existing maps
  66.     $PROGRAM -F
  67.  
  68.     # Clear /dev/disk/by-name/ prior to start-up; multipath will
  69.     # recreate them.
  70.     rm -f /dev/disk/by-name/* 2>&1 >/dev/null
  71.  
  72.     # Set the maximum number of open files
  73.     if [ -n "$MAX_OPEN_FDS" ] ; then
  74.         ulimit -n $MAX_OPEN_FDS
  75.     fi
  76.  
  77.     # Start the program directly as checkproc doesn't work here
  78.     $PROGRAM -v 0
  79.  
  80.     # Create all partitions which might have been missing
  81.     /sbin/dmsetup ls --target multipath --exec "/sbin/kpartx -a -p -part"
  82.  
  83.     # Remember status and be verbose
  84.     rc_status -v
  85.     sleep 1
  86.     ;;
  87.     stop)
  88.     # Remove all partition mappings
  89.     if dmsetup ls | grep -q -- -part; then
  90.         /sbin/dmsetup ls --target multipath --exec "/sbin/kpartx -d -p -part"
  91.     fi
  92.  
  93.     # And remove the multipath mappings themselves
  94.     for map in $(/sbin/dmsetup ls --target multipath | cut -f 1); do
  95.         /sbin/dmsetup remove $map
  96.     done
  97.     ;;
  98.     *)
  99.     echo "Usage: $0 {start|stop}"
  100.     exit 1
  101.     ;;
  102. esac
  103. rc_exit
  104.