1 #!/sbin/sh
   2 #
   3 # CDDL HEADER START
   4 #
   5 # The contents of this file are subject to the terms of the
   6 # Common Development and Distribution License (the "License").
   7 # You may not use this file except in compliance with the License.
   8 #
   9 # You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
  10 # or http://www.opensolaris.org/os/licensing.
  11 # See the License for the specific language governing permissions
  12 # and limitations under the License.
  13 #
  14 # When distributing Covered Code, include this CDDL HEADER in each
  15 # file and include the License file at usr/src/OPENSOLARIS.LICENSE.
  16 # If applicable, add the following below this CDDL HEADER, with the
  17 # fields enclosed by brackets "[]" replaced with your own identifying
  18 # information: Portions Copyright [yyyy] [name of copyright owner]
  19 #
  20 # CDDL HEADER END
  21 #
  22 #
  23 # Copyright 2006 Sun Microsystems, Inc.  All rights reserved.
  24 # Use is subject to license terms.
  25 #
  26 #
  27 # Start mirror resync threads.
  28 
  29 DEVFSADM=/usr/sbin/devfsadm
  30 METADEVADM=/usr/sbin/metadevadm
  31 METASYNC=/usr/sbin/metasync
  32 METADEV=/dev/md/admin
  33 METASET=/usr/sbin/metaset
  34 TMPFILE=/var/run/metaset.$$
  35 
  36 . /lib/svc/share/smf_include.sh
  37 
  38 print_verbose()
  39 {
  40         echo "Unable to resolve unnamed devices for volume management."
  41         echo "Please refer to the Solaris Volume Manager documentation,"
  42         echo "Troubleshooting section, at http://docs.sun.com or from"
  43         echo "your local copy."
  44 }
  45 
  46 resolve_auto_take_sets()
  47 {
  48         if [ -x $METASET ]; then
  49                 # Fixing up of the ctd names for devices in auto take
  50                 # sets relies heavily on the output of the metaset
  51                 # command. Any change to the output of the metaset command
  52                 # should modify this script as well in order ensure nothing
  53                 # breaks
  54                 #
  55                 # The following command saves all of the auto-take set names
  56                 # into the TMPFILE
  57                 name_str=`gettext "Set name"`
  58                 mn_str=`gettext "Multi-owner"` 
  59                 $METASET | /bin/nawk -F ' |\t|,' -v snm="$name_str" \
  60                     -v mstr="$mn_str" '$0 ~ snm { \
  61                     if (index($0, mstr) == 0) print $4 \
  62                 }' > $TMPFILE 2>&1
  63 
  64                 if [ -s "$TMPFILE" ]; then
  65                         localised_string=`gettext "Yes (auto)"`
  66                         for i in `cat $TMPFILE`; do
  67                                 $METASET -s $i | grep "$localised_string" \
  68                                     > /dev/null 2>&1
  69                                 if [ $? -eq 0 ]; then
  70                                         $METADEVADM -l -r -s $i
  71                                         error=$?    
  72                                         case $error in
  73                                         0|2)    ;;
  74                                         3)      print_verbose
  75                                                 ;;
  76                                         *)      echo "$METADEVADM \
  77                                                 -r failure $error."
  78                                                 ;;
  79                                         esac
  80                                 fi
  81                         done
  82                 fi
  83                 if [ -f "$TMPFILE" ]; then
  84                         /usr/bin/rm -f $TMPFILE
  85                 fi
  86         fi
  87 }
  88 
  89 if [ ! -s /kernel/drv/md.conf ]; then
  90         echo "/kernel/drv/md.conf is missing."
  91         exit 0
  92 fi
  93 
  94 if grep '^mddb_bootlist' /kernel/drv/md.conf >/dev/null 2>&1; then :; else
  95         echo "No 'mddb_bootlist' entry in /kernel/drv/md.conf."
  96         exit 0
  97 fi
  98 
  99 if [ ! -x $METADEVADM ]; then
 100         echo "$METADEVADM is missing or not executable."
 101         exit $SMF_EXIT_ERR_CONFIG
 102 fi
 103 
 104 if [ ! -x $METASYNC ]; then
 105         echo "$METASYNC is missing or not executable."
 106         exit $SMF_EXIT_ERR_CONFIG
 107 fi
 108 
 109 if [ ! -c $METADEV ]; then
 110         echo "$METADEV is missing or not a character device."
 111         exit 0
 112 fi
 113 
 114 $METADEVADM -l -r
 115 error=$?
 116 case $error in
 117 0|2)    ;;
 118 
 119 3)      echo "Executing devfsadm"
 120         $DEVFSADM
 121         devfsadmerror=$?
 122         if [ $devfsadmerror = 0 ]; then
 123                 echo "Executing metadevadm -r"
 124                 $METADEVADM -l -r
 125                 error=$?
 126         fi
 127         if [ $devfsadmerror != 0 -o $error = 3 ]; then
 128                 print_verbose
 129         elif [ $error != 0 -a $error != 2 ]; then
 130                 echo "$METADEVADM -r failure $error."
 131         fi      
 132         ;;
 133 
 134 *)      echo "$METADEVADM -r failure $error."
 135         exit 1
 136         ;;
 137 esac
 138 
 139 resolve_auto_take_sets
 140 
 141 $METASYNC -r
 142 error=$?
 143 case $error in
 144 0)      ;;
 145 
 146 *)      echo "Unknown $METASYNC -r failure $error."
 147         exit 1
 148         ;;
 149 esac
 150