|
root / base / usr / src / cmd / power / svc-power
svc-power Plain Text 108 lines 2.7 KB
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
#!/sbin/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 2008 Sun Microsystems, Inc.  All rights reserved.
# Use is subject to license terms.
#
#ident	"%Z%%M%	%I%	%E% SMI"
#
# If the /etc/power.conf file does not have a "statefile" entry
# to specify the pathname of the cpr statefile, build one and
# add the line.  We choose the largest of the standard Sun partitions.

init_statefile_entry() {
	[ ! -f /etc/power.conf -o ! -w /etc/power.conf ] && return

	# Whitespace regular expression below is [<TAB><SPACE>]

	pattern="^[ 	]*statefile[	 ][	 ]*/"
	[ `/bin/grep -c "$pattern" /etc/power.conf` -ge 1 ] && return

	avail=0			# Free blocks in current filesystem
	max_avail=0		# Most available free blocks encountered so far
 	statefile=.CPR		# Default cpr statefile name

	# Remove old statefile (if any) from root
	[ -f /$statefile ] && /bin/rm -f /$statefile

	/usr/bin/df -k -F ufs |
	(
		read line	# Skip past the header line of the df output

		while read device kbytes used avail capacity filesys; do
			case $filesys in
			/|/usr|/var|/export/home)
				if [ $avail -gt $max_avail ]; then
					max_avail=$avail
					winner=$filesys
				fi
				;;
			esac
		done

		if [ $max_avail -gt 0 ]; then
			echo "statefile		${winner}/${statefile}" \
			    >>/etc/power.conf
		fi

		return
	)
	if [ $max_avail -eq 0 ]; then
		if [ X`df -n / | awk '{print $3}'` != "Xzfs" ] ; then
			return
		fi
		rootpool=`zfs mount | grep ' \/$' | awk '{print $1 }' |\
		    sed 's/\/.*$//'`
		if [ X$rootpool = "X" ] || \
		    [ ! -L /dev/zvol/dsk/$rootpool/dump ]; then
			return
		fi
		echo "statefile /dev/zvol/dsk/$rootpool/dump" \
			>> /etc/power.conf
	fi
}

case "$1" in
'start')
	/sbin/uadmin 3 2 2>/dev/null
	if [ $? -eq 0 ]; then
		init_statefile_entry
	fi

	if [ -x /usr/sbin/pmconfig -a -r /etc/power.conf ]; then
		/usr/sbin/pmconfig >/dev/console 2>&1
	fi
	;;

'stop')
	if [ -x /usr/sbin/pmconfig ]; then 
		/usr/sbin/pmconfig -r >/dev/null 2>/dev/null
	fi
	;;

*)
	echo "Usage: $0 { start | stop }"
	exit 1
	;;
esac
exit 0