1 #!/sbin/sh -p 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 (c) 2004, 2010, Oracle and/or its affiliates. All rights reserved. 24 # 25 # 26 PATH=/usr/bin:/usr/sbin:$PATH; export PATH 27 STMSBOOTUTIL=/lib/mpxio/stmsboot_util 28 STMSMETHODSCRIPT=/lib/svc/method/mpxio-upgrade 29 KDRVCONF= 30 DRVCONF= 31 TMPDRVCONF= 32 TMPDRVCONF_MPXIO_ENTRY= 33 TMPDRVCONF_SATA_ENTRY= 34 DRVLIST= 35 GUID= 36 VFSTAB=/etc/vfstab 37 SAVEDIR=/etc/mpxio 38 BOOTDEVICES=$SAVEDIR/boot-devices 39 RECOVERFILE=$SAVEDIR/recover_instructions 40 SVCCFG_RECOVERY=$SAVEDIR/svccfg_recover 41 SUPPORTED_DRIVERS="fp|mpt|mpt_sas|pmcs" 42 USAGE=`gettext "Usage: stmsboot [-D $SUPPORTED_DRIVERS] -e | -d | -u | -L | -l controller_number"` 43 TEXTDOMAIN=SUNW_OST_OSCMD 44 export TEXTDOMAIN 45 STMSINSTANCE=svc:system/device/mpxio-upgrade:default 46 FASTBOOTINSTANCE=svc:system/boot-config:default 47 STMSBOOT=/usr/sbin/stmsboot 48 BOOTADM=/sbin/bootadm 49 MOUNT=/usr/sbin/mount 50 EEPROM=/usr/sbin/eeprom 51 EGREP=/usr/bin/egrep 52 GREP=/usr/bin/grep 53 AWK=/usr/bin/awk 54 CP=/usr/bin/cp 55 DF=/usr/bin/df 56 LS=/usr/bin/ls 57 MV=/usr/bin/mv 58 RM=/usr/bin/rm 59 SORT=/usr/bin/sort 60 UNIQ=/usr/bin/uniq 61 EXPR=/usr/bin/expr 62 MKDIR=/usr/bin/mkdir 63 REBOOT=/usr/sbin/reboot 64 SED=/usr/bin/sed 65 SVCPROP=/usr/bin/svcprop 66 SVCCFG=/usr/sbin/svccfg 67 SVCS=/usr/bin/svcs 68 SVCADM=/usr/sbin/svcadm 69 70 NOW=`/usr/bin/date +%G%m%d_%H%M` 71 MACH=`/usr/bin/uname -p` 72 BOOTENV_FILE=bootenv.rc 73 reboot_needed=0 74 new_bootpath="" 75 CLIENT_TYPE_PHCI="" 76 CLIENT_TYPE_VHCI="/scsi_vhci" 77 78 # 79 # Copy all entries (including comments) from source driver.conf 80 # to destination driver.conf except those entries which contain 81 # the mpxio-disable property. 82 # Take into consideration entries that spawn more than one line. 83 # 84 # $1 source driver.conf file 85 # $2 destination driver.conf file 86 # 87 # Returns 0 on success, non zero on failure. 88 # 89 delete_mpxio_disable_entries() 90 { 91 # be careful here, we've got embedded \t characters 92 # in sed's pattern space. 93 $SED ' 94 /^[ ]*#/{ p 95 d 96 } 97 s/[ ]*$// 98 /^$/{ p 99 d 100 } 101 /mpxio-disable[ ]*=.*;$/{ w '$3' 102 d 103 } 104 /disable-sata-mpxio[ ]*=.*;$/{ w '$4' 105 d 106 } 107 /;$/{ p 108 d 109 } 110 :rdnext 111 N 112 s/[ ]*$// 113 /[^;]$/b rdnext 114 /mpxio-disable[ ]*=/{ s/\n/ /g 115 w '$3' 116 d 117 } 118 ' $1 > $2 119 120 return $? 121 } 122 123 # 124 # backup the last saved copy of the specified files. 125 # $* files to backup 126 # 127 backup_lastsaved() 128 { 129 for file in $* 130 do 131 newfile=`basename $file` 132 $CP $file $SAVEDIR/$newfile.$cmd.$NOW 133 done 134 } 135 136 # 137 # build recover instructions 138 # 139 # $1 1 to include boot script in the instructions 140 # 0 otherwise 141 # 142 build_recover() 143 { 144 gettext "Instructions to recover your previous STMS configuration (if in case the system does not boot):\n\n" > $RECOVERFILE 145 echo "\tboot net \c" >> $RECOVERFILE 146 gettext "(or from a cd/dvd/another disk)\n" >> $RECOVERFILE 147 echo "\tfsck <your-root-device>" >> $RECOVERFILE 148 echo "\tmount <your-root-device> /mnt" >> $RECOVERFILE 149 150 if [ "$cmd" = "update" ]; then 151 gettext "\tUndo the modifications you made to STMS configuration.\n\tFor example undo any changes you made to " >> $RECOVERFILE 152 echo "/mnt$KDRVCONF." >> $RECOVERFILE 153 else 154 echo "\tcp /mnt${SAVEDIR}/$DRVCONF.$cmd.$NOW /mnt$KDRVCONF" >> $RECOVERFILE 155 fi 156 157 if [ $1 -eq 1 ]; then 158 echo "\tcp /mnt${SAVEDIR}/vfstab.$cmd.$NOW /mnt$VFSTAB" >> $RECOVERFILE 159 160 echo "repository /mnt/etc/svc/repository.db" > $SVCCFG_RECOVERY 161 echo "select $STMSINSTANCE" >> $SVCCFG_RECOVERY 162 echo "setprop general/enabled=false" >> $SVCCFG_RECOVERY 163 echo "exit" >> $SVCCFG_RECOVERY 164 165 echo "\t$SVCCFG -f /mnt$SVCCFG_RECOVERY" >> $RECOVERFILE 166 167 if [ -n "$new_bootpath" -a "$MACH" = "i386" ]; then 168 echo "\tcp /mnt${SAVEDIR}/bootenv.rc.$cmd.$NOW /mnt/boot/solaris/$BOOTENV_FILE" >> $RECOVERFILE 169 fi 170 fi 171 172 rootdisk=`$MOUNT | $GREP "/ on " | cut -f 3 -d " "` 173 echo "\tumount /mnt\n\treboot\n\n${rootdisk} \c" >> $RECOVERFILE 174 gettext "was your root device,\nbut it could be named differently after you boot net.\n" >> $RECOVERFILE 175 } 176 177 178 # 179 # Arrange for /etc/vfstab and dump configuration to be updated 180 # during the next reboot. If the cmd is "enable" or "disable", copy 181 # $TMPDRVCONF to $KDRVCONF. 182 # 183 # Returns 0 on success, 1 on failure. 184 # 185 update_sysfiles() 186 { 187 188 gettext "WARNING: This operation will require a reboot.\n" 189 gettext "Do you want to continue ? [y/n] (default: y) " 190 read response 191 192 if [ -n "$response" -a "$response" != "y" -a \ 193 "$response" != "Y" ]; then 194 for d in $DRVLIST; do 195 TMPDRVCONF=/var/run/tmp.$d.conf.$$ 196 $RM -f $TMPDRVCONF > /dev/null 2>&1 197 done; 198 return 0; 199 fi 200 201 # set need_bootscript to the number of drivers that 202 # we support. 203 need_bootscript=`echo $SUPPORTED_DRIVERS|$AWK -F"|" '{print NF}'` 204 205 if [ "$cmd" = "enable" -o "$cmd" = "disable" ]; then 206 207 for d in $DRVLIST; do 208 DRVCONF=$d.conf 209 KDRVCONF=/kernel/drv/$d.conf 210 TMPDRVCONF=/var/run/tmp.$d.conf.$$ 211 212 $CP $KDRVCONF $SAVEDIR/`basename $KDRVCONF`.$cmd.$NOW 213 if [ -f $TMPDRVCONF ]; then 214 $CP $TMPDRVCONF $KDRVCONF 215 $RM -f $TMPDRVCONF 216 else 217 # if $TMPDRVCONF doesn't exist, then we 218 # haven't made any changes to it 219 continue; 220 fi 221 222 # 223 # there is no need to update the system files in the following 224 # cases: 225 # - we are enabling mpxio and the system has no configured 226 # disks accessible by phci paths. 227 # - we are disabling mpxio and the system has no configured 228 # disks accessible by vhci paths. 229 # 230 231 # Function to setup the CLIENT_TYPE_PHCI string based on 232 # the list of drivers that we're operating on. The variable 233 # depends upon the pathname of the parent node in the 234 # device tree, which can be different on x86/x64 and sparc. 235 236 CLIENT_TYPE_PHCI=`$STMSBOOTUTIL -D $d -N`; 237 238 if [ -z "$CLIENT_TYPE_PHCI" ]; then 239 continue; 240 fi 241 242 if [ "$cmd" = "enable" ]; then 243 $LS -l /dev/dsk/*s2 2> /dev/null | \ 244 $EGREP -s "$CLIENT_TYPE_PHCI" 245 else 246 $LS -l /dev/dsk/*s2 2> /dev/null | \ 247 $EGREP -s "$CLIENT_TYPE_VHCI" 248 fi 249 250 if [ $? -ne 0 ]; then 251 need_bootscript=`$EXPR $need_bootscript - 1` 252 fi 253 done 254 fi 255 256 if [ $need_bootscript -gt 0 ]; then 257 need_bootscript=1 258 if [ -n "$new_bootpath" -a "$MACH" = "i386" ]; then 259 #only update bootpath for x86. 260 $CP /boot/solaris/$BOOTENV_FILE $SAVEDIR/$BOOTENV_FILE.$cmd.$NOW 261 $EEPROM bootpath="$new_bootpath" 262 fi 263 264 if [ "$MACH" = "i386" ]; then 265 # Disable Fast Reboot temporarily for the next reboot only. 266 HASZFSROOT=`$DF -g / |$GREP zfs` 267 if [ -n "$HASZFSROOT" ]; then 268 $SVCCFG -s $FASTBOOTINSTANCE addpg config_ovr application P > /dev/null 2>&1 269 $SVCCFG -s $FASTBOOTINSTANCE \ 270 setprop config_ovr/fastreboot_default=boolean:\"false\" 271 $SVCCFG -s $FASTBOOTINSTANCE \ 272 setprop config_ovr/fastreboot_onpanic=boolean:\"false\" 273 $SVCADM refresh $FASTBOOTINSTANCE 274 fi 275 fi 276 277 # Enable the mpxio-upgrade service for the reboot 278 $SVCADM disable -t $STMSINSTANCE 279 $SVCCFG -s $STMSINSTANCE "setprop general/enabled=true" 280 else 281 need_bootscript=0 282 fi 283 284 build_recover $need_bootscript 285 286 if [ "$MACH" = "i386" ]; then 287 $BOOTADM update-archive 288 fi 289 290 gettext "The changes will come into effect after rebooting the system.\nReboot the system now ? [y/n] (default: y) " 291 read response 292 293 if [ -z "$response" -o "$response" = "y" -o \ 294 "$response" = "Y" ]; then 295 $REBOOT 296 fi 297 298 return 0 299 } 300 301 302 # 303 # Enable or disable mpxio as specified by the cmd. 304 # Returns 0 on success, 1 on failure. 305 # 306 # Args: $cmd = {enable | disable} 307 # $d = {fp | mpt | mpt_sas | pmcs} 308 # 309 # the global variable $DRVLIST is used 310 # 311 configure_mpxio() 312 { 313 # be careful here, we've got embedded \t characters 314 # in sed's pattern space. 315 mpxiodisableno='mpxio-disable[ ]*=[ ]*"no"[ ]*;' 316 mpxiodisableyes='mpxio-disable[ ]*=[ ]*"yes"[ ]*;' 317 satadisableno='disable-sata-mpxio[ ]*=[ ]*"no"[ ]*;' 318 satadisableyes='disable-sata-mpxio[ ]*=[ ]*"yes"[ ]*;' 319 320 if [ "$cmd" = "enable" ]; then 321 mpxiodisable_cur_entry=$mpxiodisableyes 322 satadisable_cur_entry=$satadisableyes 323 propval=no 324 msg=`gettext "STMS already enabled"` 325 else 326 mpxiodisable_cur_entry=$mpxiodisableno 327 satadisable_cur_entry=$satadisableno 328 propval=yes 329 msg=`gettext "STMS already disabled"` 330 fi 331 332 DRVCONF=$d.conf 333 KDRVCONF=/kernel/drv/$d.conf 334 TMPDRVCONF=/var/run/tmp.$d.conf.$$ 335 TMPDRVCONF_MPXIO_ENTRY=/var/run/tmp.$d.conf.mpxioentry.$$; 336 TMPDRVCONF_SATA_ENTRY=/var/run/tmp.$d.conf.sataentry.$$; 337 338 if delete_mpxio_disable_entries $KDRVCONF $TMPDRVCONF $TMPDRVCONF_MPXIO_ENTRY $TMPDRVCONF_SATA_ENTRY; then 339 340 if [ -s $TMPDRVCONF_MPXIO_ENTRY ]; then 341 # $DRVCONF does have mpxiodisable entries 342 $EGREP -s "$mpxiodisable_cur_entry" $TMPDRVCONF_MPXIO_ENTRY 343 if [ $? -eq 0 ]; then 344 reboot_needed=`$EXPR $reboot_needed + 1` 345 else 346 # if all mpxiodisable entries are no/yes for 347 # enable/disable mpxio, notify the user 348 $EGREP -s "$satadisable_cur_entry" $TMPDRVCONF_SATA_ENTRY 349 if [ $? -eq 0 -a "$d" = "mpt" ]; then 350 reboot_needed=`$EXPR $reboot_needed + 1` 351 else 352 $RM -f $TMPDRVCONF $TMPDRVCONF_MPXIO_ENTRY $TMPDRVCONF_SATA_ENTRY > /dev/null 2>&1 353 return 0; 354 fi 355 fi 356 357 # If mpxiodisable entries do not exist, always continue update 358 fi 359 else 360 $RM -f $TMPDRVCONF $TMPDRVCONF_MPXIO_ENTRY $TMPDRVCONF_SATA_ENTRY > /dev/null 2>&1 361 gettext "failed to update " 1>&2 362 echo "$KDRVCONF." 1>&2 363 gettext "No changes were made to your STMS configuration.\n" 1>&2 364 return 1 365 fi 366 367 rm $TMPDRVCONF_MPXIO_ENTRY $TMPDRVCONF_SATA_ENTRY > /dev/null 2>&1 368 echo "mpxio-disable=\"${propval}\";" >> $TMPDRVCONF 369 if [ "$d" = "mpt" ]; then 370 echo "disable-sata-mpxio=\"${propval}\";" >> $TMPDRVCONF 371 fi 372 373 } 374 375 setcmd() 376 { 377 if [ "$cmd" = "none" ]; then 378 cmd=$1 379 else 380 echo "$USAGE" 1>&2 381 exit 2 382 fi 383 } 384 385 # 386 # Need to update bootpath on x86 if boot system from FC disk 387 # Only update bootpath here when mpxio is enabled 388 # If mpxio is currently disabled, then we'll update bootpath in the 389 # mpxio-upgrade service method on reboot. 390 # 391 392 get_newbootpath_for_stmsdev() { 393 if [ "$cmd" = "enable" ]; then 394 return 0 395 fi 396 397 cur_bootpath=`$STMSBOOTUTIL -b` 398 if [ $? != 0 ]; then 399 return 1 400 fi 401 402 # Since on x64 platforms the eeprom command doesn't update the 403 # kernel, the file /boot/solaris/bootenv.rc and the kernel's 404 # bootpath variable have a good chance of differing. We do some 405 # extra handwaving to get the correct bootpath variable setting. 406 407 ONDISKVER=`$AWK '/bootpath/ {print $3}' /boot/solaris/bootenv.rc|\ 408 $SED -e"s,',,g"` 409 if [ "$ONDISKVER" != "$cur_bootpath" ]; then 410 cur_bootpath="$ONDISKVER" 411 fi 412 413 NEWBOOTPATH="" 414 for path in $cur_bootpath; do 415 mapped=`$STMSBOOTUTIL -p $path` 416 if [ "$mapped" != "NOT_MAPPED" ]; then 417 if [ "$mapped" != "$path" ]; then 418 NEWBOOTPATH=`echo "$path " | \ 419 $SED -e"s|$path|$mapped|"`" $NEWBOOTPATH" 420 else 421 NEWBOOTPATH="$NEWBOOTPATH $path" 422 fi 423 fi 424 done 425 # now strip off leading and trailing space chars 426 new_bootpath=`echo $NEWBOOTPATH` 427 return 0 428 } 429 430 # 431 # Emit a warning message to the user that by default we 432 # operate on all multipath-capable controllers that are 433 # attached to the system, and that if they want to operate 434 # on only a specific controller type (fp|mpt|mpt_sas|pmcs|....) then 435 # they need to re-invoke stmsboot with "-D $driver" in 436 # their argument list 437 # 438 439 emit_driver_warning_msg() { 440 441 # for each driver that we support, grab the list 442 # of controllers attached to the system. 443 444 echo "" 445 gettext "WARNING: stmsboot operates on each supported multipath-capable controller\n" 446 gettext " detected in a host. In your system, these controllers are\n\n" 447 448 for WARNDRV in `echo $SUPPORTED_DRIVERS| $SED -e"s,|, ,g"`; do 449 $STMSBOOTUTIL -D $WARNDRV -n 450 done; 451 452 echo "" 453 gettext "If you do NOT wish to operate on these controllers, please quit stmsboot\n" 454 gettext "and re-invoke with -D { fp | mpt | mpt_sas | pmcs} to specify which controllers you wish\n" 455 gettext "to modify your multipathing configuration for.\n" 456 457 echo "" 458 gettext "Do you wish to continue? [y/n] (default: y) " 459 read response 460 461 if [ -n "$response" -a "$response" != "Y" -a \ 462 "$response" != "y" ]; then 463 exit 464 fi 465 } 466 467 468 # 469 # 470 # main starts here 471 # 472 473 cmd=none 474 # process options 475 while getopts D:geduLl: c 476 do 477 case $c in 478 e) setcmd enable;; 479 d) setcmd disable;; 480 u) setcmd update;; 481 L) setcmd listall;; 482 l) setcmd list 483 controller=$OPTARG;; 484 D) DRV=$OPTARG;; 485 g) GUID="-g";; 486 \?) echo "$USAGE" 1>&2 487 exit 2;; 488 esac 489 done 490 491 if [ "$cmd" = "none" ]; then 492 echo "$USAGE" 1>&2 493 exit 2 494 fi 495 496 if [ -z "$DRV" ]; then 497 DRVLIST="fp mpt mpt_sas pmcs" 498 else 499 DRVLIST=$DRV 500 fi 501 502 USERID=`id | $EGREP "uid=0"` 503 if [ -z "$USERID" ]; then 504 gettext "You must be super-user to run this script.\n" 1>&2 505 exit 1 506 fi 507 508 # just a sanity check 509 if [ ! -f $STMSBOOTUTIL -o ! -f $STMSMETHODSCRIPT ]; then 510 fmt=`gettext "Can't find %s and/or %s"` 511 printf "$fmt\n" "$STMSBOOTUTIL" "$STMSMETHODSCRIPT" 1>&2 512 exit 1 513 fi 514 515 # If the old sun4u-specific SMF method is found, remove it 516 $SVCCFG -s "platform/sun4u/mpxio-upgrade:default" < /dev/null > /dev/null 2>&1 517 if [ $? -eq 0 ]; then 518 $SVCCFG delete "platform/sun4u/mpxio-upgrade:default" > /dev/null 2>&1 519 fi 520 521 # now import the new service, if necessary 522 $SVCPROP -q $STMSINSTANCE < /dev/null > /dev/null 2>&1 523 if [ $? -ne 0 ]; then 524 if [ -f /lib/svc/manifest/system/device/mpxio-upgrade.xml ]; then 525 $SVCCFG import /lib/svc/manifest/system/device/mpxio-upgrade.xml 526 if [ $? -ne 0 ]; then 527 528 fmt=`gettext "Unable to import the %s service"` 529 printf "$fmt\n" "$STMSINSTANCE" 1>&2 530 exit 1 531 else 532 fmt=`gettext "Service %s imported successfully, continuing"` 533 printf "$fmt\n" "$STMSINSTANCE" 1>&2 534 fi 535 else 536 fmt=`gettext "Service %s does not exist on this host"` 537 printf "$fmt\n" "$STMSINSTANCE" 1>&2 538 exit 1 539 fi 540 fi 541 542 543 # make sure we can stash our data somewhere private 544 if [ ! -d $SAVEDIR ]; then 545 $MKDIR -p $SAVEDIR 546 fi 547 # prime the cache 548 $STMSBOOTUTIL -i 549 550 551 if [ "$cmd" = "enable" -o "$cmd" = "disable" -o "$cmd" = "update" ]; then 552 # 553 # The bootup script doesn't work on cache-only-clients as the script 554 # is executed before the plumbing for cachefs mounting of root is done. 555 # 556 if $MOUNT -v | $EGREP -s " on / type (nfs|cachefs) "; then 557 gettext "This command option is not supported on systems with an nfs or cachefs mounted root filesystem.\n" 1>&2 558 exit 1 559 fi 560 561 # if the user has left the system with the mpxio-upgrade service 562 # in a temporarily disabled state (ie, service is armed for the next 563 # reboot), then let them know. We need to ensure that the system is 564 # is in a sane state before allowing any further invocations, so 565 # try to get the system admin to do so 566 567 ISARMED=`$SVCS -l $STMSINSTANCE|$GREP "enabled.*false.*temporary"` 568 if [ ! $? ]; then 569 echo "" 570 gettext "You need to reboot the system in order to complete\n" 571 gettext "the previous invocation of stmsboot.\n" 572 echo "" 573 gettext "Do you wish to reboot the system now? (y/n, default y) " 574 read response 575 576 if [ -z "$response" -o "x$response" = "Y" -o \ 577 "$response" = "y" ]; then 578 $REBOOT 579 else 580 echo "" 581 gettext "Please reboot this system before continuing\n" 582 echo "" 583 exit 1 584 fi 585 fi 586 587 # 588 # keep a copy of the last saved files, useful for manual 589 # recovery in case of a problem. 590 # 591 for d in $DRVLIST; do 592 DRVCONF=$d.conf 593 KDRVCONF=/kernel/drv/$d.conf 594 TMPDRVCONF=/var/run/tmp.$d.conf.$$ 595 TMPDRVCONF_MPXIO_ENTRY=/var/run/tmp.$d.conf.mpxioentry.$$; 596 if [ "$MACH" = "sparc" ]; then 597 backup_lastsaved $KDRVCONF $VFSTAB 598 else 599 backup_lastsaved $KDRVCONF $VFSTAB /boot/solaris/$BOOTENV_FILE 600 fi 601 done 602 fi 603 604 if [ "$cmd" = "enable" -o "$cmd" = "disable" ]; then 605 606 msgneeded=`echo "$DRVLIST" |$GREP " "` 607 if [ -n "$msgneeded" ]; then 608 emit_driver_warning_msg 609 fi 610 for d in $DRVLIST; do 611 configure_mpxio $cmd $d 612 done 613 614 if [ $reboot_needed -ne 0 ]; then 615 # Need to update bootpath on x86 if our boot device is 616 # now accessed through mpxio. 617 # Only update bootpath before reboot when mpxio is enabled 618 # If mpxio is currently disabled, we will update bootpath 619 # on reboot in the mpxio-upgrade service 620 621 if [ "$cmd" = "disable" ]; then 622 if [ "$MACH" = "i386" ]; then 623 get_newbootpath_for_stmsdev 624 if [ $? -ne 0 ]; then 625 $RM -f $TMPDRVCONF > /dev/null 2>&1 626 gettext "failed to update bootpath.\n" 1>&2 627 gettext "No changes were made to your STMS configuration.\n" 1>&2 628 return 1 629 fi 630 fi 631 # If we're not using ZFS root then we need 632 # to keep track of what / maps to in case 633 # it's an active-active device and we boot from 634 # the other path 635 HASZFSROOT=`$DF -g / |$GREP zfs` 636 if [ -z "$HASZFSROOT" ]; then 637 ROOTSCSIVHCI=`$DF /|$AWK -F":" '{print $1}' | \ 638 $AWK -F"(" '{print $2}'| $SED -e"s,),,"` 639 TMPROOTDEV=`$LS -l $ROOTSCSIVHCI |$AWK -F">" '{print $2}' | \ 640 $SED -e"s, ../../devices,,"` 641 $STMSBOOTUTIL -q $TMPROOTDEV > $BOOTDEVICES 642 fi 643 fi 644 update_sysfiles 645 else 646 echo "STMS is already ${cmd}d. No changes or reboots needed" 647 fi 648 649 650 elif [ "$cmd" = "update" ]; then 651 if [ "$MACH" = "i386" ]; then 652 # In this case we always change the bootpath to phci-based 653 # path first. bootpath will later be modified in mpxio-upgrade 654 # to the vhci-based path if mpxio is enabled on root. 655 get_newbootpath_for_stmsdev 656 if [ $? -ne 0 ]; then 657 gettext "failed to update bootpath.\n" 1>&2 658 return 1 659 fi 660 fi 661 update_sysfiles 662 663 elif [ "$cmd" = "list" ]; then 664 $STMSBOOTUTIL $GUID -l $controller 665 else 666 $STMSBOOTUTIL $GUID -L 667 fi 668 669 exit $?