1 #!/bin/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 # Start mirror resync threads.
27
28 DEVFSADM=/usr/sbin/devfsadm
29 METADEVADM=/usr/sbin/metadevadm
30 METASYNC=/usr/sbin/metasync
31 METADEV=/dev/md/admin
32 METASET=/usr/sbin/metaset
33 TMPFILE=/var/run/metaset.$$
34
35 . /lib/svc/share/smf_include.sh
36
37 print_verbose()
38 {
39 echo "Unable to resolve unnamed devices for volume management."
40 echo "Please refer to the Solaris Volume Manager documentation,"
41 echo "Troubleshooting section, at http://docs.sun.com or from"
42 echo "your local copy."
43 }
44
45 resolve_auto_take_sets()
46 {
47 if [ -x $METASET ]; then
48 # Fixing up of the ctd names for devices in auto take
49 # sets relies heavily on the output of the metaset
50 # command. Any change to the output of the metaset command
51 # should modify this script as well in order ensure nothing
52 # breaks
53 #
54 # The following command saves all of the auto-take set names
55 # into the TMPFILE
56 name_str=`gettext "Set name"`
57 mn_str=`gettext "Multi-owner"`
58 $METASET | /usr/xpg4/bin/awk -F ' |\t|,' -v snm="$name_str" \
59 -v mstr="$mn_str" '$0 ~ snm { \
60 if (index($0, mstr) == 0) print $4 \
61 }' > $TMPFILE 2>&1
62
63 if [ -s "$TMPFILE" ]; then
64 localised_string=`gettext "Yes (auto)"`
65 for i in `cat $TMPFILE`; do
66 $METASET -s $i | grep "$localised_string" \
67 > /dev/null 2>&1
68 if [ $? -eq 0 ]; then
69 $METADEVADM -l -r -s $i
70 error=$?
71 case $error in
72 0|2) ;;
73 3) print_verbose
74 ;;
75 *) echo "$METADEVADM \
76 -r failure $error."
77 ;;
78 esac
79 fi
80 done
81 fi
82 if [ -f "$TMPFILE" ]; then
83 /usr/bin/rm -f $TMPFILE
84 fi
85 fi
86 }
87
88 if [ ! -s /kernel/drv/md.conf ]; then
89 echo "/kernel/drv/md.conf is missing."
90 exit 0
91 fi
92
93 if grep '^mddb_bootlist' /kernel/drv/md.conf >/dev/null 2>&1; then :; else
94 echo "No 'mddb_bootlist' entry in /kernel/drv/md.conf."
95 exit 0
96 fi
97
98 if [ ! -x $METADEVADM ]; then
99 echo "$METADEVADM is missing or not executable."
100 exit $SMF_EXIT_ERR_CONFIG
101 fi
102
103 if [ ! -x $METASYNC ]; then
104 echo "$METASYNC is missing or not executable."
105 exit $SMF_EXIT_ERR_CONFIG
106 fi
107
108 if [ ! -c $METADEV ]; then
109 echo "$METADEV is missing or not a character device."
110 exit 0
111 fi
112
113 $METADEVADM -l -r
114 error=$?
115 case $error in
116 0|2) ;;
117
118 3) echo "Executing devfsadm"
119 $DEVFSADM
120 devfsadmerror=$?
121 if [ $devfsadmerror = 0 ]; then
122 echo "Executing metadevadm -r"
123 $METADEVADM -l -r
124 error=$?
125 fi
126 if [ $devfsadmerror != 0 -o $error = 3 ]; then
127 print_verbose
128 elif [ $error != 0 -a $error != 2 ]; then
129 echo "$METADEVADM -r failure $error."
130 fi
131 ;;
132
133 *) echo "$METADEVADM -r failure $error."
134 exit 1
135 ;;
136 esac
137
138 resolve_auto_take_sets
139
140 $METASYNC -r
141 error=$?
142 case $error in
143 0) ;;
144
145 *) echo "Unknown $METASYNC -r failure $error."
146 exit 1
147 ;;
148 esac
149