1a0261a43SJames C. McPherson#!/sbin/sh -p 27c478bd9Sstevel@tonic-gate# 37c478bd9Sstevel@tonic-gate# CDDL HEADER START 47c478bd9Sstevel@tonic-gate# 57c478bd9Sstevel@tonic-gate# The contents of this file are subject to the terms of the 66deb031bSsjelinek# Common Development and Distribution License (the "License"). 76deb031bSsjelinek# You may not use this file except in compliance with the License. 87c478bd9Sstevel@tonic-gate# 97c478bd9Sstevel@tonic-gate# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 107c478bd9Sstevel@tonic-gate# or http://www.opensolaris.org/os/licensing. 117c478bd9Sstevel@tonic-gate# See the License for the specific language governing permissions 127c478bd9Sstevel@tonic-gate# and limitations under the License. 137c478bd9Sstevel@tonic-gate# 147c478bd9Sstevel@tonic-gate# When distributing Covered Code, include this CDDL HEADER in each 157c478bd9Sstevel@tonic-gate# file and include the License file at usr/src/OPENSOLARIS.LICENSE. 167c478bd9Sstevel@tonic-gate# If applicable, add the following below this CDDL HEADER, with the 177c478bd9Sstevel@tonic-gate# fields enclosed by brackets "[]" replaced with your own identifying 187c478bd9Sstevel@tonic-gate# information: Portions Copyright [yyyy] [name of copyright owner] 197c478bd9Sstevel@tonic-gate# 207c478bd9Sstevel@tonic-gate# CDDL HEADER END 217c478bd9Sstevel@tonic-gate# 227c478bd9Sstevel@tonic-gate# 237fc66be0Sjianfei wang - Sun Microsystems - Beijing China# Copyright (c) 2004, 2010, Oracle and/or its affiliates. All rights reserved. 247c478bd9Sstevel@tonic-gate# 25815dd917Sjmcp# 267c478bd9Sstevel@tonic-gatePATH=/usr/bin:/usr/sbin:$PATH; export PATH 277c478bd9Sstevel@tonic-gateSTMSBOOTUTIL=/lib/mpxio/stmsboot_util 287c478bd9Sstevel@tonic-gateSTMSMETHODSCRIPT=/lib/svc/method/mpxio-upgrade 2960fffc19Sjw149990KDRVCONF= 3060fffc19Sjw149990DRVCONF= 3160fffc19Sjw149990TMPDRVCONF= 3260fffc19Sjw149990TMPDRVCONF_MPXIO_ENTRY= 33cfc4930cSYong-Feng DuTMPDRVCONF_SATA_ENTRY= 3460fffc19Sjw149990DRVLIST= 3560fffc19Sjw149990GUID= 367c478bd9Sstevel@tonic-gateVFSTAB=/etc/vfstab 377c478bd9Sstevel@tonic-gateSAVEDIR=/etc/mpxio 38789c9c8fSJames C. McPhersonBOOTDEVICES=$SAVEDIR/boot-devices 397c478bd9Sstevel@tonic-gateRECOVERFILE=$SAVEDIR/recover_instructions 407c478bd9Sstevel@tonic-gateSVCCFG_RECOVERY=$SAVEDIR/svccfg_recover 414c06356bSdh142964SUPPORTED_DRIVERS="fp|mpt|mpt_sas|pmcs" 4260fffc19Sjw149990USAGE=`gettext "Usage: stmsboot [-D $SUPPORTED_DRIVERS] -e | -d | -u | -L | -l controller_number"` 43aca6e9ccSramatTEXTDOMAIN=SUNW_OST_OSCMD 44aca6e9ccSramatexport TEXTDOMAIN 45a0261a43SJames C. McPhersonSTMSINSTANCE=svc:system/device/mpxio-upgrade:default 46*c9d8e919Sjianfei wang - Sun Microsystems - Beijing ChinaFASTBOOTINSTANCE=svc:system/boot-config:default 4760fffc19Sjw149990STMSBOOT=/usr/sbin/stmsboot 4860fffc19Sjw149990BOOTADM=/sbin/bootadm 4960fffc19Sjw149990MOUNT=/usr/sbin/mount 50a0261a43SJames C. McPhersonEEPROM=/usr/sbin/eeprom 5160fffc19Sjw149990EGREP=/usr/bin/egrep 5260fffc19Sjw149990GREP=/usr/bin/grep 5360fffc19Sjw149990AWK=/usr/bin/awk 54a0261a43SJames C. McPhersonCP=/usr/bin/cp 55789c9c8fSJames C. McPhersonDF=/usr/bin/df 56a0261a43SJames C. McPhersonLS=/usr/bin/ls 57a0261a43SJames C. McPhersonMV=/usr/bin/mv 58a0261a43SJames C. McPhersonRM=/usr/bin/rm 5960fffc19Sjw149990SORT=/usr/bin/sort 6060fffc19Sjw149990UNIQ=/usr/bin/uniq 6160fffc19Sjw149990EXPR=/usr/bin/expr 62a0261a43SJames C. McPhersonMKDIR=/usr/bin/mkdir 63a0261a43SJames C. McPhersonREBOOT=/usr/sbin/reboot 64815dd917SjmcpSED=/usr/bin/sed 65815dd917SjmcpSVCPROP=/usr/bin/svcprop 66815dd917SjmcpSVCCFG=/usr/sbin/svccfg 67815dd917SjmcpSVCS=/usr/bin/svcs 68815dd917SjmcpSVCADM=/usr/sbin/svcadm 697c478bd9Sstevel@tonic-gate 70a0261a43SJames C. McPhersonNOW=`/usr/bin/date +%G%m%d_%H%M` 715a4c37c9Sqh201292MACH=`/usr/bin/uname -p` 72a0261a43SJames C. McPhersonBOOTENV_FILE=bootenv.rc 7360fffc19Sjw149990reboot_needed=0 74a0261a43SJames C. McPhersonnew_bootpath="" 75a0261a43SJames C. McPhersonCLIENT_TYPE_PHCI="" 76a0261a43SJames C. McPhersonCLIENT_TYPE_VHCI="/scsi_vhci" 7760fffc19Sjw149990 787c478bd9Sstevel@tonic-gate# 7960fffc19Sjw149990# Copy all entries (including comments) from source driver.conf 8060fffc19Sjw149990# to destination driver.conf except those entries which contain 8160fffc19Sjw149990# the mpxio-disable property. 827c478bd9Sstevel@tonic-gate# Take into consideration entries that spawn more than one line. 837c478bd9Sstevel@tonic-gate# 847c478bd9Sstevel@tonic-gate# $1 source driver.conf file 857c478bd9Sstevel@tonic-gate# $2 destination driver.conf file 867c478bd9Sstevel@tonic-gate# 877c478bd9Sstevel@tonic-gate# Returns 0 on success, non zero on failure. 887c478bd9Sstevel@tonic-gate# 897c478bd9Sstevel@tonic-gatedelete_mpxio_disable_entries() 907c478bd9Sstevel@tonic-gate{ 91a0261a43SJames C. McPherson # be careful here, we've got embedded \t characters 92a0261a43SJames C. McPherson # in sed's pattern space. 93a0261a43SJames C. McPherson $SED ' 947c478bd9Sstevel@tonic-gate /^[ ]*#/{ p 957c478bd9Sstevel@tonic-gate d 967c478bd9Sstevel@tonic-gate } 977c478bd9Sstevel@tonic-gate s/[ ]*$// 987c478bd9Sstevel@tonic-gate /^$/{ p 997c478bd9Sstevel@tonic-gate d 1007c478bd9Sstevel@tonic-gate } 1015a4c37c9Sqh201292 /mpxio-disable[ ]*=.*;$/{ w '$3' 1025a4c37c9Sqh201292 d 1035a4c37c9Sqh201292 } 104cfc4930cSYong-Feng Du /disable-sata-mpxio[ ]*=.*;$/{ w '$4' 105cfc4930cSYong-Feng Du d 106cfc4930cSYong-Feng Du } 1077c478bd9Sstevel@tonic-gate /;$/{ p 1087c478bd9Sstevel@tonic-gate d 1097c478bd9Sstevel@tonic-gate } 1107c478bd9Sstevel@tonic-gate :rdnext 1117c478bd9Sstevel@tonic-gate N 1127c478bd9Sstevel@tonic-gate s/[ ]*$// 1137c478bd9Sstevel@tonic-gate /[^;]$/b rdnext 1145a4c37c9Sqh201292 /mpxio-disable[ ]*=/{ s/\n/ /g 1155a4c37c9Sqh201292 w '$3' 1165a4c37c9Sqh201292 d 1175a4c37c9Sqh201292 } 1185a4c37c9Sqh201292 ' $1 > $2 1197c478bd9Sstevel@tonic-gate 1207c478bd9Sstevel@tonic-gate return $? 1217c478bd9Sstevel@tonic-gate} 1227c478bd9Sstevel@tonic-gate 1237c478bd9Sstevel@tonic-gate# 1247c478bd9Sstevel@tonic-gate# backup the last saved copy of the specified files. 1257c478bd9Sstevel@tonic-gate# $* files to backup 1267c478bd9Sstevel@tonic-gate# 1277c478bd9Sstevel@tonic-gatebackup_lastsaved() 1287c478bd9Sstevel@tonic-gate{ 1297c478bd9Sstevel@tonic-gate for file in $* 1307c478bd9Sstevel@tonic-gate do 131a0261a43SJames C. McPherson newfile=`basename $file` 132a0261a43SJames C. McPherson $CP $file $SAVEDIR/$newfile.$cmd.$NOW 1337c478bd9Sstevel@tonic-gate done 1347c478bd9Sstevel@tonic-gate} 1357c478bd9Sstevel@tonic-gate 1367c478bd9Sstevel@tonic-gate# 1377c478bd9Sstevel@tonic-gate# build recover instructions 1387c478bd9Sstevel@tonic-gate# 1397c478bd9Sstevel@tonic-gate# $1 1 to include boot script in the instructions 1407c478bd9Sstevel@tonic-gate# 0 otherwise 1417c478bd9Sstevel@tonic-gate# 1427c478bd9Sstevel@tonic-gatebuild_recover() 1437c478bd9Sstevel@tonic-gate{ 1447c478bd9Sstevel@tonic-gate gettext "Instructions to recover your previous STMS configuration (if in case the system does not boot):\n\n" > $RECOVERFILE 1457c478bd9Sstevel@tonic-gate echo "\tboot net \c" >> $RECOVERFILE 1467c478bd9Sstevel@tonic-gate gettext "(or from a cd/dvd/another disk)\n" >> $RECOVERFILE 1477c478bd9Sstevel@tonic-gate echo "\tfsck <your-root-device>" >> $RECOVERFILE 1487c478bd9Sstevel@tonic-gate echo "\tmount <your-root-device> /mnt" >> $RECOVERFILE 1497c478bd9Sstevel@tonic-gate 150fa30e7bdSjianfei wang - Sun Microsystems - Beijing China if [ "$cmd" = "update" ]; then 1517c478bd9Sstevel@tonic-gate gettext "\tUndo the modifications you made to STMS configuration.\n\tFor example undo any changes you made to " >> $RECOVERFILE 15260fffc19Sjw149990 echo "/mnt$KDRVCONF." >> $RECOVERFILE 1537c478bd9Sstevel@tonic-gate else 154a0261a43SJames C. McPherson echo "\tcp /mnt${SAVEDIR}/$DRVCONF.$cmd.$NOW /mnt$KDRVCONF" >> $RECOVERFILE 1557c478bd9Sstevel@tonic-gate fi 1567c478bd9Sstevel@tonic-gate 157815dd917Sjmcp if [ $1 -eq 1 ]; then 158a0261a43SJames C. McPherson echo "\tcp /mnt${SAVEDIR}/vfstab.$cmd.$NOW /mnt$VFSTAB" >> $RECOVERFILE 1597c478bd9Sstevel@tonic-gate 1607c478bd9Sstevel@tonic-gate echo "repository /mnt/etc/svc/repository.db" > $SVCCFG_RECOVERY 1617c478bd9Sstevel@tonic-gate echo "select $STMSINSTANCE" >> $SVCCFG_RECOVERY 1627c478bd9Sstevel@tonic-gate echo "setprop general/enabled=false" >> $SVCCFG_RECOVERY 1637c478bd9Sstevel@tonic-gate echo "exit" >> $SVCCFG_RECOVERY 1647c478bd9Sstevel@tonic-gate 165815dd917Sjmcp echo "\t$SVCCFG -f /mnt$SVCCFG_RECOVERY" >> $RECOVERFILE 1665a4c37c9Sqh201292 167fa30e7bdSjianfei wang - Sun Microsystems - Beijing China if [ -n "$new_bootpath" -a "$MACH" = "i386" ]; then 168a0261a43SJames C. McPherson echo "\tcp /mnt${SAVEDIR}/bootenv.rc.$cmd.$NOW /mnt/boot/solaris/$BOOTENV_FILE" >> $RECOVERFILE 1695a4c37c9Sqh201292 fi 1707c478bd9Sstevel@tonic-gate fi 1717c478bd9Sstevel@tonic-gate 17260fffc19Sjw149990 rootdisk=`$MOUNT | $GREP "/ on " | cut -f 3 -d " "` 1737c478bd9Sstevel@tonic-gate echo "\tumount /mnt\n\treboot\n\n${rootdisk} \c" >> $RECOVERFILE 1747c478bd9Sstevel@tonic-gate gettext "was your root device,\nbut it could be named differently after you boot net.\n" >> $RECOVERFILE 1757c478bd9Sstevel@tonic-gate} 1767c478bd9Sstevel@tonic-gate 177a0261a43SJames C. McPherson 1787c478bd9Sstevel@tonic-gate# 1797c478bd9Sstevel@tonic-gate# Arrange for /etc/vfstab and dump configuration to be updated 1807c478bd9Sstevel@tonic-gate# during the next reboot. If the cmd is "enable" or "disable", copy 18160fffc19Sjw149990# $TMPDRVCONF to $KDRVCONF. 1827c478bd9Sstevel@tonic-gate# 1837c478bd9Sstevel@tonic-gate# Returns 0 on success, 1 on failure. 1847c478bd9Sstevel@tonic-gate# 1857c478bd9Sstevel@tonic-gateupdate_sysfiles() 1867c478bd9Sstevel@tonic-gate{ 18760fffc19Sjw149990 188a0261a43SJames C. McPherson gettext "WARNING: This operation will require a reboot.\n" 189a0261a43SJames C. McPherson gettext "Do you want to continue ? [y/n] (default: y) " 1907c478bd9Sstevel@tonic-gate read response 1917c478bd9Sstevel@tonic-gate 192fa30e7bdSjianfei wang - Sun Microsystems - Beijing China if [ -n "$response" -a "$response" != "y" -a \ 193fa30e7bdSjianfei wang - Sun Microsystems - Beijing China "$response" != "Y" ]; then 19460fffc19Sjw149990 for d in $DRVLIST; do 19560fffc19Sjw149990 TMPDRVCONF=/var/run/tmp.$d.conf.$$ 196a0261a43SJames C. McPherson $RM -f $TMPDRVCONF > /dev/null 2>&1 19760fffc19Sjw149990 done; 19860fffc19Sjw149990 return 0; 1997c478bd9Sstevel@tonic-gate fi 2007c478bd9Sstevel@tonic-gate 201815dd917Sjmcp # set need_bootscript to the number of drivers that 202815dd917Sjmcp # we support. 203815dd917Sjmcp need_bootscript=`echo $SUPPORTED_DRIVERS|$AWK -F"|" '{print NF}'` 20460fffc19Sjw149990 205fa30e7bdSjianfei wang - Sun Microsystems - Beijing China if [ "$cmd" = "enable" -o "$cmd" = "disable" ]; then 20660fffc19Sjw149990 20760fffc19Sjw149990 for d in $DRVLIST; do 20860fffc19Sjw149990 DRVCONF=$d.conf 20960fffc19Sjw149990 KDRVCONF=/kernel/drv/$d.conf 21060fffc19Sjw149990 TMPDRVCONF=/var/run/tmp.$d.conf.$$ 21160fffc19Sjw149990 212a0261a43SJames C. McPherson $CP $KDRVCONF $SAVEDIR/`basename $KDRVCONF`.$cmd.$NOW 213815dd917Sjmcp if [ -f $TMPDRVCONF ]; then 214a0261a43SJames C. McPherson $CP $TMPDRVCONF $KDRVCONF 215a0261a43SJames C. McPherson $RM -f $TMPDRVCONF 216815dd917Sjmcp else 217815dd917Sjmcp # if $TMPDRVCONF doesn't exist, then we 218815dd917Sjmcp # haven't made any changes to it 219815dd917Sjmcp continue; 220815dd917Sjmcp fi 2217c478bd9Sstevel@tonic-gate 2227c478bd9Sstevel@tonic-gate # 2237c478bd9Sstevel@tonic-gate # there is no need to update the system files in the following 2247c478bd9Sstevel@tonic-gate # cases: 2257c478bd9Sstevel@tonic-gate # - we are enabling mpxio and the system has no configured 2267c478bd9Sstevel@tonic-gate # disks accessible by phci paths. 2277c478bd9Sstevel@tonic-gate # - we are disabling mpxio and the system has no configured 2287c478bd9Sstevel@tonic-gate # disks accessible by vhci paths. 2297c478bd9Sstevel@tonic-gate # 23060fffc19Sjw149990 231815dd917Sjmcp # Function to setup the CLIENT_TYPE_PHCI string based on 232815dd917Sjmcp # the list of drivers that we're operating on. The variable 233815dd917Sjmcp # depends upon the pathname of the parent node in the 234815dd917Sjmcp # device tree, which can be different on x86/x64 and sparc. 235815dd917Sjmcp 236a0261a43SJames C. McPherson CLIENT_TYPE_PHCI=`$STMSBOOTUTIL -D $d -N`; 237815dd917Sjmcp 238fa30e7bdSjianfei wang - Sun Microsystems - Beijing China if [ -z "$CLIENT_TYPE_PHCI" ]; then 23960fffc19Sjw149990 continue; 24060fffc19Sjw149990 fi 24160fffc19Sjw149990 242fa30e7bdSjianfei wang - Sun Microsystems - Beijing China if [ "$cmd" = "enable" ]; then 243a0261a43SJames C. McPherson $LS -l /dev/dsk/*s2 2> /dev/null | \ 24460fffc19Sjw149990 $EGREP -s "$CLIENT_TYPE_PHCI" 2457c478bd9Sstevel@tonic-gate else 246a0261a43SJames C. McPherson $LS -l /dev/dsk/*s2 2> /dev/null | \ 24760fffc19Sjw149990 $EGREP -s "$CLIENT_TYPE_VHCI" 2487c478bd9Sstevel@tonic-gate fi 2497c478bd9Sstevel@tonic-gate 2507c478bd9Sstevel@tonic-gate if [ $? -ne 0 ]; then 251815dd917Sjmcp need_bootscript=`$EXPR $need_bootscript - 1` 25260fffc19Sjw149990 fi 25360fffc19Sjw149990 done 25460fffc19Sjw149990 fi 25560fffc19Sjw149990 256815dd917Sjmcp if [ $need_bootscript -gt 0 ]; then 257815dd917Sjmcp need_bootscript=1 258fa30e7bdSjianfei wang - Sun Microsystems - Beijing China if [ -n "$new_bootpath" -a "$MACH" = "i386" ]; then 2595a4c37c9Sqh201292 #only update bootpath for x86. 260a0261a43SJames C. McPherson $CP /boot/solaris/$BOOTENV_FILE $SAVEDIR/$BOOTENV_FILE.$cmd.$NOW 261a0261a43SJames C. McPherson $EEPROM bootpath="$new_bootpath" 2625a4c37c9Sqh201292 fi 263*c9d8e919Sjianfei wang - Sun Microsystems - Beijing China 264*c9d8e919Sjianfei wang - Sun Microsystems - Beijing China if [ "$MACH" = "i386" ]; then 265*c9d8e919Sjianfei wang - Sun Microsystems - Beijing China # Disable Fast Reboot temporarily for the next reboot only. 266*c9d8e919Sjianfei wang - Sun Microsystems - Beijing China HASZFSROOT=`$DF -g / |$GREP zfs` 267*c9d8e919Sjianfei wang - Sun Microsystems - Beijing China if [ -n "$HASZFSROOT" ]; then 268*c9d8e919Sjianfei wang - Sun Microsystems - Beijing China $SVCCFG -s $FASTBOOTINSTANCE addpg config_ovr application P > /dev/null 2>&1 269*c9d8e919Sjianfei wang - Sun Microsystems - Beijing China $SVCCFG -s $FASTBOOTINSTANCE \ 270*c9d8e919Sjianfei wang - Sun Microsystems - Beijing China setprop config_ovr/fastreboot_default=boolean:\"false\" 271*c9d8e919Sjianfei wang - Sun Microsystems - Beijing China $SVCCFG -s $FASTBOOTINSTANCE \ 272*c9d8e919Sjianfei wang - Sun Microsystems - Beijing China setprop config_ovr/fastreboot_onpanic=boolean:\"false\" 273*c9d8e919Sjianfei wang - Sun Microsystems - Beijing China $SVCADM refresh $FASTBOOTINSTANCE 274*c9d8e919Sjianfei wang - Sun Microsystems - Beijing China fi 275*c9d8e919Sjianfei wang - Sun Microsystems - Beijing China fi 276*c9d8e919Sjianfei wang - Sun Microsystems - Beijing China 277a0261a43SJames C. McPherson # Enable the mpxio-upgrade service for the reboot 278815dd917Sjmcp $SVCADM disable -t $STMSINSTANCE 279a0261a43SJames C. McPherson $SVCCFG -s $STMSINSTANCE "setprop general/enabled=true" 280815dd917Sjmcp else 281815dd917Sjmcp need_bootscript=0 2827c478bd9Sstevel@tonic-gate fi 2837c478bd9Sstevel@tonic-gate 2847c478bd9Sstevel@tonic-gate build_recover $need_bootscript 2857c478bd9Sstevel@tonic-gate 286fa30e7bdSjianfei wang - Sun Microsystems - Beijing China if [ "$MACH" = "i386" ]; then 28760fffc19Sjw149990 $BOOTADM update-archive 28860fffc19Sjw149990 fi 28960fffc19Sjw149990 2907c478bd9Sstevel@tonic-gate gettext "The changes will come into effect after rebooting the system.\nReboot the system now ? [y/n] (default: y) " 2917c478bd9Sstevel@tonic-gate read response 2927c478bd9Sstevel@tonic-gate 293fa30e7bdSjianfei wang - Sun Microsystems - Beijing China if [ -z "$response" -o "$response" = "y" -o \ 294fa30e7bdSjianfei wang - Sun Microsystems - Beijing China "$response" = "Y" ]; then 295a0261a43SJames C. McPherson $REBOOT 2967c478bd9Sstevel@tonic-gate fi 2977c478bd9Sstevel@tonic-gate 2987c478bd9Sstevel@tonic-gate return 0 2997c478bd9Sstevel@tonic-gate} 3007c478bd9Sstevel@tonic-gate 301a0261a43SJames C. McPherson 3027c478bd9Sstevel@tonic-gate# 3037c478bd9Sstevel@tonic-gate# Enable or disable mpxio as specified by the cmd. 3047c478bd9Sstevel@tonic-gate# Returns 0 on success, 1 on failure. 3057c478bd9Sstevel@tonic-gate# 30660fffc19Sjw149990# Args: $cmd = {enable | disable} 3074c06356bSdh142964# $d = {fp | mpt | mpt_sas | pmcs} 30860fffc19Sjw149990# 30960fffc19Sjw149990# the global variable $DRVLIST is used 31060fffc19Sjw149990# 3117c478bd9Sstevel@tonic-gateconfigure_mpxio() 3127c478bd9Sstevel@tonic-gate{ 313a0261a43SJames C. McPherson # be careful here, we've got embedded \t characters 314a0261a43SJames C. McPherson # in sed's pattern space. 3155a4c37c9Sqh201292 mpxiodisableno='mpxio-disable[ ]*=[ ]*"no"[ ]*;' 3165a4c37c9Sqh201292 mpxiodisableyes='mpxio-disable[ ]*=[ ]*"yes"[ ]*;' 317cfc4930cSYong-Feng Du satadisableno='disable-sata-mpxio[ ]*=[ ]*"no"[ ]*;' 318cfc4930cSYong-Feng Du satadisableyes='disable-sata-mpxio[ ]*=[ ]*"yes"[ ]*;' 3195a4c37c9Sqh201292 320fa30e7bdSjianfei wang - Sun Microsystems - Beijing China if [ "$cmd" = "enable" ]; then 3215a4c37c9Sqh201292 mpxiodisable_cur_entry=$mpxiodisableyes 322cfc4930cSYong-Feng Du satadisable_cur_entry=$satadisableyes 3237c478bd9Sstevel@tonic-gate propval=no 32460fffc19Sjw149990 msg=`gettext "STMS already enabled"` 3257c478bd9Sstevel@tonic-gate else 3265a4c37c9Sqh201292 mpxiodisable_cur_entry=$mpxiodisableno 327cfc4930cSYong-Feng Du satadisable_cur_entry=$satadisableno 3287c478bd9Sstevel@tonic-gate propval=yes 32960fffc19Sjw149990 msg=`gettext "STMS already disabled"` 3307c478bd9Sstevel@tonic-gate fi 3317c478bd9Sstevel@tonic-gate 33260fffc19Sjw149990 DRVCONF=$d.conf 33360fffc19Sjw149990 KDRVCONF=/kernel/drv/$d.conf 33460fffc19Sjw149990 TMPDRVCONF=/var/run/tmp.$d.conf.$$ 33560fffc19Sjw149990 TMPDRVCONF_MPXIO_ENTRY=/var/run/tmp.$d.conf.mpxioentry.$$; 336cfc4930cSYong-Feng Du TMPDRVCONF_SATA_ENTRY=/var/run/tmp.$d.conf.sataentry.$$; 33760fffc19Sjw149990 338cfc4930cSYong-Feng Du if delete_mpxio_disable_entries $KDRVCONF $TMPDRVCONF $TMPDRVCONF_MPXIO_ENTRY $TMPDRVCONF_SATA_ENTRY; then 33960fffc19Sjw149990 34060fffc19Sjw149990 if [ -s $TMPDRVCONF_MPXIO_ENTRY ]; then 34160fffc19Sjw149990 # $DRVCONF does have mpxiodisable entries 34260fffc19Sjw149990 $EGREP -s "$mpxiodisable_cur_entry" $TMPDRVCONF_MPXIO_ENTRY 343cfc4930cSYong-Feng Du if [ $? -eq 0 ]; then 344cfc4930cSYong-Feng Du reboot_needed=`$EXPR $reboot_needed + 1` 345cfc4930cSYong-Feng Du else 3465a4c37c9Sqh201292 # if all mpxiodisable entries are no/yes for 3475a4c37c9Sqh201292 # enable/disable mpxio, notify the user 348cfc4930cSYong-Feng Du $EGREP -s "$satadisable_cur_entry" $TMPDRVCONF_SATA_ENTRY 349fa30e7bdSjianfei wang - Sun Microsystems - Beijing China if [ $? -eq 0 -a "$d" = "mpt" ]; then 35060fffc19Sjw149990 reboot_needed=`$EXPR $reboot_needed + 1` 351cfc4930cSYong-Feng Du else 352cfc4930cSYong-Feng Du $RM -f $TMPDRVCONF $TMPDRVCONF_MPXIO_ENTRY $TMPDRVCONF_SATA_ENTRY > /dev/null 2>&1 353ccb7005eSYong-Feng Du return 0; 354cfc4930cSYong-Feng Du fi 3557c478bd9Sstevel@tonic-gate fi 35660fffc19Sjw149990 35760fffc19Sjw149990 # If mpxiodisable entries do not exist, always continue update 3585a4c37c9Sqh201292 fi 3597c478bd9Sstevel@tonic-gate else 360cfc4930cSYong-Feng Du $RM -f $TMPDRVCONF $TMPDRVCONF_MPXIO_ENTRY $TMPDRVCONF_SATA_ENTRY > /dev/null 2>&1 3617c478bd9Sstevel@tonic-gate gettext "failed to update " 1>&2 36260fffc19Sjw149990 echo "$KDRVCONF." 1>&2 3637c478bd9Sstevel@tonic-gate gettext "No changes were made to your STMS configuration.\n" 1>&2 3647c478bd9Sstevel@tonic-gate return 1 3657c478bd9Sstevel@tonic-gate fi 3665a4c37c9Sqh201292 36735c62094Sjianfei wang - Sun Microsystems - Beijing China rm $TMPDRVCONF_MPXIO_ENTRY $TMPDRVCONF_SATA_ENTRY > /dev/null 2>&1 36860fffc19Sjw149990 echo "mpxio-disable=\"${propval}\";" >> $TMPDRVCONF 369fa30e7bdSjianfei wang - Sun Microsystems - Beijing China if [ "$d" = "mpt" ]; then 370cfc4930cSYong-Feng Du echo "disable-sata-mpxio=\"${propval}\";" >> $TMPDRVCONF 37135c62094Sjianfei wang - Sun Microsystems - Beijing China fi 3725a4c37c9Sqh201292 3737c478bd9Sstevel@tonic-gate} 3747c478bd9Sstevel@tonic-gate 3757c478bd9Sstevel@tonic-gatesetcmd() 3767c478bd9Sstevel@tonic-gate{ 377fa30e7bdSjianfei wang - Sun Microsystems - Beijing China if [ "$cmd" = "none" ]; then 3787c478bd9Sstevel@tonic-gate cmd=$1 3797c478bd9Sstevel@tonic-gate else 3807c478bd9Sstevel@tonic-gate echo "$USAGE" 1>&2 3817c478bd9Sstevel@tonic-gate exit 2 3827c478bd9Sstevel@tonic-gate fi 3837c478bd9Sstevel@tonic-gate} 3847c478bd9Sstevel@tonic-gate 38560fffc19Sjw149990# 3865a4c37c9Sqh201292# Need to update bootpath on x86 if boot system from FC disk 3875a4c37c9Sqh201292# Only update bootpath here when mpxio is enabled 388a0261a43SJames C. McPherson# If mpxio is currently disabled, then we'll update bootpath in the 389a0261a43SJames C. McPherson# mpxio-upgrade service method on reboot. 39060fffc19Sjw149990# 39160fffc19Sjw149990 3925a4c37c9Sqh201292get_newbootpath_for_stmsdev() { 393fa30e7bdSjianfei wang - Sun Microsystems - Beijing China if [ "$cmd" = "enable" ]; then 3945a4c37c9Sqh201292 return 0 3955a4c37c9Sqh201292 fi 3965a4c37c9Sqh201292 397a0261a43SJames C. McPherson cur_bootpath=`$STMSBOOTUTIL -b` 398a0261a43SJames C. McPherson if [ $? != 0 ]; then 3995a4c37c9Sqh201292 return 1 4005a4c37c9Sqh201292 fi 4015a4c37c9Sqh201292 402a0261a43SJames C. McPherson # Since on x64 platforms the eeprom command doesn't update the 403a0261a43SJames C. McPherson # kernel, the file /boot/solaris/bootenv.rc and the kernel's 404a0261a43SJames C. McPherson # bootpath variable have a good chance of differing. We do some 405a0261a43SJames C. McPherson # extra handwaving to get the correct bootpath variable setting. 406a0261a43SJames C. McPherson 407a0261a43SJames C. McPherson ONDISKVER=`$AWK '/bootpath/ {print $3}' /boot/solaris/bootenv.rc|\ 408a0261a43SJames C. McPherson $SED -e"s,',,g"` 409fa30e7bdSjianfei wang - Sun Microsystems - Beijing China if [ "$ONDISKVER" != "$cur_bootpath" ]; then 410a0261a43SJames C. McPherson cur_bootpath="$ONDISKVER" 411a0261a43SJames C. McPherson fi 412a0261a43SJames C. McPherson 413a0261a43SJames C. McPherson NEWBOOTPATH="" 414a0261a43SJames C. McPherson for path in $cur_bootpath; do 415a0261a43SJames C. McPherson mapped=`$STMSBOOTUTIL -p $path` 416a0261a43SJames C. McPherson if [ "$mapped" != "NOT_MAPPED" ]; then 417a0261a43SJames C. McPherson if [ "$mapped" != "$path" ]; then 418a0261a43SJames C. McPherson NEWBOOTPATH=`echo "$path " | \ 419a0261a43SJames C. McPherson $SED -e"s|$path|$mapped|"`" $NEWBOOTPATH" 420a0261a43SJames C. McPherson else 421a0261a43SJames C. McPherson NEWBOOTPATH="$NEWBOOTPATH $path" 422a0261a43SJames C. McPherson fi 423a0261a43SJames C. McPherson fi 424a0261a43SJames C. McPherson done 425a0261a43SJames C. McPherson # now strip off leading and trailing space chars 426a0261a43SJames C. McPherson new_bootpath=`echo $NEWBOOTPATH` 4275a4c37c9Sqh201292 return 0 42860fffc19Sjw149990} 42960fffc19Sjw149990 43060fffc19Sjw149990# 43160fffc19Sjw149990# Emit a warning message to the user that by default we 43260fffc19Sjw149990# operate on all multipath-capable controllers that are 43360fffc19Sjw149990# attached to the system, and that if they want to operate 4344c06356bSdh142964# on only a specific controller type (fp|mpt|mpt_sas|pmcs|....) then 43560fffc19Sjw149990# they need to re-invoke stmsboot with "-D $driver" in 43660fffc19Sjw149990# their argument list 43760fffc19Sjw149990# 43860fffc19Sjw149990 43960fffc19Sjw149990emit_driver_warning_msg() { 44060fffc19Sjw149990 44160fffc19Sjw149990 # for each driver that we support, grab the list 44260fffc19Sjw149990 # of controllers attached to the system. 44360fffc19Sjw149990 444815dd917Sjmcp echo "" 44553ed03b5Sjmcp gettext "WARNING: stmsboot operates on each supported multipath-capable controller\n" 44653ed03b5Sjmcp gettext " detected in a host. In your system, these controllers are\n\n" 44760fffc19Sjw149990 448815dd917Sjmcp for WARNDRV in `echo $SUPPORTED_DRIVERS| $SED -e"s,|, ,g"`; do 449a0261a43SJames C. McPherson $STMSBOOTUTIL -D $WARNDRV -n 45060fffc19Sjw149990 done; 45160fffc19Sjw149990 45260fffc19Sjw149990 echo "" 45353ed03b5Sjmcp gettext "If you do NOT wish to operate on these controllers, please quit stmsboot\n" 4544c06356bSdh142964 gettext "and re-invoke with -D { fp | mpt | mpt_sas | pmcs} to specify which controllers you wish\n" 45553ed03b5Sjmcp gettext "to modify your multipathing configuration for.\n" 45660fffc19Sjw149990 457815dd917Sjmcp echo "" 45853ed03b5Sjmcp gettext "Do you wish to continue? [y/n] (default: y) " 45960fffc19Sjw149990 read response 46060fffc19Sjw149990 461fa30e7bdSjianfei wang - Sun Microsystems - Beijing China if [ -n "$response" -a "$response" != "Y" -a \ 462fa30e7bdSjianfei wang - Sun Microsystems - Beijing China "$response" != "y" ]; then 46360fffc19Sjw149990 exit 46460fffc19Sjw149990 fi 46560fffc19Sjw149990} 46660fffc19Sjw149990 4677c478bd9Sstevel@tonic-gate 468a0261a43SJames C. McPherson# 469a0261a43SJames C. McPherson# 470a0261a43SJames C. McPherson# main starts here 471a0261a43SJames C. McPherson# 472a0261a43SJames C. McPherson 473a0261a43SJames C. McPhersoncmd=none 4747c478bd9Sstevel@tonic-gate# process options 47560fffc19Sjw149990while getopts D:geduLl: c 4767c478bd9Sstevel@tonic-gatedo 4777c478bd9Sstevel@tonic-gate case $c in 4787c478bd9Sstevel@tonic-gate e) setcmd enable;; 4797c478bd9Sstevel@tonic-gate d) setcmd disable;; 4807c478bd9Sstevel@tonic-gate u) setcmd update;; 4817c478bd9Sstevel@tonic-gate L) setcmd listall;; 4827c478bd9Sstevel@tonic-gate l) setcmd list 4837c478bd9Sstevel@tonic-gate controller=$OPTARG;; 48460fffc19Sjw149990 D) DRV=$OPTARG;; 48560fffc19Sjw149990 g) GUID="-g";; 4867c478bd9Sstevel@tonic-gate \?) echo "$USAGE" 1>&2 4877c478bd9Sstevel@tonic-gate exit 2;; 4887c478bd9Sstevel@tonic-gate esac 4897c478bd9Sstevel@tonic-gatedone 4907c478bd9Sstevel@tonic-gate 491fa30e7bdSjianfei wang - Sun Microsystems - Beijing Chinaif [ "$cmd" = "none" ]; then 4927c478bd9Sstevel@tonic-gate echo "$USAGE" 1>&2 4937c478bd9Sstevel@tonic-gate exit 2 4947c478bd9Sstevel@tonic-gatefi 4957c478bd9Sstevel@tonic-gate 496fa30e7bdSjianfei wang - Sun Microsystems - Beijing Chinaif [ -z "$DRV" ]; then 4974c06356bSdh142964 DRVLIST="fp mpt mpt_sas pmcs" 49860fffc19Sjw149990else 49960fffc19Sjw149990 DRVLIST=$DRV 50060fffc19Sjw149990fi 50160fffc19Sjw149990 50234c94816SjmcpUSERID=`id | $EGREP "uid=0"` 50334c94816Sjmcpif [ -z "$USERID" ]; then 5047c478bd9Sstevel@tonic-gate gettext "You must be super-user to run this script.\n" 1>&2 5057c478bd9Sstevel@tonic-gate exit 1 5067c478bd9Sstevel@tonic-gatefi 5077c478bd9Sstevel@tonic-gate 5087c478bd9Sstevel@tonic-gate# just a sanity check 5097c478bd9Sstevel@tonic-gateif [ ! -f $STMSBOOTUTIL -o ! -f $STMSMETHODSCRIPT ]; then 5107c478bd9Sstevel@tonic-gate fmt=`gettext "Can't find %s and/or %s"` 5117c478bd9Sstevel@tonic-gate printf "$fmt\n" "$STMSBOOTUTIL" "$STMSMETHODSCRIPT" 1>&2 5127c478bd9Sstevel@tonic-gate exit 1 5137c478bd9Sstevel@tonic-gatefi 5147c478bd9Sstevel@tonic-gate 51560fffc19Sjw149990# If the old sun4u-specific SMF method is found, remove it 516815dd917Sjmcp$SVCCFG -s "platform/sun4u/mpxio-upgrade:default" < /dev/null > /dev/null 2>&1 517815dd917Sjmcpif [ $? -eq 0 ]; then 518815dd917Sjmcp $SVCCFG delete "platform/sun4u/mpxio-upgrade:default" > /dev/null 2>&1 51960fffc19Sjw149990fi 52060fffc19Sjw149990 52160fffc19Sjw149990# now import the new service, if necessary 522815dd917Sjmcp$SVCPROP -q $STMSINSTANCE < /dev/null > /dev/null 2>&1 52360fffc19Sjw149990if [ $? -ne 0 ]; then 5249444c26fSTom Whitten if [ -f /lib/svc/manifest/system/device/mpxio-upgrade.xml ]; then 5259444c26fSTom Whitten $SVCCFG import /lib/svc/manifest/system/device/mpxio-upgrade.xml 52660fffc19Sjw149990 if [ $? -ne 0 ]; then 527fa30e7bdSjianfei wang - Sun Microsystems - Beijing China 52853ed03b5Sjmcp fmt=`gettext "Unable to import the %s service"` 5297c478bd9Sstevel@tonic-gate printf "$fmt\n" "$STMSINSTANCE" 1>&2 5307c478bd9Sstevel@tonic-gate exit 1 53160fffc19Sjw149990 else 53260fffc19Sjw149990 fmt=`gettext "Service %s imported successfully, continuing"` 53360fffc19Sjw149990 printf "$fmt\n" "$STMSINSTANCE" 1>&2 53460fffc19Sjw149990 fi 53560fffc19Sjw149990 else 53660fffc19Sjw149990 fmt=`gettext "Service %s does not exist on this host"` 53760fffc19Sjw149990 printf "$fmt\n" "$STMSINSTANCE" 1>&2 53860fffc19Sjw149990 exit 1 53960fffc19Sjw149990 fi 5407c478bd9Sstevel@tonic-gatefi 5417c478bd9Sstevel@tonic-gate 542a0261a43SJames C. McPherson 543a0261a43SJames C. McPherson# make sure we can stash our data somewhere private 544a0261a43SJames C. McPhersonif [ ! -d $SAVEDIR ]; then 545a0261a43SJames C. McPherson $MKDIR -p $SAVEDIR 546a0261a43SJames C. McPhersonfi 547a0261a43SJames C. McPherson# prime the cache 548a0261a43SJames C. McPherson$STMSBOOTUTIL -i 549a0261a43SJames C. McPherson 550a0261a43SJames C. McPherson 551fa30e7bdSjianfei wang - Sun Microsystems - Beijing Chinaif [ "$cmd" = "enable" -o "$cmd" = "disable" -o "$cmd" = "update" ]; then 5527c478bd9Sstevel@tonic-gate # 5537c478bd9Sstevel@tonic-gate # The bootup script doesn't work on cache-only-clients as the script 5546deb031bSsjelinek # is executed before the plumbing for cachefs mounting of root is done. 5557c478bd9Sstevel@tonic-gate # 55660fffc19Sjw149990 if $MOUNT -v | $EGREP -s " on / type (nfs|cachefs) "; then 557a0261a43SJames C. McPherson gettext "This command option is not supported on systems with an nfs or cachefs mounted root filesystem.\n" 1>&2 5587c478bd9Sstevel@tonic-gate exit 1 5597c478bd9Sstevel@tonic-gate fi 5607c478bd9Sstevel@tonic-gate 561815dd917Sjmcp # if the user has left the system with the mpxio-upgrade service 562815dd917Sjmcp # in a temporarily disabled state (ie, service is armed for the next 563815dd917Sjmcp # reboot), then let them know. We need to ensure that the system is 564815dd917Sjmcp # is in a sane state before allowing any further invocations, so 565815dd917Sjmcp # try to get the system admin to do so 566815dd917Sjmcp 567a0261a43SJames C. McPherson ISARMED=`$SVCS -l $STMSINSTANCE|$GREP "enabled.*false.*temporary"` 568a0261a43SJames C. McPherson if [ ! $? ]; then 569815dd917Sjmcp echo "" 57053ed03b5Sjmcp gettext "You need to reboot the system in order to complete\n" 57153ed03b5Sjmcp gettext "the previous invocation of stmsboot.\n" 572815dd917Sjmcp echo "" 57353ed03b5Sjmcp gettext "Do you wish to reboot the system now? (y/n, default y) " 574815dd917Sjmcp read response 575815dd917Sjmcp 576fa30e7bdSjianfei wang - Sun Microsystems - Beijing China if [ -z "$response" -o "x$response" = "Y" -o \ 577fa30e7bdSjianfei wang - Sun Microsystems - Beijing China "$response" = "y" ]; then 578a0261a43SJames C. McPherson $REBOOT 579815dd917Sjmcp else 58053ed03b5Sjmcp echo "" 58153ed03b5Sjmcp gettext "Please reboot this system before continuing\n" 58253ed03b5Sjmcp echo "" 583815dd917Sjmcp exit 1 584815dd917Sjmcp fi 585815dd917Sjmcp fi 586815dd917Sjmcp 5877c478bd9Sstevel@tonic-gate # 5887c478bd9Sstevel@tonic-gate # keep a copy of the last saved files, useful for manual 5897c478bd9Sstevel@tonic-gate # recovery in case of a problem. 5907c478bd9Sstevel@tonic-gate # 59160fffc19Sjw149990 for d in $DRVLIST; do 59260fffc19Sjw149990 DRVCONF=$d.conf 59360fffc19Sjw149990 KDRVCONF=/kernel/drv/$d.conf 59460fffc19Sjw149990 TMPDRVCONF=/var/run/tmp.$d.conf.$$ 59560fffc19Sjw149990 TMPDRVCONF_MPXIO_ENTRY=/var/run/tmp.$d.conf.mpxioentry.$$; 596fa30e7bdSjianfei wang - Sun Microsystems - Beijing China if [ "$MACH" = "sparc" ]; then 59760fffc19Sjw149990 backup_lastsaved $KDRVCONF $VFSTAB 5987c478bd9Sstevel@tonic-gate else 599a0261a43SJames C. McPherson backup_lastsaved $KDRVCONF $VFSTAB /boot/solaris/$BOOTENV_FILE 6005a4c37c9Sqh201292 fi 60160fffc19Sjw149990 done 6027c478bd9Sstevel@tonic-gatefi 6037c478bd9Sstevel@tonic-gate 604fa30e7bdSjianfei wang - Sun Microsystems - Beijing Chinaif [ "$cmd" = "enable" -o "$cmd" = "disable" ]; then 60560fffc19Sjw149990 6067fc66be0Sjianfei wang - Sun Microsystems - Beijing China msgneeded=`echo "$DRVLIST" |$GREP " "` 60760fffc19Sjw149990 if [ -n "$msgneeded" ]; then 60860fffc19Sjw149990 emit_driver_warning_msg 60960fffc19Sjw149990 fi 61060fffc19Sjw149990 for d in $DRVLIST; do 61160fffc19Sjw149990 configure_mpxio $cmd $d 61260fffc19Sjw149990 done 61360fffc19Sjw149990 61460fffc19Sjw149990 if [ $reboot_needed -ne 0 ]; then 61560fffc19Sjw149990 # Need to update bootpath on x86 if our boot device is 61660fffc19Sjw149990 # now accessed through mpxio. 61760fffc19Sjw149990 # Only update bootpath before reboot when mpxio is enabled 61860fffc19Sjw149990 # If mpxio is currently disabled, we will update bootpath 61960fffc19Sjw149990 # on reboot in the mpxio-upgrade service 62060fffc19Sjw149990 621fa30e7bdSjianfei wang - Sun Microsystems - Beijing China if [ "$cmd" = "disable" ]; then 622fa30e7bdSjianfei wang - Sun Microsystems - Beijing China if [ "$MACH" = "i386" ]; then 62360fffc19Sjw149990 get_newbootpath_for_stmsdev 62460fffc19Sjw149990 if [ $? -ne 0 ]; then 625a0261a43SJames C. McPherson $RM -f $TMPDRVCONF > /dev/null 2>&1 62660fffc19Sjw149990 gettext "failed to update bootpath.\n" 1>&2 62760fffc19Sjw149990 gettext "No changes were made to your STMS configuration.\n" 1>&2 62860fffc19Sjw149990 return 1 62960fffc19Sjw149990 fi 63060fffc19Sjw149990 fi 631789c9c8fSJames C. McPherson # If we're not using ZFS root then we need 632789c9c8fSJames C. McPherson # to keep track of what / maps to in case 633789c9c8fSJames C. McPherson # it's an active-active device and we boot from 634789c9c8fSJames C. McPherson # the other path 6357fc66be0Sjianfei wang - Sun Microsystems - Beijing China HASZFSROOT=`$DF -g / |$GREP zfs` 6367fc66be0Sjianfei wang - Sun Microsystems - Beijing China if [ -z "$HASZFSROOT" ]; then 637789c9c8fSJames C. McPherson ROOTSCSIVHCI=`$DF /|$AWK -F":" '{print $1}' | \ 6387fc66be0Sjianfei wang - Sun Microsystems - Beijing China $AWK -F"(" '{print $2}'| $SED -e"s,),,"` 6397fc66be0Sjianfei wang - Sun Microsystems - Beijing China TMPROOTDEV=`$LS -l $ROOTSCSIVHCI |$AWK -F">" '{print $2}' | \ 6407fc66be0Sjianfei wang - Sun Microsystems - Beijing China $SED -e"s, ../../devices,,"` 6417fc66be0Sjianfei wang - Sun Microsystems - Beijing China $STMSBOOTUTIL -q $TMPROOTDEV > $BOOTDEVICES 6427fc66be0Sjianfei wang - Sun Microsystems - Beijing China fi 643789c9c8fSJames C. McPherson fi 64460fffc19Sjw149990 update_sysfiles 64560fffc19Sjw149990 else 64660fffc19Sjw149990 echo "STMS is already ${cmd}d. No changes or reboots needed" 64760fffc19Sjw149990 fi 64860fffc19Sjw149990 64960fffc19Sjw149990 650fa30e7bdSjianfei wang - Sun Microsystems - Beijing Chinaelif [ "$cmd" = "update" ]; then 651fa30e7bdSjianfei wang - Sun Microsystems - Beijing China if [ "$MACH" = "i386" ]; then 6525a4c37c9Sqh201292 # In this case we always change the bootpath to phci-based 6535a4c37c9Sqh201292 # path first. bootpath will later be modified in mpxio-upgrade 6545a4c37c9Sqh201292 # to the vhci-based path if mpxio is enabled on root. 6555a4c37c9Sqh201292 get_newbootpath_for_stmsdev 6565a4c37c9Sqh201292 if [ $? -ne 0 ]; then 6575a4c37c9Sqh201292 gettext "failed to update bootpath.\n" 1>&2 6585a4c37c9Sqh201292 return 1 6595a4c37c9Sqh201292 fi 6605a4c37c9Sqh201292 fi 6617c478bd9Sstevel@tonic-gate update_sysfiles 66260fffc19Sjw149990 663fa30e7bdSjianfei wang - Sun Microsystems - Beijing Chinaelif [ "$cmd" = "list" ]; then 66460fffc19Sjw149990 $STMSBOOTUTIL $GUID -l $controller 6657c478bd9Sstevel@tonic-gateelse 66660fffc19Sjw149990 $STMSBOOTUTIL $GUID -L 6677c478bd9Sstevel@tonic-gatefi 6687c478bd9Sstevel@tonic-gate 6697c478bd9Sstevel@tonic-gateexit $? 670