|
@@ -1,8 +1,8 @@
|
|
#! /bin/sh
|
|
#! /bin/sh
|
|
#
|
|
#
|
|
# Based on a example file to build /etc/init.d/ scripts,
|
|
# Based on a example file to build /etc/init.d/ scripts,
|
|
-# written by Miquel van Smoorenburg <miquels@cistron.nl>
|
|
|
|
-# and later modified by Ian Murdock <imurdock@gnu.ai.mit.edu>.
|
|
|
|
|
|
+# written by Miquel van Smoorenburg <miquels@cistron.nl>
|
|
|
|
+# and later modified by Ian Murdock <imurdock@gnu.ai.mit.edu>.
|
|
#
|
|
#
|
|
# Also based on init script mountnfs.sh from initscripts package.
|
|
# Also based on init script mountnfs.sh from initscripts package.
|
|
#
|
|
#
|
|
@@ -10,6 +10,7 @@
|
|
# Copyright 2006-2014. Under GPLv2.
|
|
# Copyright 2006-2014. Under GPLv2.
|
|
#
|
|
#
|
|
# Support for LVM and other mount points contributed by Glen W. Mabey.
|
|
# Support for LVM and other mount points contributed by Glen W. Mabey.
|
|
|
|
+# Support for RAID contributed by Gabor Kiss.
|
|
#
|
|
#
|
|
### BEGIN INIT INFO
|
|
### BEGIN INIT INFO
|
|
# Provides: aoe aoetools
|
|
# Provides: aoe aoetools
|
|
@@ -30,177 +31,208 @@ DESC="AoE devices discovery and mounting AoE filesystems"
|
|
. /lib/lsb/init-functions
|
|
. /lib/lsb/init-functions
|
|
|
|
|
|
# Include aoetools defaults if available
|
|
# Include aoetools defaults if available
|
|
-if [ -f /etc/default/aoetools ] ; then
|
|
|
|
- . /etc/default/aoetools
|
|
|
|
|
|
+if [ -f /etc/default/aoetools ]
|
|
|
|
+then
|
|
|
|
+ . /etc/default/aoetools
|
|
fi
|
|
fi
|
|
|
|
|
|
set -e
|
|
set -e
|
|
|
|
|
|
create_fs_list() {
|
|
create_fs_list() {
|
|
- # We start with a list from /etc/default/aoetools.
|
|
|
|
- waitaoe="$AOEMOUNTS"
|
|
|
|
-
|
|
|
|
- [ -f /etc/fstab ] || return
|
|
|
|
- #
|
|
|
|
- # Read through fstab line by line. If it contains /dev/etherd, set the flag
|
|
|
|
- # for mounting file systems over AoE.
|
|
|
|
- #
|
|
|
|
|
|
+ # We start with a list from /etc/default/aoetools.
|
|
|
|
+ waitaoe="$AOEMOUNTS"
|
|
|
|
+
|
|
|
|
+ [ -f /etc/fstab ] || return
|
|
|
|
+ #
|
|
|
|
+ # Read through fstab line by line. If it contains /dev/etherd, set the flag
|
|
|
|
+ # for mounting file systems over AoE.
|
|
|
|
+ #
|
|
|
|
+
|
|
|
|
+ exec 9<&0 </etc/fstab
|
|
|
|
+
|
|
|
|
+ while read DEV MTPT FSTYPE OPTS REST
|
|
|
|
+ do
|
|
|
|
+ case "$OPTS" in
|
|
|
|
+ noauto|*,noauto|noauto,*|*,noauto,*)
|
|
|
|
+ continue
|
|
|
|
+ ;;
|
|
|
|
+ esac
|
|
|
|
+ case "$DEV" in
|
|
|
|
+ ''|\#*)
|
|
|
|
+ continue
|
|
|
|
+ ;;
|
|
|
|
+ /dev/etherd/*)
|
|
|
|
+ waitaoe="$waitaoe $MTPT"
|
|
|
|
+ esac
|
|
|
|
+ done
|
|
|
|
|
|
- exec 9<&0 </etc/fstab
|
|
|
|
|
|
+ exec 0<&9 9<&-
|
|
|
|
+}
|
|
|
|
|
|
- while read DEV MTPT FSTYPE OPTS REST
|
|
|
|
|
|
+do_start() {
|
|
|
|
+ # We exit if the user does not want us to try this.
|
|
|
|
+ if [ "$INTERFACES" = "none" ]
|
|
|
|
+ then
|
|
|
|
+ echo "INTERFACES='none' in /etc/default/aoetools, not started."
|
|
|
|
+ exit 0
|
|
|
|
+ fi
|
|
|
|
+
|
|
|
|
+ # Usually aoe is a module, so we will try to load it.
|
|
|
|
+ if [ -n "$INTERFACES" ]
|
|
|
|
+ then
|
|
|
|
+ modprobe aoe aoe_iflist="$INTERFACES" >/dev/null 2>&1 || true
|
|
|
|
+ else
|
|
|
|
+ modprobe aoe >/dev/null 2>&1 || true
|
|
|
|
+ fi
|
|
|
|
+
|
|
|
|
+ # Also, if udev is being used, the /dev/etherd devices
|
|
|
|
+ # are not created until aoe module insertion, so...
|
|
|
|
+ sleep 1 # ...we give udev a chance to populate /dev/etherd/.
|
|
|
|
+
|
|
|
|
+ if [ ! -c /dev/etherd/discover ]
|
|
|
|
+ then
|
|
|
|
+ echo
|
|
|
|
+ echo "Missing devices under /dev/etherd/. Please run" >&2
|
|
|
|
+ echo " aoe-mkdevs /dev/etherd" >&2
|
|
|
|
+ echo "and try again." >&2
|
|
|
|
+ exit 1
|
|
|
|
+ fi
|
|
|
|
+
|
|
|
|
+ # Try to set up interfaces for discovery, if any.
|
|
|
|
+ if [ -n "$INTERFACES" ]
|
|
|
|
+ then
|
|
|
|
+ aoe-interfaces $INTERFACES
|
|
|
|
+ fi
|
|
|
|
+
|
|
|
|
+ aoe-discover
|
|
|
|
+
|
|
|
|
+ create_fs_list
|
|
|
|
+
|
|
|
|
+ if [ -n "$waitaoe" ]
|
|
|
|
+ then
|
|
|
|
+ echo
|
|
|
|
+ fi
|
|
|
|
+
|
|
|
|
+ if [ ! -x '/sbin/mdadm' -a -n "$RAID_ARRAYS" ]
|
|
|
|
+ then
|
|
|
|
+ echo
|
|
|
|
+ echo "/sbin/mdadm is not present. Please install mdadm package and try again." >&2
|
|
|
|
+ echo "RAID_ARRAYS option is ignored." >&2
|
|
|
|
+ RAID_ARRAYS=''
|
|
|
|
+ fi
|
|
|
|
+
|
|
|
|
+ if [ -n "$RAID_ARRAYS" ]
|
|
|
|
+ then
|
|
|
|
+ echo "Assembling RAID arrays..."
|
|
|
|
+ for md in $RAID_ARRAYS
|
|
do
|
|
do
|
|
- case "$OPTS" in
|
|
|
|
- noauto|*,noauto|noauto,*|*,noauto,*)
|
|
|
|
- continue
|
|
|
|
- ;;
|
|
|
|
- esac
|
|
|
|
- case "$DEV" in
|
|
|
|
- ""|\#*)
|
|
|
|
- continue
|
|
|
|
- ;;
|
|
|
|
- /dev/etherd/*)
|
|
|
|
- waitaoe="$waitaoe $MTPT"
|
|
|
|
- esac
|
|
|
|
|
|
+ /sbin/mdadm --assemble $md --scan
|
|
done
|
|
done
|
|
|
|
+ fi
|
|
|
|
+
|
|
|
|
+ if [ ! -x '/sbin/vgchange' -a -n "$LVMGROUPS" ]
|
|
|
|
+ then
|
|
|
|
+ echo
|
|
|
|
+ echo "The LVM2 tools are not present. Please install lvm2 package and try again." >&2
|
|
|
|
+ echo "We will not honour LVMGROUPS." >&2
|
|
|
|
+ LVMGROUPS=''
|
|
|
|
+ fi
|
|
|
|
+
|
|
|
|
+ if [ -n "$LVMGROUPS" ]
|
|
|
|
+ then
|
|
|
|
+ echo "Assembling LVM2 groups..."
|
|
|
|
+ for vg in "$LVMGROUPS"
|
|
|
|
+ do
|
|
|
|
+ vgchange --available=y $vg
|
|
|
|
+ done
|
|
|
|
+ fi
|
|
|
|
|
|
- exec 0<&9 9<&-
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-do_start() {
|
|
|
|
- # We exit if the user does not want us to try this.
|
|
|
|
- if [ "$INTERFACES" = "none" ]
|
|
|
|
- then
|
|
|
|
- echo "INTERFACES='none' in /etc/default/aoetools, not started."
|
|
|
|
- exit 0
|
|
|
|
- fi
|
|
|
|
-
|
|
|
|
- # Usually aoe is a module, so we will try to load it.
|
|
|
|
- if [ -n "$INTERFACES" ]
|
|
|
|
- then
|
|
|
|
- modprobe aoe aoe_iflist="$INTERFACES" >/dev/null 2>&1 || true
|
|
|
|
- else
|
|
|
|
- modprobe aoe >/dev/null 2>&1 || true
|
|
|
|
- fi
|
|
|
|
-
|
|
|
|
- # Also, if udev is being used, the /dev/etherd devices
|
|
|
|
- # are not created until aoe module insertion, so...
|
|
|
|
- sleep 1 # ...we give udev a chance to populate /dev/etherd/.
|
|
|
|
-
|
|
|
|
- if [ ! -c /dev/etherd/discover ]
|
|
|
|
- then
|
|
|
|
- echo
|
|
|
|
- echo "Missing devices under /dev/etherd/. Please run" >&2
|
|
|
|
- echo " aoe-mkdevs /dev/etherd" >&2
|
|
|
|
- echo "and try again." >&2
|
|
|
|
- exit 1
|
|
|
|
- fi
|
|
|
|
-
|
|
|
|
- # Try to set up interfaces for discovery, if any.
|
|
|
|
- if [ -n "$INTERFACES" ]
|
|
|
|
- then
|
|
|
|
- aoe-interfaces $INTERFACES
|
|
|
|
- fi
|
|
|
|
-
|
|
|
|
- aoe-discover
|
|
|
|
-
|
|
|
|
- create_fs_list
|
|
|
|
-
|
|
|
|
- if [ -n "$waitaoe" ]
|
|
|
|
- then
|
|
|
|
- echo
|
|
|
|
- fi
|
|
|
|
-
|
|
|
|
- if [ ! -x "/sbin/vgchange" -a -n "$LVMGROUPS" ]
|
|
|
|
- then
|
|
|
|
- echo
|
|
|
|
- echo "The LVM2 tools are not present. Please install lvm2 package and try again." >&2
|
|
|
|
- echo "We will not honour LVMGROUPS." >&2
|
|
|
|
- LVMGROUPS=''
|
|
|
|
- fi
|
|
|
|
-
|
|
|
|
- if [ -n "$LVMGROUPS" ]
|
|
|
|
- then
|
|
|
|
- echo "Assembling LVM2 groups..."
|
|
|
|
- for vg in "$LVMGROUPS"; do
|
|
|
|
- vgchange --available=y $vg
|
|
|
|
- done
|
|
|
|
- fi
|
|
|
|
-
|
|
|
|
- if [ -n "$waitaoe" ]
|
|
|
|
- then
|
|
|
|
- for mountpt in $waitaoe; do
|
|
|
|
- echo "Mounting $mountpt..."
|
|
|
|
- mount $mountpt
|
|
|
|
- #log_action_begin_msg "Waiting for $mountpt."
|
|
|
|
- done
|
|
|
|
- else
|
|
|
|
- echo "Nothing to mount."
|
|
|
|
- fi
|
|
|
|
|
|
+ if [ -n "$waitaoe" ]
|
|
|
|
+ then
|
|
|
|
+ for mountpt in $waitaoe
|
|
|
|
+ do
|
|
|
|
+ echo "Mounting $mountpt..."
|
|
|
|
+ mount $mountpt
|
|
|
|
+ #log_action_begin_msg "Waiting for $mountpt."
|
|
|
|
+ done
|
|
|
|
+ else
|
|
|
|
+ echo "Nothing to mount."
|
|
|
|
+ fi
|
|
}
|
|
}
|
|
|
|
|
|
do_stop() {
|
|
do_stop() {
|
|
- create_fs_list
|
|
|
|
-
|
|
|
|
- if [ -n "$waitaoe" ]
|
|
|
|
- then
|
|
|
|
- for mountpt in $waitaoe; do
|
|
|
|
- if [ -z "`awk '{print $2}' < /proc/mounts | grep -w $mountpt$`" ];then
|
|
|
|
- # It's already been unmounted.
|
|
|
|
- continue
|
|
|
|
- fi
|
|
|
|
- echo "Unmounting $mountpt..."
|
|
|
|
- umount $mountpt
|
|
|
|
- done
|
|
|
|
- fi
|
|
|
|
-
|
|
|
|
- if [ -n "$LVMGROUPS" ]
|
|
|
|
- then
|
|
|
|
- for vg in "$LVMGROUPS"; do
|
|
|
|
- vgchange --available=n $vg
|
|
|
|
- done
|
|
|
|
- fi
|
|
|
|
-
|
|
|
|
- # Removing the module prevents LVM's "Shutting down LVM Volume Groups..."
|
|
|
|
- # from hanging when an LVM has been setup on a device in /dev/etherd/.
|
|
|
|
- modprobe --remove aoe >/dev/null 2>&1 || true
|
|
|
|
|
|
+ create_fs_list
|
|
|
|
+
|
|
|
|
+ if [ -n "$waitaoe" ]
|
|
|
|
+ then
|
|
|
|
+ for mountpt in $waitaoe; do
|
|
|
|
+ if [ -z "`awk '{print $2}' < /proc/mounts | grep -w $mountpt$`" ]
|
|
|
|
+ then
|
|
|
|
+ # It's already been unmounted.
|
|
|
|
+ continue
|
|
|
|
+ fi
|
|
|
|
+ echo "Unmounting $mountpt..."
|
|
|
|
+ umount $mountpt
|
|
|
|
+ done
|
|
|
|
+ fi
|
|
|
|
+
|
|
|
|
+ if [ -n "$LVMGROUPS" ]
|
|
|
|
+ then
|
|
|
|
+ for vg in "$LVMGROUPS"
|
|
|
|
+ do
|
|
|
|
+ vgchange --available=n $vg
|
|
|
|
+ done
|
|
|
|
+ fi
|
|
|
|
+
|
|
|
|
+ if [ -x /sbin/mdadm -a -n "$RAID_ARRAYS" ]
|
|
|
|
+ then
|
|
|
|
+ echo "Stopping RAID arrays..."
|
|
|
|
+ for md in $RAID_ARRAYS
|
|
|
|
+ do
|
|
|
|
+ /sbin/mdadm --stop /dev/$md
|
|
|
|
+ done
|
|
|
|
+ fi
|
|
|
|
+
|
|
|
|
+ # Removing the module prevents LVM's "Shutting down LVM Volume Groups..."
|
|
|
|
+ # from hanging when an LVM has been setup on a device in /dev/etherd/.
|
|
|
|
+ modprobe --remove aoe >/dev/null 2>&1 || true
|
|
}
|
|
}
|
|
|
|
|
|
do_status() {
|
|
do_status() {
|
|
- if $(lsmod |grep -qw '^aoe\s')
|
|
|
|
- then
|
|
|
|
- echo 'The aoe module is loaded.'
|
|
|
|
- fi
|
|
|
|
- # FIXME: Make something smarter like detect udev or a monolithic kernel.
|
|
|
|
-
|
|
|
|
- AOE_MOUNTS="$(grep '/dev/etherd/' /proc/mounts)"
|
|
|
|
- if [ -n "$AOE_MOUNTS" ]
|
|
|
|
- then
|
|
|
|
- echo 'The following AoE file systems are mounted:'
|
|
|
|
- echo "$AOE_MOUNTS" | awk '{print $2}'
|
|
|
|
- else
|
|
|
|
- echo 'No AoE file systems mounted.'
|
|
|
|
- fi
|
|
|
|
|
|
+ if $(lsmod |grep -qw '^aoe\s')
|
|
|
|
+ then
|
|
|
|
+ echo 'The aoe module is loaded.'
|
|
|
|
+ fi
|
|
|
|
+ # FIXME: Make something smarter like detect udev or a monolithic kernel.
|
|
|
|
+
|
|
|
|
+ AOE_MOUNTS="$(grep '/dev/etherd/' /proc/mounts || true)"
|
|
|
|
+ if [ -n "$AOE_MOUNTS" ]
|
|
|
|
+ then
|
|
|
|
+ echo 'The following AoE file systems are mounted:'
|
|
|
|
+ echo "$AOE_MOUNTS" | awk '{print $2}'
|
|
|
|
+ else
|
|
|
|
+ echo 'No AoE file systems mounted.'
|
|
|
|
+ fi
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
case "$1" in
|
|
case "$1" in
|
|
- start|restart|reload|force-reload)
|
|
|
|
- echo -n "Starting $DESC: "
|
|
|
|
- do_start
|
|
|
|
- ;;
|
|
|
|
- stop)
|
|
|
|
- echo "Stopping $DESC: "
|
|
|
|
- do_stop
|
|
|
|
- ;;
|
|
|
|
- status)
|
|
|
|
- do_status
|
|
|
|
- ;;
|
|
|
|
- *)
|
|
|
|
- N=/etc/init.d/$NAME
|
|
|
|
- echo "Usage: $N {start|stop|restart|reload|force-reload|status}" >&2
|
|
|
|
- exit 1
|
|
|
|
- ;;
|
|
|
|
|
|
+ start|restart|reload|force-reload)
|
|
|
|
+ echo -n "Starting $DESC: "
|
|
|
|
+ do_start
|
|
|
|
+ ;;
|
|
|
|
+ stop)
|
|
|
|
+ echo "Stopping $DESC: "
|
|
|
|
+ do_stop
|
|
|
|
+ ;;
|
|
|
|
+ status)
|
|
|
|
+ do_status
|
|
|
|
+ ;;
|
|
|
|
+ *)
|
|
|
|
+ N=/etc/init.d/$NAME
|
|
|
|
+ echo "Usage: $N {start|stop|restart|reload|force-reload|status}" >&2
|
|
|
|
+ exit 1
|
|
|
|
+ ;;
|
|
esac
|
|
esac
|
|
|
|
|
|
exit 0
|
|
exit 0
|