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