#!/bin/sh # # Copyright (c) 2006, 2011, Oracle and/or its affiliates. All rights reserved. # # Start mirror resync threads. . /lib/svc/share/smf_include.sh DEVFSADM=/usr/sbin/devfsadm METADEVADM=/usr/sbin/metadevadm METASYNC=/usr/sbin/metasync METADEV=/dev/md/admin METASET=/usr/sbin/metaset TMPFILE=$SMF_SYSVOL_FS/metaset.$$ 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 fi if [ -f "$TMPFILE" ]; then /usr/bin/rm -f $TMPFILE fi fi } if [ ! -s /etc/driver/drv/md.conf ]; then echo "/etc/driver/drv/md.conf is missing." exit 0 fi if grep '^mddb_bootlist' /etc/driver/drv/md.conf >/dev/null 2>&1; then :; else echo "No 'mddb_bootlist' entry in /etc/driver/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