svc-metasync revision 2fb876ae0cefcbd01f8d8490242aa4501caddbc3
#!/bin/sh
#
# CDDL HEADER START
#
# The contents of this file are subject to the terms of the
# Common Development and Distribution License (the "License").
# You may not use this file except in compliance with the License.
#
# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
# or http://www.opensolaris.org/os/licensing.
# See the License for the specific language governing permissions
# and limitations under the License.
#
# When distributing Covered Code, include this CDDL HEADER in each
# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
# If applicable, add the following below this CDDL HEADER, with the
# fields enclosed by brackets "[]" replaced with your own identifying
# information: Portions Copyright [yyyy] [name of copyright owner]
#
# CDDL HEADER END
#
#
# Copyright 2006 Sun Microsystems, Inc. All rights reserved.
# Use is subject to license terms.
#
# ident "%Z%%M% %I% %E% SMI"
#
# Start mirror resync threads.
DEVFSADM=/usr/sbin/devfsadm
METADEVADM=/usr/sbin/metadevadm
METASYNC=/usr/sbin/metasync
METADEV=/dev/md/admin
METASET=/usr/sbin/metaset
TMPFILE=/var/run/metaset.$$
. /lib/svc/share/smf_include.sh
print_verbose()
{
echo "Unable to resolve unnamed devices for volume management."
echo "Please refer to the Solaris Volume Manager documentation,"
echo "Troubleshooting section, at http://docs.sun.com or from"
echo "your local copy."
}
resolve_auto_take_sets()
{
if [ -x $METASET ]; then
# Fixing up of the ctd names for devices in auto take
# sets relies heavily on the output of the metaset
# command. Any change to the output of the metaset command
# should modify this script as well in order ensure nothing
# breaks
#
# The following command saves all of the auto-take set names
# into the TMPFILE
name_str=`gettext "Set name"`
mn_str=`gettext "Multi-owner"`
$METASET | /bin/nawk -F ' |\t|,' -v snm="$name_str" \
-v mstr="$mn_str" '$0 ~ snm { \
if (index($0, mstr) == 0) print $4 \
}' > $TMPFILE 2>&1
if [ -s "$TMPFILE" ]; then
localised_string=`gettext "Yes (auto)"`
for i in `cat $TMPFILE`; do
$METASET -s $i | grep "$localised_string" \
> /dev/null 2>&1
if [ $? -eq 0 ]; then
$METADEVADM -l -r -s $i
error=$?
case $error in
0|2) ;;
3) print_verbose
;;
*) echo "$METADEVADM \
-r failure $error."
;;
esac
fi
done
/usr/bin/rm -f $TMPFILE
fi
fi
}
if [ ! -s /kernel/drv/md.conf ]; then
echo "/kernel/drv/md.conf is missing."
exit 0
fi
if grep '^mddb_bootlist' /kernel/drv/md.conf >/dev/null 2>&1; then :; else
echo "No 'mddb_bootlist' entry in /kernel/drv/md.conf."
exit 0
fi
if [ ! -x $METADEVADM ]; then
echo "$METADEVADM is missing or not executable."
exit $SMF_EXIT_ERR_CONFIG
fi
if [ ! -x $METASYNC ]; then
echo "$METASYNC is missing or not executable."
exit $SMF_EXIT_ERR_CONFIG
fi
if [ ! -c $METADEV ]; then
echo "$METADEV is missing or not a character device."
exit 0
fi
$METADEVADM -l -r
error=$?
case $error in
0|2) ;;
3) echo "Executing devfsadm"
$DEVFSADM
devfsadmerror=$?
if [ $devfsadmerror = 0 ]; then
echo "Executing metadevadm -r"
$METADEVADM -l -r
error=$?
fi
if [ $devfsadmerror != 0 -o $error = 3 ]; then
print_verbose
elif [ $error != 0 -a $error != 2 ]; then
echo "$METADEVADM -r failure $error."
fi
;;
*) echo "$METADEVADM -r failure $error."
exit 1
;;
esac
resolve_auto_take_sets
$METASYNC -r
error=$?
case $error in
0) ;;
*) echo "Unknown $METASYNC -r failure $error."
exit 1
;;
esac