#!/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