138 lines
2.9 KiB
Bash
Executable File
138 lines
2.9 KiB
Bash
Executable File
#! /sbin/sh
|
|
#Tag 0x00000f00
|
|
|
|
# XLV control
|
|
# "$Revision: 1.26 $"
|
|
|
|
always=true
|
|
revive_opt=""
|
|
|
|
startup_xlv ()
|
|
{
|
|
#
|
|
# Get user-supplied command arguments.
|
|
#
|
|
2>/dev/null read xlv_labd_opt < /etc/config/xlv_labd.options
|
|
2>/dev/null read assemble_opt < /etc/config/xlv_assemble.options
|
|
2>/dev/null read xlv_plexd_opt < /etc/config/xlv_plexd.options
|
|
|
|
#
|
|
# Get the local nodename directly from the
|
|
# /etc/sys_id file. Cannot use hostname(1)
|
|
# because the system name may not be set yet.
|
|
#
|
|
if [ -f /etc/sys_id ] ; then
|
|
read name < /etc/sys_id
|
|
name=${name%%.*}
|
|
else
|
|
name="IRIS"
|
|
fi
|
|
|
|
if /sbin/chkconfig verbose ; then
|
|
echo "Starting XLV:"
|
|
assemble_opt="$assemble_opt -t"
|
|
xlv_labd_opt="$xlv_labd_opt -v"
|
|
else
|
|
assemble_opt="$assemble_opt -q"
|
|
fi
|
|
|
|
# Start the plex revive daemon with a max of 4
|
|
# concurrent revives. This daemon needs to be
|
|
# started before any mirrored volumes are assembled.
|
|
#
|
|
if [ -x /sbin/xlv_plexd ]
|
|
then
|
|
if [ "$always" = "true" ] ; then
|
|
killall xlv_plexd > /dev/null 2>&1
|
|
/sbin/suattr -C CAP_DEVICE_MGT+ip -c "/sbin/xlv_plexd -m 4 -w 1 $xlv_plexd_opt"
|
|
else
|
|
ps -ef | grep -v grep | grep xlv_plexd > /dev/null 2>&1
|
|
if [ $? != 0 ] ; then
|
|
/sbin/suattr -C CAP_DEVICE_MGT+ip -c "/sbin/xlv_plexd -m 4 -w 1 $xlv_plexd_opt"
|
|
fi
|
|
fi
|
|
fi
|
|
|
|
|
|
# Set the geometry of the logical volume.
|
|
#
|
|
/sbin/suattr -C CAP_DEVICE_MGT+ip -c "/sbin/xlv_assemble -h $name $revive_opt $assemble_opt"
|
|
|
|
# Make sure that any configuration files written by xlv_assemble
|
|
# are written to disk.
|
|
/sbin/sync
|
|
|
|
# Start the label daemon. Note that we start it
|
|
# after running xlv_assemble because xlv_labd
|
|
# will only hang around if there are logical volumes.
|
|
#
|
|
if [ -x /sbin/xlv_labd ]
|
|
then
|
|
# The label daemon could have been automatically
|
|
# started by xlv_assemble when it kicked off revives.
|
|
#
|
|
if [ ! -p /etc/.xlv_labd_fifo ] ; then
|
|
/sbin/suattr -C CAP_SCHED_MGT,CAP_MEMORY_MGT,CAP_DEVICE_MGT+ip -c "/sbin/xlv_labd $xlv_labd_opt"
|
|
fi
|
|
fi
|
|
}
|
|
|
|
|
|
#
|
|
# M a i n
|
|
#
|
|
|
|
case $1 in
|
|
'init')
|
|
#
|
|
# init process
|
|
#
|
|
# Remove cruft from the last time system
|
|
# was restarted.
|
|
#
|
|
rm -rf /etc/.xlv_plexd_request_fifo > /dev/null 2>&1
|
|
rm -rf /etc/.xlv_labd_fifo > /dev/null 2>&1
|
|
rm -rf /dev/xlv > /dev/null 2>&1
|
|
rm -rf /dev/rxlv > /dev/null 2>&1
|
|
|
|
#
|
|
# During the "init" phase, xlv_assemble must be
|
|
# doing a full revive. This allows root volume
|
|
# to be made consistent.
|
|
#
|
|
revive_opt="-f"
|
|
|
|
startup_xlv
|
|
;;
|
|
|
|
'start')
|
|
#
|
|
# (Re)Start operation
|
|
#
|
|
# Set $always to "false" because we don't want to
|
|
# start xlv daemons multiple times.
|
|
#
|
|
always=false
|
|
|
|
startup_xlv
|
|
;;
|
|
|
|
'stop')
|
|
#
|
|
# Shutdown operation
|
|
#
|
|
if /sbin/chkconfig verbose ; then
|
|
echo "Shutting down XLV:"
|
|
fi
|
|
# /sbin/suattr -C CAP_DEVICE_MGT+ip -c "/sbin/xlv_shutdown"
|
|
|
|
# Stop the label daemon
|
|
killall xlv_plexd > /dev/null 2>&1
|
|
killall xlv_labd > /dev/null 2>&1
|
|
;;
|
|
|
|
*)
|
|
echo "usage: /etc/init.d/xlv {init|start|stop}"
|
|
;;
|
|
esac
|